[FFmpeg-cvslog] Merge commit '728ea23cce07467b732f538c87c13da13dd6dcf3'
James Almer
git at videolan.org
Tue Apr 4 20:50:06 EEST 2017
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Tue Apr 4 14:41:23 2017 -0300| [52bce9a13ddca52921c8a32ffcdd2d97b15d0f4d] | committer: James Almer
Merge commit '728ea23cce07467b732f538c87c13da13dd6dcf3'
* commit '728ea23cce07467b732f538c87c13da13dd6dcf3':
examples/decode_video: switch to the new decoding API
Merged-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=52bce9a13ddca52921c8a32ffcdd2d97b15d0f4d
---
doc/examples/decode_video.c | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/doc/examples/decode_video.c b/doc/examples/decode_video.c
index 980add3..5c1c42c 100644
--- a/doc/examples/decode_video.c
+++ b/doc/examples/decode_video.c
@@ -52,28 +52,31 @@ static void decode(AVCodecContext *dec_ctx, AVFrame *frame, AVPacket *pkt,
const char *filename)
{
char buf[1024];
- int ret, got_picture;
+ int ret;
+
+ ret = avcodec_send_packet(dec_ctx, pkt);
+ if (ret < 0) {
+ fprintf(stderr, "Error sending a packet for decoding\n");
+ exit(1);
+ }
- while (pkt->size > 0) {
- ret = avcodec_decode_video2(dec_ctx, frame, &got_picture, pkt);
- if (ret < 0) {
- fprintf(stderr, "Error while decoding frame %d\n", dec_ctx->frame_number);
+ while (ret >= 0) {
+ ret = avcodec_receive_frame(dec_ctx, frame);
+ if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
+ return;
+ else if (ret < 0) {
+ fprintf(stderr, "Error during decoding\n");
exit(1);
}
- if (got_picture) {
- printf("saving frame %3d\n", dec_ctx->frame_number);
- fflush(stdout);
-
- /* the picture is allocated by the decoder. no need to
- free it */
- snprintf(buf, sizeof(buf), filename, dec_ctx->frame_number);
- pgm_save(frame->data[0], frame->linesize[0],
- frame->width, frame->height, buf);
- }
- if (pkt->data) {
- pkt->size -= ret;
- pkt->data += ret;
- }
+
+ printf("saving frame %3d\n", dec_ctx->frame_number);
+ fflush(stdout);
+
+ /* the picture is allocated by the decoder. no need to
+ free it */
+ snprintf(buf, sizeof(buf), filename, dec_ctx->frame_number);
+ pgm_save(frame->data[0], frame->linesize[0],
+ frame->width, frame->height, buf);
}
}
@@ -170,9 +173,7 @@ int main(int argc, char **argv)
}
/* flush the decoder */
- avpkt.data = NULL;
- avpkt.size = 0;
- decode(c, frame, &avpkt, outfilename);
+ decode(c, frame, NULL, outfilename);
fclose(f);
======================================================================
diff --cc doc/examples/decode_video.c
index 980add3,7414643..5c1c42c
--- a/doc/examples/decode_video.c
+++ b/doc/examples/decode_video.c
@@@ -165,14 -161,12 +168,12 @@@ int main(int argc, char **argv
data_size -= ret;
if (avpkt.size)
- decode(c, picture, &avpkt, outfilename);
- }
- }
+ decode(c, frame, &avpkt, outfilename);
+ }
+ }
/* flush the decoder */
- avpkt.data = NULL;
- avpkt.size = 0;
- decode(c, frame, &avpkt, outfilename);
- decode(c, picture, NULL, outfilename);
++ decode(c, frame, NULL, outfilename);
fclose(f);
More information about the ffmpeg-cvslog
mailing list