git: 7ef46d5789cc - main - multimedia/libvpl: New port: Intel Video Processing Library API, dispatcher, and examples

Hiroki Tagato <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.ports
Message-ID <[email protected]>
The branch main has been updated by tagattie:

URL: https://cgit.FreeBSD.org/ports/commit/?id=7ef46d5789cc705b46264bf959e4375619a1011a

commit 7ef46d5789cc705b46264bf959e4375619a1011a
Author:     Yuichiro NAITO <[email protected]>
AuthorDate: 2026-08-17 01:38:32 +0000
Commit:     Hiroki Tagato <[email protected]>
CommitDate: 2026-08-17 01:57:40 +0000

    multimedia/libvpl: New port: Intel Video Processing Library API, dispatcher, and examples
    
    Intel Video Processing Library (Intel VPL) provides access to hardware
    accelerated video decode, encode, and processing capabilities on Intel GPUs
    to support AI visual inference, media delivery, cloud gaming, and virtual
    desktop infrastructure use cases.
    
    This repository contains the following components:
    
    - Copies of the Intel VPL API header files.
      The version of the API is listed in the mfxdefs.h file.
    - Intel VPL Dispatcher
    - Examples demonstrating API usage
    
    *** IMPORTANT ***
    
    Intel VPL Tools are no longer in this repository. They have all been
    moved to libvpl-tools.
    
    WWW: https://www.intel.com/content/www/us/en/developer/tools/vpl/overview.html
    
    PR:             293561
    Reported by:    Yuichiro NAITO <[email protected]> (new maintainer)
---
 multimedia/Makefile                                |   1 +
 multimedia/libvpl/Makefile                         |  36 ++++++
 multimedia/libvpl/distinfo                         |   3 +
 multimedia/libvpl/files/patch-api_vpl_mfxdefs.h    |  20 ++++
 .../libvpl/files/patch-libvpl_CMakeLists.txt       |  11 ++
 .../files/patch-libvpl_src_linux_device__ids.h     |  73 ++++++++++++
 .../files/patch-libvpl_src_mfx__dispatcher__vpl.h  |  11 ++
 ...tch-libvpl_src_mfx__dispatcher__vpl__loader.cpp |  27 +++++
 ...libvpl_src_mfx__dispatcher__vpl__lowlatency.cpp |  30 +++++
 ...patch-libvpl_src_mfx__dispatcher__vpl__msdk.cpp | 131 +++++++++++++++++++++
 .../patch-libvpl_test_runtimes_stub_src_config.h   |  11 ++
 ...ibvpl_test_unit_src_dispatcher__enum__impls.cpp |  11 ++
 multimedia/libvpl/pkg-descr                        |  16 +++
 multimedia/libvpl/pkg-plist                        | 113 ++++++++++++++++++
 14 files changed, 494 insertions(+)

diff --git a/multimedia/Makefile b/multimedia/Makefile
index 0f1efed27ab9..1646fd0dda9f 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -193,6 +193,7 @@
     SUBDIR += libvdpau
     SUBDIR += libvdpau-va-gl
     SUBDIR += libvlcpp
+    SUBDIR += libvpl
     SUBDIR += libvpx
     SUBDIR += libwebm
     SUBDIR += libx264
diff --git a/multimedia/libvpl/Makefile b/multimedia/libvpl/Makefile
new file mode 100644
index 000000000000..aebdebeb2595
--- /dev/null
+++ b/multimedia/libvpl/Makefile
@@ -0,0 +1,36 @@
+PORTNAME=	libvpl
+DISTVERSIONPREFIX=	v
+DISTVERSION=	2.17.0
+CATEGORIES=	multimedia
+
+MAINTAINER=	[email protected]
+COMMENT=	Intel Video Processing Library API, dispatcher, and examples
+WWW=		https://www.intel.com/content/www/us/en/developer/tools/vpl/overview.html
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+ONLY_FOR_ARCHS=	amd64
+ONLY_FOR_ARCHS_REASON=	only Intel GPUs on x86 are supported
+
+USES=		cmake:testing compiler:c++14-lang localbase:ldflags pkgconfig pathfix
+PATHFIX_CMAKELISTSTXT=CMakeLists.txt InstallDirs.cmake
+USE_CXXSTD=	c++14
+USE_GITHUB=	yes
+GH_ACCOUNT=	intel
+USE_LDCONFIG=	yes
+
+CMAKE_TESTING_ON=	BUILD_TESTS
+CONFLICTS_INSTALL=	onevpl
+DATADIR=	${PREFIX}/share/vpl
+
+post-patch:
+	@${REINPLACE_CMD} -e 's,%%PREFIX%%,${PREFIX},' \
+		${WRKSRC}/libvpl/src/mfx_dispatcher_vpl_loader.cpp
+	@${REINPLACE_CMD} -e 's,%%PREFIX%%,${PREFIX},' \
+		${WRKSRC}/libvpl/src/mfx_dispatcher_vpl_lowlatency.cpp
+
+post-install:
+	@${FIND} ${STAGEDIR} -name \*.orig -delete
+
+.include <bsd.port.mk>
diff --git a/multimedia/libvpl/distinfo b/multimedia/libvpl/distinfo
new file mode 100644
index 000000000000..d6e867916a65
--- /dev/null
+++ b/multimedia/libvpl/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1784249375
+SHA256 (intel-libvpl-v2.17.0_GH0.tar.gz) = 4de3e2faf1e8307fb282e4a43f443191810f6a6b0a484fffa7995ba1c814c6ec
+SIZE (intel-libvpl-v2.17.0_GH0.tar.gz) = 12974961
diff --git a/multimedia/libvpl/files/patch-api_vpl_mfxdefs.h b/multimedia/libvpl/files/patch-api_vpl_mfxdefs.h
new file mode 100644
index 000000000000..865635bd0dc3
--- /dev/null
+++ b/multimedia/libvpl/files/patch-api_vpl_mfxdefs.h
@@ -0,0 +1,20 @@
+--- api/vpl/mfxdefs.h.orig	2025-04-18 15:44:33 UTC
++++ api/vpl/mfxdefs.h
+@@ -64,7 +64,7 @@ extern "C"
+     #define MFX_PACK_BEGIN_STRUCT_W_PTR()    MFX_PACK_BEGIN_X(8)
+     #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8)
+ /* 32-bit ILP32 data model Windows* (Intel(r) architecture) */
+-#elif defined(_WIN32) || defined(_M_IX86) && !defined(__linux__)
++#elif defined(_WIN32) || defined(_M_IX86) && !defined(__unix__)
+     #define MFX_PACK_BEGIN_STRUCT_W_PTR()    MFX_PACK_BEGIN_X(4)
+     #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8)
+ /* 32-bit ILP32 data model Linux* */
+@@ -99,7 +99,7 @@ extern "C"
+        #define MFX_DEPRECATED __declspec(deprecated)
+        #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg
+        #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) __pragma(deprecated(arg))
+-     #elif defined(__linux__)
++     #elif defined(__unix__)
+        #define MFX_DEPRECATED __attribute__((deprecated))
+        #if defined(__cplusplus)
+          #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated))
diff --git a/multimedia/libvpl/files/patch-libvpl_CMakeLists.txt b/multimedia/libvpl/files/patch-libvpl_CMakeLists.txt
new file mode 100644
index 000000000000..58cce5533153
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- libvpl/CMakeLists.txt.orig	2025-12-17 23:04:39 UTC
++++ libvpl/CMakeLists.txt
+@@ -190,7 +190,7 @@ if(INSTALL_DEV)
+     # WIN32 in general
+     set(MINGW_LIBS "-lole32 -lgdi32 -luuid")
+   endif()
+-  set(VPL_PKGCONFIG_DEPENDENT_LIBS
++  set(VPL_PKGCONFIG_PRIVATE_LIBS
+       "${DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${MINGW_LIBS} ${CXX_LIB}")
+   configure_file("pkgconfig/vpl.pc.in" "pkgconfig/vpl.pc" @ONLY)
+   install(
diff --git a/multimedia/libvpl/files/patch-libvpl_src_linux_device__ids.h b/multimedia/libvpl/files/patch-libvpl_src_linux_device__ids.h
new file mode 100644
index 000000000000..f1e76440dcd2
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_src_linux_device__ids.h
@@ -0,0 +1,73 @@
+--- libvpl/src/linux/device_ids.h.orig	2025-04-18 15:44:33 UTC
++++ libvpl/src/linux/device_ids.h
+@@ -380,7 +380,62 @@ static inline eMFXHWType get_platform(unsigned int dev
+     return MFX_HW_UNKNOWN;
+ }
+ 
++#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
++#if defined(__FreeBSD__) && __FreeBSD__ < 13
++#include <sys/sysctl.h>
++#else
++#include <sys/ioctl.h>
++#include <fcntl.h>
++#include <unistd.h>
++#endif // defined(__FreeBSD__) && __FreeBSD__ < 13
++
++struct drm_pciinfo {
++	uint16_t        domain;
++	uint8_t         bus;
++	uint8_t         dev;
++	uint8_t         func;
++	uint16_t        vendor_id;
++	uint16_t        device_id;
++	uint16_t        subvendor_id;
++	uint16_t        subdevice_id;
++	uint8_t         revision_id;
++};
++
++#define DRM_IOCTL_BASE         'd'
++#define DRM_IOR(nr,type)       _IOR(DRM_IOCTL_BASE,nr,type)
++#define DRM_IOCTL_GET_PCIINFO  DRM_IOR(0x15, struct drm_pciinfo)
++#endif
++
+ static mfxStatus get_devices(std::vector<Device> &allDevices) {
++#ifdef DRM_IOCTL_GET_PCIINFO
++    std::vector <Device> result;
++    for (int i = 0; i < 64; ++i) {
++#if defined(__FreeBSD__) && __FreeBSD__ < 13
++	std::string mib = "dev.drm." + std::to_string(128 + i) + ".PCI_ID";
++	char pci_id[20];
++	size_t len = sizeof(pci_id);
++	if (sysctlbyname(mib.c_str(), pci_id, &len, NULL, 0)) continue;
++	Device device;
++	sscanf(pci_id, "%x:%x", &device.vendor_id, &device.device_id);
++#else
++	std::string path = "/dev/dri/renderD" + std::to_string(128 + i);
++	int fd = open(path.c_str(), O_RDONLY);
++	if (fd == -1) continue;
++	struct drm_pciinfo pinfo;
++	if (ioctl(fd, DRM_IOCTL_GET_PCIINFO, &pinfo)) {
++	    close(fd);
++	    continue;
++	}
++	Device device = { .vendor_id = pinfo.vendor_id, .device_id = pinfo.device_id };
++	close(fd);
++#endif // defined(__FreeBSD__) && __FreeBSD__ < 13
++	if (device.vendor_id != 0x8086) {  // Filter out non-Intel devices
++	    continue;
++	}
++	device.platform = get_platform(device.device_id);
++	allDevices.emplace_back(device);
++    }
++#else
+     const char *dir            = "/sys/class/drm";
+     const char *device_id_file = "/device/device";
+     const char *vendor_id_file = "/device/vendor";
+@@ -433,6 +488,7 @@ static mfxStatus get_devices(std::vector<Device> &allD
+ 
+         allDevices.emplace_back(device);
+     }
++#endif
+ 
+     // sort by platform, unknown will appear at beginning
+     std::sort(allDevices.begin(), allDevices.end(), [](const Device &a, const Device &b) {
diff --git a/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl.h b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl.h
new file mode 100644
index 000000000000..698008e0d31c
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl.h
@@ -0,0 +1,11 @@
+--- libvpl/src/mfx_dispatcher_vpl.h.orig	2025-04-18 15:44:33 UTC
++++ libvpl/src/mfx_dispatcher_vpl.h
+@@ -48,7 +48,7 @@ typedef char CHAR_TYPE;
+         #define MSDK_LIB_NAME L"libmfxhw64."
+     #endif
+     #define ONEVPL_PRIORITY_PATH_VAR L"ONEVPL_PRIORITY_PATH"
+-#elif defined(__linux__)
++#elif defined(__unix__)
+     // Linux x64
+     #define MSDK_LIB_NAME            "libmfxhw64."
+     #define ONEVPL_PRIORITY_PATH_VAR "ONEVPL_PRIORITY_PATH"
diff --git a/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__loader.cpp b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__loader.cpp
new file mode 100644
index 000000000000..f7812d5a04bc
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__loader.cpp
@@ -0,0 +1,27 @@
+--- libvpl/src/mfx_dispatcher_vpl_loader.cpp.orig	2025-12-17 23:04:39 UTC
++++ libvpl/src/mfx_dispatcher_vpl_loader.cpp
+@@ -432,13 +432,14 @@ mfxU32 LoaderCtxVPL::GetSearchPathsSystemDefault(std::
+ mfxU32 LoaderCtxVPL::GetSearchPathsSystemDefault(std::list<STRING_TYPE> &searchDirs) {
+     searchDirs.clear();
+ 
+-#ifdef __linux__
++#ifdef __unix__
+     // Add the standard path for libmfx1 install in Ubuntu
+     searchDirs.push_back("/usr/lib/x86_64-linux-gnu");
+ 
+     // Add other default paths
+     searchDirs.push_back("/lib");
+     searchDirs.push_back("/usr/lib");
++    searchDirs.push_back("%%PREFIX%%/lib");
+     searchDirs.push_back("/lib64");
+     searchDirs.push_back("/usr/lib64");
+ #endif
+@@ -450,7 +451,7 @@ mfxU32 LoaderCtxVPL::GetSearchPathsInstallDir(std::lis
+ mfxU32 LoaderCtxVPL::GetSearchPathsInstallDir(std::list<STRING_TYPE> &searchDirs) {
+     searchDirs.clear();
+ 
+-    #ifdef __linux__
++    #ifdef __unix__
+     STRING_TYPE install_dir = INSTALL_LIBDIR_SEARCH;
+     searchDirs.push_back(install_dir);
+     #endif
diff --git a/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__lowlatency.cpp b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__lowlatency.cpp
new file mode 100644
index 000000000000..a6bcbf2a6bb0
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__lowlatency.cpp
@@ -0,0 +1,30 @@
+--- libvpl/src/mfx_dispatcher_vpl_lowlatency.cpp.orig	2025-12-17 23:04:39 UTC
++++ libvpl/src/mfx_dispatcher_vpl_lowlatency.cpp
+@@ -18,7 +18,7 @@
+         #define LIB_ONEVPL L"libmfx64-gen.dll"
+         #define LIB_MSDK   L"libmfxhw64.dll"
+     #endif
+-#elif defined(__linux__)
++#elif defined(__unix__)
+     // Linux x64
+     #define LIB_ONEVPL "libmfx-gen.so.1.2"
+     #define LIB_MSDK   "libmfxhw64.so.1"
+@@ -191,14 +191,17 @@ mfxStatus LoaderCtxVPL::LoadLibsFromMultipleDirs(LibTy
+ }
+ 
+ mfxStatus LoaderCtxVPL::LoadLibsFromMultipleDirs(LibType libType) {
+-#ifdef __linux__
++#ifdef __unix__
+     // clang-format off
+ 
+     // standard paths for RT installation on Linux
+     std::vector<std::string> llSearchDir = {
++#ifdef __linux__
+         "/usr/lib/x86_64-linux-gnu",
++#endif
+         "/lib",
+         "/usr/lib",
++        "%%PREFIX%%/lib",
+         "/lib64",
+         "/usr/lib64",
+     };
diff --git a/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__msdk.cpp b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__msdk.cpp
new file mode 100644
index 000000000000..7034cdeedfef
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_src_mfx__dispatcher__vpl__msdk.cpp
@@ -0,0 +1,131 @@
+--- libvpl/src/mfx_dispatcher_vpl_msdk.cpp.orig	2025-12-17 23:04:39 UTC
++++ libvpl/src/mfx_dispatcher_vpl_msdk.cpp
+@@ -11,7 +11,7 @@
+     #include "src/mfx_dispatcher_vpl_win.h"
+ #endif
+ 
+-#ifdef __linux__
++#ifdef __unix__
+     #include <pthread.h>
+     #define strncpy_s(dst, size, src, cnt) strncpy((dst), (src), (cnt)) // NOLINT
+ #endif
+@@ -97,7 +97,7 @@ static const mfxImplementedFunctions msdkImplFuncs = {
+     (mfxChar**)msdkImplFuncsNames
+ };
+ 
+-#ifdef __linux__
++#ifdef __unix__
+ // optional extBuf to limit threads created in MSDK session creation
+ // to enable, set vplParam.NumExtParam and vplParam.ExtParam before calling MFXInitEx2()
+ static const mfxExtThreadsParam extThreadParam = {
+@@ -142,7 +142,7 @@ mfxStatus LoaderCtxMSDK::OpenSession(mfxSession *sessi
+     mfxInitializationParam vplParam = {};
+     vplParam.AccelerationMode       = accelMode;
+ 
+-#ifdef __linux__
++#ifdef __unix__
+     vplParam.ExtParam    = (mfxExtBuffer **)&extParams;
+     vplParam.NumExtParam = 1;
+ #else
+@@ -183,7 +183,7 @@ mfxStatus LoaderCtxMSDK::GetDefaultAccelType(mfxU32 ad
+ }
+ 
+ mfxStatus LoaderCtxMSDK::GetDefaultAccelType(mfxU32 adapterID, mfxIMPL *implDefault, mfxU64 *luid) {
+-#ifdef __linux__
++#ifdef __unix__
+     // VAAPI only
+     *implDefault = MFX_IMPL_VIA_VAAPI;
+     *luid        = 0;
+@@ -235,7 +235,7 @@ mfxStatus LoaderCtxMSDK::QueryAPIVersion(STRING_TYPE l
+         vplParam.AccelerationMode =
+             (mfxAccelerationMode)CvtAccelType(MFX_IMPL_HARDWARE, implDefault & 0xFF00);
+ 
+-#ifdef __linux__
++#ifdef __unix__
+         vplParam.ExtParam    = (mfxExtBuffer **)&extParams;
+         vplParam.NumExtParam = 1;
+ #else
+@@ -279,7 +279,7 @@ mfxStatus LoaderCtxMSDK::QueryMSDKCaps(STRING_TYPE lib
+     m_libNameFull = libNameFull;
+     m_deviceID    = 0;
+ 
+-#ifdef __linux__
++#ifdef __unix__
+     // require pthreads to be linked in for MSDK RT to load
+     pthread_key_t pkey;
+     if (pthread_key_create(&pkey, NULL) == 0) {
+@@ -504,13 +504,64 @@ mfxU32 read_device_file(std::string &path) {
+     return result;
+ }
+ 
++#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
++#if defined(__FreeBSD__) && __FreeBSD__ < 13
++#include <sys/sysctl.h>
++#else
++#include <sys/ioctl.h>
++#include <fcntl.h>
++#include <unistd.h>
++#endif // defined(__FreeBSD__) && __FreeBSD__ < 13
++
++struct drm_pciinfo {
++	uint16_t        domain;
++	uint8_t         bus;
++	uint8_t         dev;
++	uint8_t         func;
++	uint16_t        vendor_id;
++	uint16_t        device_id;
++	uint16_t        subvendor_id;
++	uint16_t        subdevice_id;
++	uint8_t         revision_id;
++};
++
++#define DRM_IOCTL_BASE         'd'
++#define DRM_IOR(nr,type)       _IOR(DRM_IOCTL_BASE,nr,type)
++#define DRM_IOCTL_GET_PCIINFO  DRM_IOR(0x15, struct drm_pciinfo)
++#endif
++
+ mfxStatus LoaderCtxMSDK::GetRenderNodeDescription(mfxU32 adapterID,
+                                                   mfxU32 &vendorID,
+                                                   mfxU16 &deviceID) {
+     vendorID = 0;
+     deviceID = 0;
+ 
+-#if defined(__linux__)
++#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
++#if defined(__FreeBSD__) && __FreeBSD__ < 13
++    std::string mib = "dev.drm." + std::to_string(128 + adapterID) + ".PCI_ID";
++    char pci_id[20];
++    size_t len = sizeof(pci_id);
++    if (sysctlbyname(mib.c_str(), pci_id, &len, NULL, 0))
++	    return MFX_ERR_UNSUPPORTED;
++    sscanf(pci_id, "%x:%x", &vendorID, &deviceID);
++#else
++    std::string path = "/dev/dri/renderD" + std::to_string(128 + adapterID);
++    int fd = open(path.c_str(), O_RDONLY);
++    if (fd == -1)
++	    return MFX_ERR_UNSUPPORTED;
++    struct drm_pciinfo pinfo;
++    if (ioctl(fd, DRM_IOCTL_GET_PCIINFO, &pinfo)) {
++	    close(fd);
++	    return MFX_ERR_UNSUPPORTED;
++    }
++    vendorID = pinfo.vendor_id;
++    deviceID = pinfo.device_id;
++    close(fd);
++#endif // defined(__FreeBSD__) && __FreeBSD__ < 13
++    if (vendorID != 0x8086 || deviceID == 0)
++	    return MFX_ERR_UNSUPPORTED;
++    return MFX_ERR_NONE;
++#elif defined(__linux__)
+     mfxU32 DRMRenderNodeNum = 128 + adapterID;
+     std::string nodeStr     = std::to_string(DRMRenderNodeNum);
+ 
+@@ -583,7 +634,7 @@ mfxStatus LoaderCtxMSDK::QueryExtDeviceID(mfxExtendedD
+             luidArr >>= 8;
+         }
+     }
+-#elif defined(__linux__)
++#elif defined(__unix__)
+     extDeviceID->DRMPrimaryNodeNum = adapterID;
+     extDeviceID->DRMRenderNodeNum  = 128 + adapterID;
+ #endif
diff --git a/multimedia/libvpl/files/patch-libvpl_test_runtimes_stub_src_config.h b/multimedia/libvpl/files/patch-libvpl_test_runtimes_stub_src_config.h
new file mode 100644
index 000000000000..730ba7f18783
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_test_runtimes_stub_src_config.h
@@ -0,0 +1,11 @@
+--- libvpl/test/runtimes/stub/src/config.h.orig	2025-12-17 23:04:39 UTC
++++ libvpl/test/runtimes/stub/src/config.h
+@@ -13,7 +13,7 @@
+ 
+ #include "vpl/mfx.h"
+ 
+-#if defined(__linux__)
++#if defined(__unix__)
+     #define vsprintf_s(s, l, m, a) vsprintf(s, m, a)
+ #endif
+ 
diff --git a/multimedia/libvpl/files/patch-libvpl_test_unit_src_dispatcher__enum__impls.cpp b/multimedia/libvpl/files/patch-libvpl_test_unit_src_dispatcher__enum__impls.cpp
new file mode 100644
index 000000000000..4afa28283f95
--- /dev/null
+++ b/multimedia/libvpl/files/patch-libvpl_test_unit_src_dispatcher__enum__impls.cpp
@@ -0,0 +1,11 @@
+--- libvpl/test/unit/src/dispatcher_enum_impls.cpp.orig	2025-04-18 15:44:33 UTC
++++ libvpl/test/unit/src/dispatcher_enum_impls.cpp
+@@ -30,7 +30,7 @@ typedef enum {
+             #define STUB_RT "libvplstubrt64.dll"
+         #endif
+     #endif
+-#elif defined(__linux__)
++#elif defined(__unix__)
+     #define STUB_RT "libvplstubrt1x64.so"
+ #endif
+ 
diff --git a/multimedia/libvpl/pkg-descr b/multimedia/libvpl/pkg-descr
new file mode 100644
index 000000000000..5ce7351e0bb9
--- /dev/null
+++ b/multimedia/libvpl/pkg-descr
@@ -0,0 +1,16 @@
+Intel Video Processing Library (Intel VPL) provides access to hardware
+accelerated video decode, encode, and processing capabilities on Intel GPUs
+to support AI visual inference, media delivery, cloud gaming, and virtual
+desktop infrastructure use cases.
+
+This repository contains the following components:
+
+- Copies of the Intel VPL API header files.
+  The version of the API is listed in the mfxdefs.h file.
+- Intel VPL Dispatcher
+- Examples demonstrating API usage
+
+*** IMPORTANT ***
+
+Intel VPL Tools are no longer in this repository. They have all been
+moved to libvpl-tools.
diff --git a/multimedia/libvpl/pkg-plist b/multimedia/libvpl/pkg-plist
new file mode 100644
index 000000000000..ffc924269e6b
--- /dev/null
+++ b/multimedia/libvpl/pkg-plist
@@ -0,0 +1,113 @@
+etc/vpl/vars.sh
+include/vpl/mfx.h
+include/vpl/mfxadapter.h
+include/vpl/mfxbrc.h
+include/vpl/mfxcamera.h
+include/vpl/mfxcommon.h
+include/vpl/mfxdefs.h
+include/vpl/mfxdispatcher.h
+include/vpl/mfxdispatcherprefixedfunctions.h
+include/vpl/mfxencodestats.h
+include/vpl/mfximplcaps.h
+include/vpl/mfxjpeg.h
+include/vpl/mfxmemory.h
+include/vpl/mfxmvc.h
+include/vpl/mfxpcp.h
+include/vpl/mfxsession.h
+include/vpl/mfxstructures.h
+include/vpl/mfxsurfacepool.h
+include/vpl/mfxvideo++.h
+include/vpl/mfxvideo.h
+include/vpl/mfxvp8.h
+include/vpl/preview/README.txt
+include/vpl/preview/legacy/README.txt
+include/vpl/preview/legacy/mfxvideo++.h
+lib/cmake/vpl/VPLConfig.cmake
+lib/cmake/vpl/VPLConfigVersion.cmake
+lib/libvpl.so
+lib/libvpl.so.2
+lib/libvpl.so.2.17
+libdata/pkgconfig/vpl.pc
+%%DATADIR%%/examples/api1x_core/legacy-decode/CMakeLists.txt
+%%DATADIR%%/examples/api1x_core/legacy-decode/License.txt
+%%DATADIR%%/examples/api1x_core/legacy-decode/README.md
+%%DATADIR%%/examples/api1x_core/legacy-decode/src/legacy-decode.cpp
+%%DATADIR%%/examples/api1x_core/legacy-decode/src/util.hpp
+%%DATADIR%%/examples/api1x_core/legacy-encode/CMakeLists.txt
+%%DATADIR%%/examples/api1x_core/legacy-encode/License.txt
+%%DATADIR%%/examples/api1x_core/legacy-encode/PreLoad.cmake
+%%DATADIR%%/examples/api1x_core/legacy-encode/README.md
+%%DATADIR%%/examples/api1x_core/legacy-encode/src/legacy-encode.cpp
+%%DATADIR%%/examples/api1x_core/legacy-encode/src/util.hpp
+%%DATADIR%%/examples/api1x_core/legacy-vpp/CMakeLists.txt
+%%DATADIR%%/examples/api1x_core/legacy-vpp/License.txt
+%%DATADIR%%/examples/api1x_core/legacy-vpp/README.md
+%%DATADIR%%/examples/api1x_core/legacy-vpp/src/legacy-vpp.cpp
+%%DATADIR%%/examples/api1x_core/legacy-vpp/src/util.hpp
+%%DATADIR%%/examples/api2x/hello-decode/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-decode/License.txt
+%%DATADIR%%/examples/api2x/hello-decode/PreLoad.cmake
+%%DATADIR%%/examples/api2x/hello-decode/README.md
+%%DATADIR%%/examples/api2x/hello-decode/src/hello-decode.cpp
+%%DATADIR%%/examples/api2x/hello-decode/src/util.hpp
+%%DATADIR%%/examples/api2x/hello-decvpp/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-decvpp/License.txt
+%%DATADIR%%/examples/api2x/hello-decvpp/PreLoad.cmake
+%%DATADIR%%/examples/api2x/hello-decvpp/README.md
+%%DATADIR%%/examples/api2x/hello-decvpp/src/hello-decvpp.cpp
+%%DATADIR%%/examples/api2x/hello-decvpp/src/util.hpp
+%%DATADIR%%/examples/api2x/hello-encode-jpeg/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-encode-jpeg/License.txt
+%%DATADIR%%/examples/api2x/hello-encode-jpeg/PreLoad.cmake
+%%DATADIR%%/examples/api2x/hello-encode-jpeg/README.md
+%%DATADIR%%/examples/api2x/hello-encode-jpeg/src/hello-encode-jpeg.cpp
+%%DATADIR%%/examples/api2x/hello-encode-jpeg/src/util.hpp
+%%DATADIR%%/examples/api2x/hello-encode/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-encode/License.txt
+%%DATADIR%%/examples/api2x/hello-encode/PreLoad.cmake
+%%DATADIR%%/examples/api2x/hello-encode/README.md
+%%DATADIR%%/examples/api2x/hello-encode/src/hello-encode.cpp
+%%DATADIR%%/examples/api2x/hello-encode/src/util.hpp
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/License.txt
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/PreLoad.cmake
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/README.md
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/include/device-vaapi.h
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/include/util.hpp
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/include/vasurface_wrapper.h
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/src/device-vaapi.cpp
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/src/hello-sharing-vaapi-export.cpp
+%%DATADIR%%/examples/api2x/hello-sharing-vaapi/src/hello-sharing-vaapi-import.cpp
+%%DATADIR%%/examples/api2x/hello-transcode/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-transcode/License.txt
+%%DATADIR%%/examples/api2x/hello-transcode/README.md
+%%DATADIR%%/examples/api2x/hello-transcode/src/hello-transcode.cpp
+%%DATADIR%%/examples/api2x/hello-transcode/src/util.hpp
+%%DATADIR%%/examples/api2x/hello-vpp/CMakeLists.txt
+%%DATADIR%%/examples/api2x/hello-vpp/License.txt
+%%DATADIR%%/examples/api2x/hello-vpp/PreLoad.cmake
+%%DATADIR%%/examples/api2x/hello-vpp/README.md
+%%DATADIR%%/examples/api2x/hello-vpp/src/hello-vpp.cpp
+%%DATADIR%%/examples/api2x/hello-vpp/src/util.hpp
+%%DATADIR%%/examples/content/cars_320x240.bgra
+%%DATADIR%%/examples/content/cars_320x240.h264
+%%DATADIR%%/examples/content/cars_320x240.h265
+%%DATADIR%%/examples/content/cars_320x240.i420
+%%DATADIR%%/examples/content/cars_320x240.mjpeg
+%%DATADIR%%/examples/content/cars_320x240.nv12
+%%DATADIR%%/examples/content/cars_320x240.y8
+%%DATADIR%%/examples/interop/vpl-infer/CMakeLists.txt
+%%DATADIR%%/examples/interop/vpl-infer/CPPLINT.cfg
+%%DATADIR%%/examples/interop/vpl-infer/License.txt
+%%DATADIR%%/examples/interop/vpl-infer/PreLoad.cmake
+%%DATADIR%%/examples/interop/vpl-infer/README.md
+%%DATADIR%%/examples/interop/vpl-infer/src/util.hpp
+%%DATADIR%%/examples/interop/vpl-infer/src/vpl-infer.cpp
+%%DATADIR%%/examples/tutorials/01_transition/License.txt
+%%DATADIR%%/examples/tutorials/01_transition/MediaSDK/CMakeLists.txt
+%%DATADIR%%/examples/tutorials/01_transition/MediaSDK/cmake/FindMFX.cmake
+%%DATADIR%%/examples/tutorials/01_transition/README.md
+%%DATADIR%%/examples/tutorials/01_transition/VPL/CMakeLists.txt
+%%DATADIR%%/examples/tutorials/01_transition/src/transition.cpp
+%%DATADIR%%/licensing/license.txt
+%%DATADIR%%/licensing/third-party-programs.txt
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.