diff --git a/multimedia/onevpl/Makefile b/multimedia/onevpl/Makefile index 5092f328a201..4635900c5086 100644 --- a/multimedia/onevpl/Makefile +++ b/multimedia/onevpl/Makefile @@ -1,49 +1,49 @@ PORTNAME= oneVPL DISTVERSIONPREFIX= v -DISTVERSION= 2022.0.1 +DISTVERSION= 2022.0.2 CATEGORIES= multimedia MAINTAINER= jbeich@FreeBSD.org COMMENT= oneAPI Video Processing Library dispatcher, tools, and examples LICENSE= MIT LICENSE_FILE= ${WRKSRC}/LICENSE ONLY_FOR_ARCHS= amd64 ONLY_FOR_ARCHS_REASON= only Intel GPUs on x86 are supported LIB_DEPENDS= libdrm.so:graphics/libdrm \ libwayland-client.so:graphics/wayland \ libva.so:multimedia/libva USES= cmake:testing compiler:c++17-lang localbase:ldflags pkgconfig xorg USE_GITHUB= yes USE_LDCONFIG= yes USE_XORG= x11 xcb GH_ACCOUNT= oneapi-src CMAKE_TESTING_ON= BUILD_TESTS OPTIONS_DEFINE= PYTHON OPTIONS_DEFAULT=PYTHON OPTIONS_SUB= yes PYTHON_USES= python PYTHON_BUILD_DEPENDS= pybind11>0:devel/pybind11 PYTHON_CMAKE_BOOL= BUILD_PYTHON_BINDING post-patch: @${REINPLACE_CMD} -e '/pkgconfig/s,FULL_LIBDIR},PREFIX}/libdata,' \ ${WRKSRC}/dispatcher/CMakeLists.txt @${REINPLACE_CMD} -e 's,/usr,${PREFIX},' \ ${WRKSRC}/dispatcher/vpl/mfx_dispatcher_vpl_loader.cpp @${REINPLACE_CMD} -e '/PKG_CONFIG/s,_lib,_prefix/libdata,' \ ${WRKSRC}/modulefiles/vpl post-patch-PYTHON-on: @${REINPLACE_CMD} -e '/LIBDIR/s/python/&${PYTHON_VER}/' \ ${WRKSRC}/preview/python/binding/CMakeLists.txt post-install: @${FIND} ${STAGEDIR} -name \*.orig -delete .include diff --git a/multimedia/onevpl/distinfo b/multimedia/onevpl/distinfo index bc2c4c044f32..17fae98f4a29 100644 --- a/multimedia/onevpl/distinfo +++ b/multimedia/onevpl/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1638835544 -SHA256 (oneapi-src-oneVPL-v2022.0.1_GH0.tar.gz) = cc119877d5c8854a32909f619b918a541e946049b23d20276a8791f00d34d1ef -SIZE (oneapi-src-oneVPL-v2022.0.1_GH0.tar.gz) = 3093522 +TIMESTAMP = 1639714758 +SHA256 (oneapi-src-oneVPL-v2022.0.2_GH0.tar.gz) = 0c86277c567440e5a2ac9b672c37b3c16caf4f968c63fe2ce09d1ee19161ed76 +SIZE (oneapi-src-oneVPL-v2022.0.2_GH0.tar.gz) = 3099258 diff --git a/multimedia/onevpl/files/patch-drm-to-pciid b/multimedia/onevpl/files/patch-drm-to-pciid index a33d8e31f37b..61fdf88cdb0c 100644 --- a/multimedia/onevpl/files/patch-drm-to-pciid +++ b/multimedia/onevpl/files/patch-drm-to-pciid @@ -1,82 +1,82 @@ /sys/class/drm/renderD*/device/device is Linux-only, so use a BSD extension to get vendor/device identifiers from rendor nodes. Based on libdrm code. $ ffmpeg -hide_banner -init_hw_device qsv=auto -i foo.y4m -vf hwupload=extra_hw_frames=64,format=qsv -c:v h264_qsv -y foo.mkv [AVHWDeviceContext @ 0x8062d0140] Error initializing an MFX session: -3. Device creation failed: -1313558101. Failed to set value 'qsv=auto' for option 'init_hw_device': Unknown error occurred Error parsing global options: Unknown error occurred ---- dispatcher/linux/device_ids.h.orig 2021-09-13 22:51:02 UTC +--- dispatcher/linux/device_ids.h.orig 2021-12-17 04:19:18 UTC +++ dispatcher/linux/device_ids.h -@@ -420,7 +420,62 @@ static inline eMFXHWType get_platform(unsigned int dev +@@ -377,7 +377,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 +#else +#include +#include +#include +#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 &allDevices) { +#ifdef DRM_IOCTL_GET_PCIINFO + std::vector 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"; -@@ -456,6 +511,7 @@ static mfxStatus get_devices(std::vector &allD +@@ -413,6 +468,7 @@ static mfxStatus get_devices(std::vector &allD allDevices.emplace_back(device); } +#endif - // sort by device_id + // sort by platform, unknown will appear at beginning std::sort(allDevices.begin(), allDevices.end(), [](const Device &a, const Device &b) {