[FFmpeg-devel] [PATCH 2/4] ffmpeg: simplify video frame polling.

Stefano Sabatini stefasab at gmail.com
Thu Feb 9 00:33:55 CET 2012


On date Tuesday 2012-02-07 12:04:04 +0100, Clément Bœsch encoded:
> From: Clément Bœsch <clement.boesch at smartjog.com>
> 
> input_video_filter and output_video_filter can't be NULL at this point.
> If they are, the current code would likely crash anyway (since
> filtered_frame would be NULL and sent to do_video_out().
> ---
>  ffmpeg.c |   11 +----------
>  1 files changed, 1 insertions(+), 10 deletions(-)
> 
> diff --git a/ffmpeg.c b/ffmpeg.c
> index 74468a7..bd78c2e 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -2048,9 +2048,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int
>      void *buffer_to_free = NULL;
>      int i, ret = 0;
>      float quality = 0;
> -#if CONFIG_AVFILTER
> -    int frame_available = 1;
> -#endif
>      int duration=0;
>      int64_t *best_effort_timestamp;
>      AVRational *frame_sample_aspect;
> @@ -2140,11 +2137,7 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int
>              continue;
>  
>  #if CONFIG_AVFILTER
> -        if (ost->input_video_filter) {
> -            frame_available = av_buffersink_poll_frame(ost->output_video_filter);
> -        }
> -        while (frame_available) {
> -            if (ost->output_video_filter) {
> +        while (av_buffersink_poll_frame(ost->output_video_filter)) {
>                  AVRational ist_pts_tb = ost->output_video_filter->inputs[0]->time_base;
>                  if (av_buffersink_get_buffer_ref(ost->output_video_filter, &ost->picref, 0) < 0){
>                      av_log(0, AV_LOG_WARNING, "AV Filter told us it has a frame available but failed to output one\n");
> @@ -2161,7 +2154,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int
>                      avfilter_fill_frame_from_video_buffer_ref(filtered_frame, ost->picref);
>                      ist->pts = av_rescale_q(ost->picref->pts, ist_pts_tb, AV_TIME_BASE_Q);
>                  }
> -            }
>              if (ost->picref->video && !ost->frame_aspect_ratio)
>                  ost->st->codec->sample_aspect_ratio = ost->picref->video->sample_aspect_ratio;
>  #else
> @@ -2174,7 +2166,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int
>                  do_video_stats(output_files[ost->file_index].ctx, ost, frame_size);
>  #if CONFIG_AVFILTER
>              cont:
> -            frame_available = ost->output_video_filter && av_buffersink_poll_frame(ost->output_video_filter);
>              avfilter_unref_buffer(ost->picref);
>          }
>  #endif

Should be safe, nice simplification, thanks.
-- 
FFmpeg = Friendly and Faithless Magical Powered Enigmatic Gymnast


More information about the ffmpeg-devel mailing list