[FFmpeg-devel] [PATCH v2 1/2] qsv: needn't load user plugin since libmfx 1.28

Xiang, Haihao haihao.xiang at intel.com
Mon Aug 24 09:15:02 EEST 2020


On Fri, 2020-08-21 at 20:11 +0000, Soft Works wrote:
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> > Soft Works
> > Sent: Friday, August 21, 2020 9:45 AM
> > To: FFmpeg development discussions and patches <ffmpeg-
> > devel at ffmpeg.org>
> > Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] qsv: needn't load user plugin
> > since libmfx 1.28
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> > > Xiang, Haihao
> > > Sent: Friday, August 21, 2020 9:29 AM
> > > To: ffmpeg-devel at ffmpeg.org
> > > Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] qsv: needn't load user
> > > plugin since libmfx 1.28
> > > 
> > > On Fri, 2020-08-21 at 05:48 +0000, Soft Works wrote:
> > > > > -----Original Message-----
> > > > > From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf
> > 
> > Of
> > > > > Haihao Xiang
> > > > > Sent: Friday, August 21, 2020 7:23 AM
> > > > > To: ffmpeg-devel at ffmpeg.org
> > > > > Cc: Haihao Xiang <haihao.xiang at intel.com>
> > > > > Subject: [FFmpeg-devel] [PATCH v2 1/2] qsv: needn't load user
> > > > > plugin since libmfx 1.28
> > > > > 
> > > > > MFXVideoUSER_Load call is redundant since libmfx 1.28
> > > > > ---
> > > > > Fixed merge conflict when applying this patch by 'git am'
> > > > > 
> > > > >  libavcodec/qsv.c | 9 ++++++++-
> > > > >  1 file changed, 8 insertions(+), 1 deletion(-)
> > > > > 
> > > > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index
> > > > > 17720070f1..56a30ad642 100644
> > > > > --- a/libavcodec/qsv.c
> > > > > +++ b/libavcodec/qsv.c
> > > > > @@ -19,7 +19,6 @@
> > > > >   */
> > > > > 
> > > > >  #include <mfx/mfxvideo.h>
> > > > > -#include <mfx/mfxplugin.h>
> > > > >  #include <mfx/mfxjpeg.h>
> > > > > 
> > > > >  #include <stdio.h>
> > > > > @@ -36,6 +35,10 @@
> > > > >  #include "avcodec.h"
> > > > >  #include "qsv_internal.h"
> > > > > 
> > > > > +#if !QSV_VERSION_ATLEAST(1, 28)
> > > > > +#include <mfx/mfxplugin.h>
> > > > > +#endif
> > > > > +
> > > > >  #if QSV_VERSION_ATLEAST(1, 12)
> > > > >  #include "mfx/mfxvp8.h"
> > > > >  #endif
> > > > > @@ -295,6 +298,9 @@ enum AVPictureType ff_qsv_map_pictype(int
> > > > > mfx_pic_type)  static int qsv_load_plugins(mfxSession session,
> > > > > const char *load_plugins,
> > > > >                              void *logctx)  {
> > > > > +#if QSV_VERSION_ATLEAST(1, 28)
> > > > > +    return 0;
> > > > > +#else
> > > > >      if (!load_plugins || !*load_plugins)
> > > > >          return 0;
> > > > > 
> > > > > @@ -340,6 +346,7 @@ load_plugin_fail:
> > > > >      }
> > > > > 
> > > > >      return 0;
> > > > > +#endif
> > > > > 
> > > > >  }
> > > > 
> > > > 
> > > > Hi,
> > > > 
> > > > Are you sure this check is right? You are checking the libmfx
> > > > version against which ffmpeg is compiled.
> > > > 
> > > > What happens, when a graphics driver supports only API level 1.21?
> > > > 
> > > 
> > > I understand your concern, however lots of features in FFmpeg are
> > > disabled/enabled against api version at compile-time.
> > 
> > That is in no way an argument to break compatibility with downlevel drivers
> > without any need. Things are working fine without that patch for all API
> > versions.
> > 
> > If you really want to avoid the plugin-load, then you should check the
> > driver's
> > API level at runtime.
> 
> Haihao,
> 
> let me add a few more points to this subject:
> 
> - Backwards-Compatibility is a key feature of the Intel Media SDK
>   Your colleagues which are doing the MSDK development are continuously
>   taking care to make that possible
> 
> - When you look at the latest release notes (MSDK 2020 R1, API 1.32), 
>   you can see that 3rd, 4th and 5th gen CPUs are still supported
>   The latest 3rd gen drivers are API level 1.11 
>   The latest 4th and 5th gen drivers are API level 1.20
>   Also later CPUs do not always have the latest drivers (> 1.28) installed
> 
> - Even with libmfx 1.32, it is still possible to use those CPUs or older
>   driver versions, and   that applies to ffmpeg as well, when it's compiled 
>   against libmfx 1.32
> 
> - Your change would only be legitimate if there would have been a change 
>   In the dispatcher code since API 1.28 that would automatically handle the
>   Plugin loading for drivers < 1.28.
>   But I have just gone through the recent changes to the dispatcher code
>   And there doesn't exist such functionality.
> 
> - For those reasons, your commit is not acceptable as it would break
>   HEVC encoding for all 3,4,5 gen CPUs and later CPUs with downlevel
>   Drivers
> 
> What remains is the question whether there's any benefit at all in 
> Avoiding the plugin load call. 
> 
> Does it cost time in cases when it would not be needed (driver level >= 1.28)?
> 
> - If yes, then the driver API level can be checked at runtime to avoid the
>   Plugin load.
> - Otherwise, I can't imagine any reason to make any change at all
> 
> What are yours?

Hi softworkz,

Thanks for your comment.

- I definitely agree with you that it is important to keep backwards
compatibility. 

- I am aware that using QSV_VERSION_ATLEAST at compile time might break
backwards compatibility, but considering QSV_VERSION_ATLEAST has been used
widely at compile time, I used it in this patch too.

- Considering that the plugins are redundant now, it is possible to deprecate or
remove these plugins in the future. I am fine not to accept this patch
presently, and will pick it back once MFXVideoUSER_Load is deprecated or removed
from the SDK in the future

Thanks
Haihao

> 
> Kind regards,
> softworkz
> 
> 
> 
> 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list