Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
82116bd8
Commit
82116bd8
authored
Apr 03, 2017
by
Matthieu Bouron
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
doc/examples/extract_mvs: switch to new decoding API
parent
6db36a02
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
37 deletions
+35
-37
extract_mvs.c
doc/examples/extract_mvs.c
+35
-37
No files found.
doc/examples/extract_mvs.c
View file @
82116bd8
...
...
@@ -34,39 +34,46 @@ static AVFrame *frame = NULL;
static
AVPacket
pkt
;
static
int
video_frame_count
=
0
;
static
int
decode_packet
(
int
*
got_frame
,
int
cache
d
)
static
int
decode_packet
(
voi
d
)
{
int
decoded
=
pkt
.
size
;
*
got_frame
=
0
;
if
(
pkt
.
stream_index
==
video_stream_idx
)
{
int
ret
=
avcodec_
decode_video2
(
video_dec_ctx
,
frame
,
got_frame
,
&
pkt
);
int
ret
=
avcodec_
send_packet
(
video_dec_ctx
,
&
pkt
);
if
(
ret
<
0
)
{
fprintf
(
stderr
,
"Error
decoding video frame (%s)
\n
"
,
av_err2str
(
ret
));
fprintf
(
stderr
,
"Error
while sending a packet to the decoder: %s
\n
"
,
av_err2str
(
ret
));
return
ret
;
}
if
(
*
got_frame
)
{
int
i
;
AVFrameSideData
*
sd
;
video_frame_count
++
;
sd
=
av_frame_get_side_data
(
frame
,
AV_FRAME_DATA_MOTION_VECTORS
);
if
(
sd
)
{
const
AVMotionVector
*
mvs
=
(
const
AVMotionVector
*
)
sd
->
data
;
for
(
i
=
0
;
i
<
sd
->
size
/
sizeof
(
*
mvs
);
i
++
)
{
const
AVMotionVector
*
mv
=
&
mvs
[
i
];
printf
(
"%d,%2d,%2d,%2d,%4d,%4d,%4d,%4d,0x%"
PRIx64
"
\n
"
,
video_frame_count
,
mv
->
source
,
mv
->
w
,
mv
->
h
,
mv
->
src_x
,
mv
->
src_y
,
mv
->
dst_x
,
mv
->
dst_y
,
mv
->
flags
);
while
(
ret
>=
0
)
{
ret
=
avcodec_receive_frame
(
video_dec_ctx
,
frame
);
if
(
ret
==
AVERROR
(
EAGAIN
)
||
ret
==
AVERROR_EOF
)
{
break
;
}
else
if
(
ret
<
0
)
{
fprintf
(
stderr
,
"Error while receiving a frame from the decoder: %s
\n
"
,
av_err2str
(
ret
));
return
ret
;
}
if
(
ret
>=
0
)
{
int
i
;
AVFrameSideData
*
sd
;
video_frame_count
++
;
sd
=
av_frame_get_side_data
(
frame
,
AV_FRAME_DATA_MOTION_VECTORS
);
if
(
sd
)
{
const
AVMotionVector
*
mvs
=
(
const
AVMotionVector
*
)
sd
->
data
;
for
(
i
=
0
;
i
<
sd
->
size
/
sizeof
(
*
mvs
);
i
++
)
{
const
AVMotionVector
*
mv
=
&
mvs
[
i
];
printf
(
"%d,%2d,%2d,%2d,%4d,%4d,%4d,%4d,0x%"
PRIx64
"
\n
"
,
video_frame_count
,
mv
->
source
,
mv
->
w
,
mv
->
h
,
mv
->
src_x
,
mv
->
src_y
,
mv
->
dst_x
,
mv
->
dst_y
,
mv
->
flags
);
}
}
av_frame_unref
(
frame
);
}
}
}
return
decoded
;
return
0
;
}
static
int
open_codec_context
(
AVFormatContext
*
fmt_ctx
,
enum
AVMediaType
type
)
...
...
@@ -116,7 +123,7 @@ static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType type)
int
main
(
int
argc
,
char
**
argv
)
{
int
ret
=
0
,
got_frame
;
int
ret
=
0
;
if
(
argc
!=
2
)
{
fprintf
(
stderr
,
"Usage: %s <video>
\n
"
,
argv
[
0
]);
...
...
@@ -157,28 +164,19 @@ int main(int argc, char **argv)
/* initialize packet, set data to NULL, let the demuxer fill it */
av_init_packet
(
&
pkt
);
pkt
.
data
=
NULL
;
pkt
.
size
=
0
;
/* read frames from the file */
while
(
av_read_frame
(
fmt_ctx
,
&
pkt
)
>=
0
)
{
AVPacket
orig_pkt
=
pkt
;
do
{
ret
=
decode_packet
(
&
got_frame
,
0
);
if
(
ret
<
0
)
break
;
pkt
.
data
+=
ret
;
pkt
.
size
-=
ret
;
}
while
(
pkt
.
size
>
0
);
av_packet_unref
(
&
orig_pkt
);
ret
=
decode_packet
();
av_packet_unref
(
&
pkt
);
if
(
ret
<
0
)
break
;
}
/* flush cached frames */
pkt
.
data
=
NULL
;
pkt
.
size
=
0
;
do
{
decode_packet
(
&
got_frame
,
1
);
}
while
(
got_frame
);
decode_packet
();
end:
avcodec_free_context
(
&
video_dec_ctx
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment