[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