[FFmpeg-devel] [PATCH] qsv: fix the dangerous macro definitions

Carl Eugen Hoyos ceffmpeg at gmail.com
Thu Mar 28 12:54:58 EET 2019


2019-03-28 10:09 GMT+01:00, Li, Zhong <zhong.li at intel.com>:
>> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On Behalf
>> Of Mark Thompson
>> Sent: Thursday, March 28, 2019 6:23 AM
>> To: ffmpeg-devel at ffmpeg.org
>> Subject: Re: [FFmpeg-devel] [PATCH] qsv: fix the dangerous macro
>> definitions
>>
>> On 27/03/2019 10:24, Zhong Li wrote:
>> > Signed-off-by: Zhong Li <zhong.li at intel.com>
>> > ---
>> >  libavcodec/qsv_internal.h | 8 ++++----
>> >  libavfilter/qsvvpp.h      | 8 ++++----
>> >  2 files changed, 8 insertions(+), 8 deletions(-)
>> >
>> > diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h
>> > index 394c558883..86a5dbad98 100644
>> > --- a/libavcodec/qsv_internal.h
>> > +++ b/libavcodec/qsv_internal.h
>> > @@ -35,12 +35,12 @@
>> >  #define QSV_MAX_ENC_PAYLOAD 2       // # of mfxEncodeCtrl
>> payloads supported
>> >
>> >  #define QSV_VERSION_ATLEAST(MAJOR, MINOR)   \
>> > -    (MFX_VERSION_MAJOR > (MAJOR) ||         \
>> > -     MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >=
>> (MINOR))
>> > +    ((MFX_VERSION_MAJOR > (MAJOR) ||         \
>> > +     MFX_VERSION_MAJOR == (MAJOR) && MFX_VERSION_MINOR >=
>> (MINOR)))
>>
>> I don't understand why this makes a difference?
>>
>> Removing the whitespace, I see:
>>
>> -  (MFX_VERSION_MAJOR > (MAJOR) || MFX_VERSION_MAJOR == (MAJOR)
>> && MFX_VERSION_MINOR >= (MINOR))
>> + ((MFX_VERSION_MAJOR > (MAJOR) || MFX_VERSION_MAJOR == (MAJOR)
>> &&
>> + MFX_VERSION_MINOR >= (MINOR)))
>>
>> which looks like you've just added redundant parentheses around the whole
>> thing which already had them?
>>
>> (Alternative question: what case is this trying to fix?
>
> It is to fix the dangerous case of QSV_RUNTIME_VERSION_ATLEAST.

> It is introducing a big issue, e:g
> if ((avctx->codec_id != AV_CODEC_ID_HEVC) ||
> QSV_RUNTIME_VERSION_ATLEAST(q->ver, 1, 28))
> it is equal to:
> (avctx->codec_id != AV_CODEC_ID_HEVC) || (MFX_VERSION.Major > (MAJOR)) ||
> (MFX_VERSION.Major == (MAJOR) && MFX_VERSION.Minor >= (MINOR))

No, they are not equal, you added the second ")" after
MAJOR.

Carl Eugen


More information about the ffmpeg-devel mailing list