[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