[FFmpeg-devel] [PoC][PATCH 2/2] avutil/video_enc_params: make use of the complex AVBufferRef allocator

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Mon Jun 1 20:17:50 EEST 2020


James Almer:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> As mentioned in Patch 1/2, this is an example for the complex structure
> handling in AVBufferRef.
> It doesn't need to be applied, even if it could (Despite being public, it's new
> enough that we can change it if we do it now).
> 
>  libavutil/video_enc_params.c | 37 ++++++++++++++++++--
>  libavutil/video_enc_params.h | 67 ++++++++++++++++++------------------
>  2 files changed, 68 insertions(+), 36 deletions(-)
> 
> diff --git a/libavutil/video_enc_params.c b/libavutil/video_enc_params.c
> index c46c0f1dc6..9e64ad4d59 100644
> --- a/libavutil/video_enc_params.c
> +++ b/libavutil/video_enc_params.c
> @@ -32,6 +32,9 @@ AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type,
>      AVVideoEncParams *par;
>      size_t size;
>  
> +    // Ensure blocks is the last field in the struct
> +    av_assert0(offsetof(AVVideoEncParams, blocks) == sizeof(*par) - sizeof(AVVideoBlockParams*));
> +
This check only works if blocks is the last field in the struct and if
there is no padding after blocks (e.g. if AVVideoEncParams contained any
[u]int64_t, then one could run into this assert even when blocks were
the last element (namely when one is on a 32bit system)).

- Andreas


More information about the ffmpeg-devel mailing list