[FFmpeg-devel] [PATCH v4 10/10] configure: add --enable-libvpl option

James Almer jamrial at gmail.com
Tue Sep 28 23:17:42 EEST 2021


On 9/23/2021 3:28 AM, Haihao Xiang wrote:
> This allows user to build FFmpeg against Intel oneVPL. oneVPL 2.2
> is the required minimum version when building Intel oneVPL code.
> 
> It will fail to run configure script if both libmfx and libvpl are
> enabled.
> 
> It is recommended to use oneVPL for new work, even for currently available
> hardwares [1]
> 
> [1] https://software.intel.com/content/www/us/en/develop/articles/upgrading-from-msdk-to-onevpl.html
> ---
>   configure | 26 ++++++++++++++++++++------
>   1 file changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/configure b/configure
> index 9655a5823e..e9d2564819 100755
> --- a/configure
> +++ b/configure
> @@ -337,6 +337,7 @@ External library support:
>     --disable-ffnvcodec      disable dynamically linked Nvidia code [autodetect]
>     --enable-libdrm          enable DRM code (Linux) [no]
>     --enable-libmfx          enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
> +  --enable-libvpl          enable Intel oneVPL code via libvpl if libmfx is not used [no]
>     --enable-libnpp          enable Nvidia Performance Primitives-based code [no]
>     --enable-mmal            enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
>     --disable-nvdec          disable Nvidia video decoding acceleration (via hwaccel) [autodetect]
> @@ -1895,6 +1896,7 @@ HWACCEL_LIBRARY_NONFREE_LIST="
>   HWACCEL_LIBRARY_LIST="
>       $HWACCEL_LIBRARY_NONFREE_LIST
>       libmfx
> +    libvpl
>       mmal
>       omx
>       opencl
> @@ -6428,22 +6430,34 @@ enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -li
>   enabled libklvanc         && require libklvanc libklvanc/vanc.h klvanc_context_create -lklvanc
>   enabled libkvazaar        && require_pkg_config libkvazaar "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
>   enabled liblensfun        && require_pkg_config liblensfun lensfun lensfun.h lf_db_new
> +
> +if enabled libmfx && enabled libvpl; then
> +   die "ERROR: can not use libmfx and libvpl together"
>   # While it may appear that require is being used as a pkg-config
>   # fallback for libmfx, it is actually being used to detect a different
>   # installation route altogether.  If libmfx is installed via the Intel
>   # Media SDK or Intel Media Server Studio, these don't come with
>   # pkg-config support.  Instead, users should make sure that the build
>   # can find the libraries and headers through other means.
> -
> -enabled libmfx            && { { check_pkg_config libmfx "libmfx < 2.0" "mfxvideo.h" MFXInit ||
> +elif enabled libmfx; then

Instead of elif, maybe just do

if enabled libmfx && enabled libvpl; then
    die()
if enabled libmfx; then
    checks
if enabled enabled libvpl; then
    checks

> +    { check_pkg_config libmfx "libmfx < 2.0" "mfxvideo.h" MFXInit || \

Is this backslash needed?

>   # Some old versions of libmfx have the following settings in libmfx.pc:
>   #   includedir=/usr/include
>   #   Cflags: -I${includedir}
>   # So add -I${includedir}/mfx to CFLAGS
> -                                 { check_pkg_config libmfx "libmfx < 2.0" "mfx/mfxvideo.h" MFXInit && add_cflags -I$($pkg_config --variable=includedir libmfx)/mfx; } ||
> -                                 { require "libmfx < 2.0" "mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } } &&
> -                               warn "build FFmpeg against libmfx 1.x, obsolete features of libmfx such as OPAQUE memory,\n"\
> -                                    "multi-frame encode, user plugins and LA_EXT rate control mode are enabled"; }
> +      { check_pkg_config libmfx "libmfx < 2.0" "mfx/mfxvideo.h" MFXInit && add_cflags -I$($pkg_config --variable=includedir libmfx)/mfx; } ||
> +      { require "libmfx < 2.0" "mfxvideo.h" MFXInit "-llibmfx $advapi32_extralibs" && warn "using libmfx without pkg-config"; } } &&
> +    warn "build FFmpeg against libmfx 1.x, obsolete features of libmfx such as OPAQUE memory,\n"\
> +         "multi-frame encode, user plugins and LA_EXT rate control mode are enabled"
> +elif enabled libvpl; then
> +# Consider pkg-config only. The name of libmfx is still used in the following check for --enable-libvpl option
> +# because QSV has dependency on libmfx, we can use the same dependency if using libmfx in this check.
> +    check_pkg_config libmfx "vpl >= 2.2" "mfxvideo.h mfxdispatcher.h" MFXLoad && \
> +        warn "build FFmpeg against oneVPL 2.2+, OPAQUE memory, multi-frame encode, user plugins\n"\
> +             "and LA_EXT rate control mode in FFmpeg QSV won't be supported." ||
> +            die "ERROR: libvpl >= 2.2 not found"

If you're going to error, then use require_pkg_config().

> +fi
> +
>   if enabled libmfx; then
>      check_cc MFX_CODEC_VP9 "mfxdefs.h mfxstructures.h" "MFX_CODEC_VP9"

Since this is not going to be used with libvpl, you could merge it into 
the libmfx check above.

>   fi
> 



More information about the ffmpeg-devel mailing list