[FFmpeg-devel] [PATCH] avcodec/encode: Avoid check whose result is known in advance

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Jul 1 01:39:22 EEST 2022


Andreas Rheinhardt:
> encode_send_frame_internal() is always only called if
> the buffer packet is empty and except when we are dealing
> with an audio codec that does not allow variable frame size
> it stays that way until a call to av_frame_ref() at the end
> of encode_send_frame_internal(). In case we are dealing
> with the small last frame of an audio encoder requiring
> constant frame size the frame will be allocated by pad_last_frame()
> and this the only case where this is so. So by returning directly
> after pad_last_frame(), we can avoid having to recheck
> whether the frame is still empty before av_frame_ref().
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
>  libavcodec/encode.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/libavcodec/encode.c b/libavcodec/encode.c
> index b68bf1e184..1f39ab1a2f 100644
> --- a/libavcodec/encode.c
> +++ b/libavcodec/encode.c
> @@ -339,6 +339,7 @@ static int encode_send_frame_internal(AVCodecContext *avctx, const AVFrame *src)
>                      return ret;
>  
>                  avctx->internal->last_audio_frame = 1;
> +                return 0;
>              } else if (src->nb_samples > avctx->frame_size) {
>                  av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d)\n", src->nb_samples, avctx->frame_size);
>                  return AVERROR(EINVAL);
> @@ -346,11 +347,9 @@ static int encode_send_frame_internal(AVCodecContext *avctx, const AVFrame *src)
>          }
>      }
>  
> -    if (!dst->data[0]) {
> -        ret = av_frame_ref(dst, src);
> -        if (ret < 0)
> -             return ret;
> -    }
> +    ret = av_frame_ref(dst, src);
> +    if (ret < 0)
> +        return ret;
>  
>      return 0;
>  }

Will apply tomorrow unless there are objections.

- Andreas


More information about the ffmpeg-devel mailing list