diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-10-19 21:56:22 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-11-23 13:10:54 +0100 |
commit | 728ea23cce07467b732f538c87c13da13dd6dcf3 (patch) | |
tree | 51cfcca1c1710d3e13ea0b2b7c3808e4f56fc20c | |
parent | f78d360bba6dcfb585847a49a84e89c25950fbdb (diff) | |
download | ffmpeg-728ea23cce07467b732f538c87c13da13dd6dcf3.tar.gz |
examples/decode_video: switch to the new decoding API
-rw-r--r-- | doc/examples/decode_video.c | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/doc/examples/decode_video.c b/doc/examples/decode_video.c index 4c1068bef3..74146432c0 100644 --- a/doc/examples/decode_video.c +++ b/doc/examples/decode_video.c @@ -54,26 +54,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); - } - 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); } } @@ -161,9 +166,7 @@ int main(int argc, char **argv) } /* flush the decoder */ - avpkt.data = NULL; - avpkt.size = 0; - decode(c, picture, &avpkt, outfilename); + decode(c, picture, NULL, outfilename); fclose(f); |