[FFmpeg-devel] [PATCH v2] avcodec/hevc_ps: fix the problem of memcmp losing effectiveness

James Almer jamrial at gmail.com
Fri Mar 29 17:18:09 EET 2024


On 3/29/2024 12:13 PM, tong1.wu-at-intel.com at ffmpeg.org wrote:
> From: Tong Wu <tong1.wu at intel.com>
> 
> HEVCHdrParams* receives a pointer which points to a dynamically
> allocated memory block. It causes the memcmp always returning 1.
> Add a function to do the comparision. A condition is also added to
> avoid malloc(0).
> 
> Signed-off-by: Tong Wu <tong1.wu at intel.com>
> ---
>   libavcodec/hevc_ps.c | 22 ++++++++++++++++++----
>   libavcodec/hevc_ps.h |  4 +++-
>   2 files changed, 21 insertions(+), 5 deletions(-)
> 
> diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
> index cbef3ef4cd..d3c589ec24 100644
> --- a/libavcodec/hevc_ps.c
> +++ b/libavcodec/hevc_ps.c
> @@ -449,6 +449,18 @@ static void uninit_vps(FFRefStructOpaque opaque, void *obj)
>       av_freep(&vps->hdr);
>   }
>   
> +static int compare_vps(const HEVCVPS *vps1, const HEVCVPS *vps2)
> +{
> +    if (!vps1->hdr && !vps2->hdr && !memcmp(vps1, vps2, offsetof(HEVCVPS, hdr)))
> +        return 1;
> +
> +    if (vps1->hdr && vps2->hdr && !memcmp(vps1, vps2, offsetof(HEVCVPS, hdr)) &&
> +        !memcmp(vps1->hdr, vps2->hdr, vps1->vps_num_hrd_parameters * sizeof(*vps1->hdr)))
> +        return 1;
> +
> +    return 0;
> +}

Something like this should be simpler

> +static int compare_vps(const HEVCVPS *vps1, const HEVCVPS *vps2)
> +{
> +    if (!memcmp(vps1, vps2, offsetof(HEVCVPS, hdr)))
> +        return !vps1->vps_num_hrd_parameters ||
> +               !memcmp(vps1->hdr, vps2->hdr, vps1->vps_num_hrd_parameters * sizeof(*vps1->hdr));
> +
> +    return 0;
> +}

If vps1 is equal to vps2 up to hdr, then vps_num_hrd_parameters will be 
the same in both and you can safely just go ahead with the memcmp for hdr.


More information about the ffmpeg-devel mailing list