[FFmpeg-devel] [PATCH 2/5] tests/api-flac-test: ensure the frame is writable before writing to it

James Almer jamrial at gmail.com
Wed Feb 24 16:01:03 EET 2021


On 2/24/2021 7:03 AM, Anton Khirnov wrote:
> The encoder may keep a reference to frames that were sent to it, so the
> caller cannot modify them without checking first.
> ---
>   tests/api/api-flac-test.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/tests/api/api-flac-test.c b/tests/api/api-flac-test.c
> index 3fea3258f3..7c96a4d99e 100644
> --- a/tests/api/api-flac-test.c
> +++ b/tests/api/api-flac-test.c
> @@ -154,6 +154,10 @@ static int run_test(AVCodec *enc, AVCodec *dec, AVCodecContext *enc_ctx,
>           enc_pkt.data = NULL;
>           enc_pkt.size = 0;
>   
> +        result = av_frame_make_writable(in_frame);

This is going to make a copy of the existing frame data, only for the 
code below to completely replace it. It will also make copies (not 
references) of side data, if any.
Maybe instead unref it, set nb_samples, format and channel_layout again, 
then call av_frame_get_buffer() (Factoring the existing relevant code 
into its own function).

LGTM either way.

> +        if (result < 0)
> +            return result;
> +
>           generate_raw_frame((uint16_t*)(in_frame->data[0]), i, enc_ctx->sample_rate,
>                              enc_ctx->channels, enc_ctx->frame_size);
>           in_frame_bytes = in_frame->nb_samples * in_frame->channels * sizeof(uint16_t);
> 



More information about the ffmpeg-devel mailing list