On Thu, Mar 30, 2017 at 02:23:11PM +0200, wm4 wrote: > On Thu, 30 Mar 2017 13:35:47 +0200 > Matthieu Bouron <matthieu.bou...@gmail.com> wrote: > > > From e9e5b3e679a12fdd9495c53177ade51c3dee7ba2 Mon Sep 17 00:00:00 2001 > > From: Matthieu Bouron <matthieu.bou...@gmail.com> > > Date: Wed, 29 Mar 2017 14:58:01 +0200 > > Subject: [PATCH] doc/examples/filtering_video: switch to new decoding API > > > > --- > > doc/examples/filtering_video.c | 46 > > +++++++++++++++++++++++++----------------- > > 1 file changed, 27 insertions(+), 19 deletions(-) > > > > diff --git a/doc/examples/filtering_video.c b/doc/examples/filtering_video.c > > index 15116d3881..4d973024f1 100644 > > --- a/doc/examples/filtering_video.c > > +++ b/doc/examples/filtering_video.c > > @@ -213,7 +213,6 @@ int main(int argc, char **argv) > > AVPacket packet; > > AVFrame *frame = av_frame_alloc(); > > AVFrame *filt_frame = av_frame_alloc(); > > - int got_frame; > > > > if (!frame || !filt_frame) { > > perror("Could not allocate frame"); > > @@ -238,33 +237,42 @@ int main(int argc, char **argv) > > break; > > > > if (packet.stream_index == video_stream_index) { > > - got_frame = 0; > > - ret = avcodec_decode_video2(dec_ctx, frame, &got_frame, > > &packet); > > + ret = avcodec_send_packet(dec_ctx, &packet); > > I assume the "flush" packet makes it to this code as well... > > > if (ret < 0) { > > - av_log(NULL, AV_LOG_ERROR, "Error decoding video\n"); > > + av_log(NULL, AV_LOG_ERROR, "Error while sending a packet > > to the decoder\n"); > > break; > > } > > > > - if (got_frame) { > > - frame->pts = av_frame_get_best_effort_timestamp(frame); > > - > > - /* push the decoded frame into the filtergraph */ > > - if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, > > AV_BUFFERSRC_FLAG_KEEP_REF) < 0) { > > - av_log(NULL, AV_LOG_ERROR, "Error while feeding the > > filtergraph\n"); > > + while (ret >= 0) { > > + ret = avcodec_receive_frame(dec_ctx, frame); > > + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { > > break; > > On EOF this assumes the demuxer takes care of it, and if the demuxer is > unexpectedly not EOF, the send call will error. So LGTM. > > > + } else if (ret < 0) { > > + av_log(NULL, AV_LOG_ERROR, "Error while receiving a > > frame from the decoder\n"); > > + goto end; > > } > > > > - /* pull filtered frames from the filtergraph */ > > - while (1) { > > - ret = av_buffersink_get_frame(buffersink_ctx, > > filt_frame); > > - if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) > > + if (ret >= 0) { > > + frame->pts = av_frame_get_best_effort_timestamp(frame); > > + > > + /* push the decoded frame into the filtergraph */ > > + if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, > > AV_BUFFERSRC_FLAG_KEEP_REF) < 0) { > > + av_log(NULL, AV_LOG_ERROR, "Error while feeding > > the filtergraph\n"); > > break; > > - if (ret < 0) > > - goto end; > > - display_frame(filt_frame, > > buffersink_ctx->inputs[0]->time_base); > > - av_frame_unref(filt_frame); > > + } > > + > > + /* pull filtered frames from the filtergraph */ > > + while (1) { > > + ret = av_buffersink_get_frame(buffersink_ctx, > > filt_frame); > > + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) > > + break; > > + if (ret < 0) > > + goto end; > > + display_frame(filt_frame, > > buffersink_ctx->inputs[0]->time_base); > > + av_frame_unref(filt_frame); > > + } > > + av_frame_unref(frame); > > } > > - av_frame_unref(frame); > > } > > } > > av_packet_unref(&packet); > > LGTM.
Patch applied. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel