$ git diff --patch-with-stat --summary 09243c3454676e90d1ca8ffb344ea11ac62debe1..166a077850285c1e3aec7d18dba1bcd77d5ad7e0
.abf.yml | 6 +-
hevc-vaapi.diff | 0
obs-studio-29.1.0-clang16.patch | 86 ++++++++++++++++++
obs-studio-cef-122.patch | 22 +++++
obs-studio-ffmpeg-7.0.patch | 12 +++
obs-studio.spec | 161 ++++++++++++++++++++++++---------
openmandriva-relax-ffnvcodec-ver.patch | 24 +++++
7 files changed, 264 insertions(+), 47 deletions(-)
delete mode 100644 hevc-vaapi.diff
create mode 100644 obs-studio-29.1.0-clang16.patch
create mode 100644 obs-studio-cef-122.patch
create mode 100644 obs-studio-ffmpeg-7.0.patch
create mode 100644 openmandriva-relax-ffnvcodec-ver.patch
diff --git a/.abf.yml b/.abf.yml
index b204f97..fa6fdbf 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,4 +1,4 @@
sources:
- 5716577019b1ccda01a12db2cba35a023082b7ad.tar.gz: 3bd03afa9b262eb0e7ff4df593658034d9a3a2f5
- b6e0888084ab623f0a73e8cb7ee5dc341e56fda1.tar.gz: 4a6e2a94ab8b0ca13908a0e678eda7ee3a653dbf
- obs-studio-29.0.0.tar.gz: 3fc1cd8fc97dfd8be5401d13e953b510a586695c
+ obs-browser-2a2879b5a69f4a99cd7459d8595af46cdb23115c.tar.gz: da48a676c5adc580b9eefbbbeb0601b3eb669e8b
+ obs-websocket-0548c7798a323fe5296c150e13b898a5ee62fc1e.tar.gz: 53e6c4758d95360db60ab0f34f4d61e6ec0f1002
+ obs-studio-30.2.1.tar.gz: f4f8b9835f790979ad1c33e47926953a751a1be9
diff --git a/hevc-vaapi.diff b/hevc-vaapi.diff
deleted file mode 100644
index e69de29..0000000
diff --git a/obs-studio-29.1.0-clang16.patch b/obs-studio-29.1.0-clang16.patch
new file mode 100644
index 0000000..86ff4fc
--- /dev/null
+++ b/obs-studio-29.1.0-clang16.patch
@@ -0,0 +1,86 @@
+diff -up obs-studio-29.1.0/deps/file-updater/file-updater/file-updater.c.omv~ obs-studio-29.1.0/deps/file-updater/file-updater/file-updater.c
+--- obs-studio-29.1.0/deps/file-updater/file-updater/file-updater.c.omv~ 2023-05-03 20:08:05.674575020 +0200
++++ obs-studio-29.1.0/deps/file-updater/file-updater/file-updater.c 2023-05-03 20:15:09.536857184 +0200
+@@ -108,6 +108,10 @@ static bool do_http_request(struct updat
+ CURLcode code;
+ uint8_t null_terminator = 0;
+
++// pragmas are a workaround for what seems to be a false positive w/ warnings
++// "file-updater.c:115:2: error: call to '_curl_easy_setopt_err_write_callback' declared with 'warning' attribute: curl_easy_setopt expects a curl_write_callback argument for this option"
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wattribute-warning"
+ da_resize(info->file_data, 0);
+ curl_easy_setopt(info->curl, CURLOPT_URL, url);
+ curl_easy_setopt(info->curl, CURLOPT_HTTPHEADER, info->header);
+@@ -125,6 +129,7 @@ static bool do_http_request(struct updat
+ http_header);
+ curl_easy_setopt(info->curl, CURLOPT_HEADERDATA, info);
+ }
++#pragma GCC diagnostic pop
+
+ code = curl_easy_perform(info->curl);
+ if (code != CURLE_OK) {
+diff -up obs-studio-29.1.0/deps/json11/json11.cpp.omv~ obs-studio-29.1.0/deps/json11/json11.cpp
+--- obs-studio-29.1.0/deps/json11/json11.cpp.omv~ 2023-05-03 20:15:37.856361073 +0200
++++ obs-studio-29.1.0/deps/json11/json11.cpp 2023-05-03 20:16:26.028231637 +0200
+@@ -151,7 +151,7 @@ protected:
+
+ // Constructors
+ explicit Value(const T &value) : m_value(value) {}
+- explicit Value(T &&value) : m_value(move(value)) {}
++ explicit Value(T &&value) : m_value(std::move(value)) {}
+
+ // Get type tag
+ Json::Type type() const override {
+@@ -198,7 +198,7 @@ class JsonString final : public Value<Js
+ const string &string_value() const override { return m_value; }
+ public:
+ explicit JsonString(const string &value) : Value(value) {}
+- explicit JsonString(string &&value) : Value(move(value)) {}
++ explicit JsonString(string &&value) : Value(std::move(value)) {}
+ };
+
+ class JsonArray final : public Value<Json::ARRAY, Json::array> {
+@@ -206,7 +206,7 @@ class JsonArray final : public Value<Jso
+ const Json & operator[](size_t i) const override;
+ public:
+ explicit JsonArray(const Json::array &value) : Value(value) {}
+- explicit JsonArray(Json::array &&value) : Value(move(value)) {}
++ explicit JsonArray(Json::array &&value) : Value(std::move(value)) {}
+ };
+
+ class JsonObject final : public Value<Json::OBJECT, Json::object> {
+@@ -214,7 +214,7 @@ class JsonObject final : public Value<Js
+ const Json & operator[](const string &key) const override;
+ public:
+ explicit JsonObject(const Json::object &value) : Value(value) {}
+- explicit JsonObject(Json::object &&value) : Value(move(value)) {}
++ explicit JsonObject(Json::object &&value) : Value(std::move(value)) {}
+ };
+
+ class JsonNull final : public Value<Json::NUL, NullStruct> {
+@@ -256,12 +256,12 @@ Json::Json(double value) :
+ Json::Json(int value) : m_ptr(make_shared<JsonInt>(value)) {}
+ Json::Json(bool value) : m_ptr(value ? statics().t : statics().f) {}
+ Json::Json(const string &value) : m_ptr(make_shared<JsonString>(value)) {}
+-Json::Json(string &&value) : m_ptr(make_shared<JsonString>(move(value))) {}
++Json::Json(string &&value) : m_ptr(make_shared<JsonString>(std::move(value))) {}
+ Json::Json(const char * value) : m_ptr(make_shared<JsonString>(value)) {}
+ Json::Json(const Json::array &values) : m_ptr(make_shared<JsonArray>(values)) {}
+-Json::Json(Json::array &&values) : m_ptr(make_shared<JsonArray>(move(values))) {}
++Json::Json(Json::array &&values) : m_ptr(make_shared<JsonArray>(std::move(values))) {}
+ Json::Json(const Json::object &values) : m_ptr(make_shared<JsonObject>(values)) {}
+-Json::Json(Json::object &&values) : m_ptr(make_shared<JsonObject>(move(values))) {}
++Json::Json(Json::object &&values) : m_ptr(make_shared<JsonObject>(std::move(values))) {}
+
+ /* * * * * * * * * * * * * * * * * * * *
+ * Accessors
+@@ -359,7 +359,7 @@ struct JsonParser final {
+ * Mark this parse as failed.
+ */
+ Json fail(string &&msg) {
+- return fail(move(msg), Json());
++ return fail(std::move(msg), Json());
+ }
+
+ template <typename T>
diff --git a/obs-studio-cef-122.patch b/obs-studio-cef-122.patch
new file mode 100644
index 0000000..73af17d
--- /dev/null
+++ b/obs-studio-cef-122.patch
@@ -0,0 +1,22 @@
+diff -up obs-studio-30.1.0/plugins/obs-browser/CMakeLists.txt.omv~ obs-studio-30.1.0/plugins/obs-browser/CMakeLists.txt
+diff -up obs-studio-30.1.0/plugins/obs-browser/browser-app.cpp.omv~ obs-studio-30.1.0/plugins/obs-browser/browser-app.cpp
+--- obs-studio-30.1.0/plugins/obs-browser/browser-app.cpp.omv~ 2024-03-13 14:05:43.435619075 +0100
++++ obs-studio-30.1.0/plugins/obs-browser/browser-app.cpp 2024-03-13 14:05:59.963852266 +0100
+@@ -147,7 +147,7 @@ void BrowserApp::ExecuteJSFunction(CefRe
+ std::vector<CefString> names;
+ browser->GetFrameNames(names);
+ for (auto &name : names) {
+- CefRefPtr<CefFrame> frame = browser->GetFrame(name);
++ CefRefPtr<CefFrame> frame = browser->GetFrameByName(name);
+ CefRefPtr<CefV8Context> context = frame->GetV8Context();
+
+ context->Enter();
+@@ -346,7 +346,7 @@ bool BrowserApp::OnProcessMessageReceive
+ std::vector<CefString> names;
+ browser->GetFrameNames(names);
+ for (auto &name : names) {
+- CefRefPtr<CefFrame> frame = browser->GetFrame(name);
++ CefRefPtr<CefFrame> frame = browser->GetFrameByName(name);
+ CefRefPtr<CefV8Context> context = frame->GetV8Context();
+
+ context->Enter();
diff --git a/obs-studio-ffmpeg-7.0.patch b/obs-studio-ffmpeg-7.0.patch
new file mode 100644
index 0000000..7ade64f
--- /dev/null
+++ b/obs-studio-ffmpeg-7.0.patch
@@ -0,0 +1,12 @@
+diff -up obs-studio-30.1.1/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c.omv~ obs-studio-30.1.1/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c
+--- obs-studio-30.1.1/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c.omv~ 2024-04-08 15:22:36.871991837 +0200
++++ obs-studio-30.1.1/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c 2024-04-08 15:22:46.904082834 +0200
+@@ -886,7 +886,7 @@ static int64_t ffmpeg_mux_seek_av_buffer
+ return 0;
+ }
+
+-static int ffmpeg_mux_write_av_buffer(void *opaque, uint8_t *buf, int buf_size)
++static int ffmpeg_mux_write_av_buffer(void *opaque, const uint8_t *buf, int buf_size)
+ {
+ struct ffmpeg_mux *ffm = opaque;
+
diff --git a/obs-studio.spec b/obs-studio.spec
index cfd3d12..45c75d0 100644
--- a/obs-studio.spec
+++ b/obs-studio.spec
@@ -1,44 +1,54 @@
%define _disable_ld_no_undefined 1
%define _disable_lto 1
+# Current status of CEF plugin: It compiles, but crashes when trying
+# to use the browser
+%bcond_with cef
+
%define libobs %mklibname obs
-%define libobsglad %mklibname obsglad
-%define libobsopengl %mklibname obs-opengl
%define libobsfrontendapi %mklibname obs-frontend-api
%define libobsscripting %mklibname obs-scripting
%define devobs %mklibname obs -d
%define oname obs
+# ffmpeg 6.1 deprecates a slew of things still used by obs
+%global optflags %{optflags} -Wno-error=deprecated-declarations
+
# This package requires x264 codec so we provide it in Restricted repository
%define distsuffix plf
+#define beta beta4
+
Summary: Free and open source software for video recording and live streaming
Name: obs-studio
-Version: 29.0.0
-Release: 1
+Version: 30.2.1
+Release: %{?beta:0.%{beta}.}1
License: GPLv2+
Group: Video
Url: https://obsproject.com
-Source0: https://github.com/obsproject/%{name}/archive/%{version}/%{name}-%{version}.tar.gz
+Source0: https://github.com/obsproject/%{name}/archive/%{version}/%{name}-%{version}%{?beta:-%{beta}}.tar.gz
# git submodules that have gone missing in 28.0 tarballs
-Source1: https://github.com/obsproject/obs-browser/archive/b6e0888084ab623f0a73e8cb7ee5dc341e56fda1.tar.gz
-Source2: https://github.com/obsproject/obs-websocket/archive/5716577019b1ccda01a12db2cba35a023082b7ad.tar.gz
+Source1: https://github.com/obsproject/obs-browser/archive/obs-browser-2a2879b5a69f4a99cd7459d8595af46cdb23115c.tar.gz
+Source2: https://github.com/obsproject/obs-websocket/archive/obs-websocket-0548c7798a323fe5296c150e13b898a5ee62fc1e.tar.gz
#Source3: https://github.com/obsproject/obs-amd-encoder/archive/5a1dafeddb4b37ca2ba2415cf88b40bff8aee428.tar.gz
#Patch0: %{name}-27.1.0-linkage.patch
-Patch1: hevc-vaapi.diff
+Patch1: obs-studio-29.1.0-clang16.patch
# The cmake dependency generator isn't smart enough
# to see that the w32-pthreads dependency is only
# in a condition that can never be true on a real OS
Patch2: no-w32-pthreads-dep.patch
+# Port the browser plugin to CEF 122.x
+Patch3: obs-studio-cef-122.patch
+
BuildRequires: cmake ninja
-BuildRequires: qmake5
BuildRequires: freetype-devel
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(cryptopp)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(fontconfig)
+BuildRequires: pkgconfig(ffnvcodec)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(jack)
BuildRequires: pkgconfig(jansson)
@@ -62,7 +72,10 @@ BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(libpci)
BuildRequires: pkgconfig(libssh2)
BuildRequires: pkgconfig(libidn2)
+BuildRequires: pkgconfig(libvlc)
+BuildRequires: pkgconfig(nlohmann_json)
BuildRequires: qt6-cmake
+BuildRequires: qmake-qt6
BuildRequires: cmake(Qt6)
BuildRequires: cmake(Qt6Core)
BuildRequires: cmake(Qt6DBus)
@@ -73,6 +86,9 @@ BuildRequires: cmake(Qt6Network)
BuildRequires: cmake(Qt6Widgets)
BuildRequires: cmake(Qt6Xml)
BuildRequires: cmake(vulkanheaders)
+%ifarch %{x86_64}
+BuildRequires: pkgconfig(vpl)
+%endif
BuildRequires: pkgconfig(speexdsp)
BuildRequires: pkgconfig(udev)
BuildRequires: pkgconfig(wayland-egl)
@@ -89,6 +105,10 @@ BuildRequires: pkgconfig(luajit)
BuildRequires: swig
BuildRequires: mbedtls-devel
BuildRequires: sndio-devel
+BuildRequires: uthash-devel
+%if %{with cef}
+BuildRequires: cef-devel
+%endif
# Build dependencies from restricted repo. If needed OSB-Studio can be moved to main repo and below deps disabled
# Build with this deps only for OBS-Studio from restricted repo.
@@ -103,68 +123,107 @@ Requires: lib64va2
%ifarch %{ix86}
Requires: libva2
%endif
+Requires: x264
+Requires: x265
+Requires: %{_lib}Qt6WlShellIntegration
# Used via dlopen() so require them, otherwise they don't get installed
-Requires: %{libobsopengl} = %{EVRD}
Requires: %{libobs} = %{EVRD}
+# Libraries that existed in previous versions
+%define libobsglad %mklibname obsglad
+%define libobsopengl %mklibname obs-opengl
+Obsoletes: %{libobsglad} < %{EVRD}
+Obsoletes: %{libobsopengl} < %{EVRD}
+
%description
Free and open source software for video recording and live streaming.
This package is in the Restricted repository because it requires x264 codec.
%files
-%doc COPYING README.rst
%{_bindir}/%{oname}
%{_bindir}/%{oname}-ffmpeg-mux
%{_datadir}/applications/com.obsproject.Studio.desktop
-%{_datadir}/metainfo/com.obsproject.Studio.appdata.xml
+%{_datadir}/metainfo/com.obsproject.Studio.metainfo.xml
%dir %{_datadir}/%{oname}/
%{_datadir}/%{oname}/*
%{_iconsdir}/hicolor/*/apps/*
%dir %{_libdir}/%{oname}-plugins/
-%{_libdir}/%{oname}-plugins/*.so
-%{_libdir}/libobs-scripting.so
+%{_libdir}/%{oname}-plugins/frontend-tools.so
+%{_libdir}/%{oname}-plugins/image-source.so
+%{_libdir}/%{oname}-plugins/linux-*.so
+%{_libdir}/%{oname}-plugins/obs-*.so
+%exclude %{_libdir}/%{oname}-plugins/obs-browser.so
+%{_libdir}/%{oname}-plugins/rtmp-services.so
+%{_libdir}/%{oname}-plugins/text-freetype2.so
%{_libdir}/obs-scripting
+%{_libdir}/libobs-opengl.so*
#----------------------------------------------------------------------------
-%package -n %{libobs}
-Summary: Shared library for %{name}
-Group: System/Libraries
+%package plugin-vlc
+Summary: VLC player support plugin for OBS Studio
+Group: Video
+Requires: %{name} = %{EVRD}
-%description -n %{libobs}
-Shared library for %{name}.
+%description plugin-vlc
+VLC player support plugin for OBS Studio
-%files -n %{libobs}
-%doc COPYING README.rst
-%{_libdir}/libobs.so.*
+%files plugin-vlc
+%{_libdir}/%{oname}-plugins/vlc-video.so
#----------------------------------------------------------------------------
-%package -n %{libobsglad}
-Summary: Shared library for %{name}
-Group: System/Libraries
+%package plugin-decklink
+Summary: DeckLink hardware support plugin for OBS Studio
+Group: Video
+Requires: %{name} = %{EVRD}
-%description -n %{libobsglad}
-Shared library for %{name}.
+%description plugin-decklink
+DeckLink hardware support plugin for OBS Studio
-%files -n %{libobsglad}
-%doc COPYING README.rst
-%{_libdir}/libobsglad.so.*
+%files plugin-decklink
+%{_libdir}/%{oname}-plugins/decklink*.so
+#----------------------------------------------------------------------------
+%if %{with cef}
+%package plugin-browser
+Summary: Web browser plugin for OBS Studio
+Group: Video
+Requires: %{name} = %{EVRD}
+
+%description plugin-browser
+Web browser plugin for OBS Studio
+
+%files plugin-browser -f browser.lang
+%{_libdir}/obs-plugins/obs-browser.so
+%{_libdir}/obs-plugins/chrome-sandbox
+%{_libdir}/obs-plugins/chrome*.pak
+%{_libdir}/obs-plugins/chrome_sandbox
+%{_libdir}/obs-plugins/icudtl.dat
+%{_libdir}/obs-plugins/libEGL.so
+%{_libdir}/obs-plugins/libGLESv2.so
+%{_libdir}/obs-plugins/libcef.so
+%{_libdir}/obs-plugins/libqt6_shim.so
+%{_libdir}/obs-plugins/libvk_swiftshader.so
+%{_libdir}/obs-plugins/libvulkan.so.1
+%{_libdir}/obs-plugins/obs-browser-page
+%{_libdir}/obs-plugins/resources.pak
+%{_libdir}/obs-plugins/snapshot_blob.bin
+%{_libdir}/obs-plugins/v8_context_snapshot.bin
+%{_libdir}/obs-plugins/vk_swiftshader_icd.json
+%endif
#----------------------------------------------------------------------------
-%package -n %{libobsopengl}
+%package -n %{libobs}
Summary: Shared library for %{name}
Group: System/Libraries
-Requires: %{libobsfrontendapi} = %{EVRD}
-%description -n %{libobsopengl}
+%description -n %{libobs}
Shared library for %{name}.
-%files -n %{libobsopengl}
-%doc COPYING README.rst
-%{_libdir}/libobs-opengl.so.*
+%files -n %{libobs}
+%{_libdir}/libobs.so.*
#----------------------------------------------------------------------------
@@ -172,8 +231,6 @@ Shared library for %{name}.
Summary: Development files for %{name}
Group: Development/C
Requires: %{libobs} = %{EVRD}
-Requires: %{libobsglad} = %{EVRD}
-Requires: %{libobsopengl} = %{EVRD}
Requires: %{libobsfrontendapi} = %{EVRD}
Provides: %{name}-devel = %{EVRD}
Provides: %{oname}-devel = %{EVRD}
@@ -182,15 +239,13 @@ Provides: %{oname}-devel = %{EVRD}
Development files for %{name}
%files -n %{devobs}
-%doc COPYING README.rst
%dir %{_includedir}/%{oname}
%{_includedir}/%{oname}/*
%{_libdir}/libobs.so
-%{_libdir}/libobsglad.so
-%{_libdir}/libobs-opengl.so
%{_libdir}/libobs-frontend-api.so
%{_libdir}/cmake/libobs
%{_libdir}/cmake/obs-frontend-api
+%{_libdir}/cmake/obs-websocket-api/
%{_libdir}/pkgconfig/libobs.pc
#----------------------------------------------------------------------------
@@ -203,7 +258,6 @@ Group: System/Libraries
Frontend-api library for %{name}.
%files -n %{libobsfrontendapi}
-%doc COPYING README.rst
%{_libdir}/libobs-frontend-api.so.*
#----------------------------------------------------------------------------
@@ -217,30 +271,43 @@ Scripting library for %{name}.
%files -n %{libobsscripting}
%{_libdir}/libobs-scripting.so.*
+%{_libdir}/libobs-scripting.so
#----------------------------------------------------------------------------
%prep
-%autosetup -n %{name}-%{version} -p1
+%setup -q -n %{name}-%{version}%{?beta:-%{beta}}
cd plugins
-rmdir obs-browser obs-websocket enc-amf
+rmdir obs-browser obs-websocket
tar xf %{S:1}
tar xf %{S:2}
mv obs-browser-* obs-browser
mv obs-websocket-* obs-websocket
cd ..
+%autopatch -p1
+
%cmake -DUNIX_STRUCTURE=1 \
-DOBS_MULTIARCH_SUFFIX=$(echo %{_lib} |sed -e 's,^lib,,') \
-DOBS_VERSION_OVERRIDE="%{version}" \
-DENABLE_LIBFDK=ON \
-DENABLE_JACK=ON \
+%if %{with cef}
+ -DENABLE_BROWSER=ON \
+ -DCEF_ROOT_DIR=%{_libdir}/cef \
+%else
-DBUILD_BROWSER=OFF \
+%endif
-DENABLE_WEBSOCKET=OFF \
-DBUILD_VST=OFF \
-DENABLE_NEW_MPEGTS_OUTPUT=OFF \
-DENABLE_AJA=OFF \
+ -DENABLE_WEBRTC=OFF \
+ -DENABLE_NATIVE_NVENC:BOOL=OFF \
+%ifnarch %{x86_64}
+ -DENABLE_QSV11=OFF \
+%endif
-G Ninja
%build
@@ -248,3 +315,9 @@ cd ..
%install
%ninja_install -C build
+
+echo '%%dir %{_libdir}/obs-plugins/locales' >browser.lang
+for i in %{buildroot}%{_libdir}/obs-plugins/locales/*.pak; do
+ L="`basename $i .pak`"
+ echo "%%lang($L) %{_libdir}/obs-plugins/locales/$L.pak*" >>browser.lang
+done
diff --git a/openmandriva-relax-ffnvcodec-ver.patch b/openmandriva-relax-ffnvcodec-ver.patch
new file mode 100644
index 0000000..a5196b0
--- /dev/null
+++ b/openmandriva-relax-ffnvcodec-ver.patch
@@ -0,0 +1,24 @@
+diff -uraN obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/dependencies.cmake omv-obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/dependencies.cmake
+--- obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/dependencies.cmake 2024-06-18 20:13:42.000000000 +0200
++++ omv-obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/dependencies.cmake 2024-06-19 17:13:12.458684469 +0200
+@@ -42,7 +42,7 @@
+ target_sources(obs-nvenc-version INTERFACE obs-nvenc-ver.h)
+ target_include_directories(obs-nvenc-version INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")
+
+- find_package(FFnvcodec 12.0.0.0...<12.2.0.0 REQUIRED)
++ find_package(FFnvcodec 12.0.0.0...<12.3.0.0 REQUIRED)
+
+ if(OS_LINUX AND NOT TARGET OBS::glad)
+ add_subdirectory("${CMAKE_SOURCE_DIR}/deps/glad" "${CMAKE_BINARY_DIR}/deps/glad")
+diff -uraN obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/legacy.cmake omv-obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/legacy.cmake
+--- obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/legacy.cmake 2024-06-18 20:13:42.000000000 +0200
++++ omv-obs-studio-30.2.0-beta4/plugins/obs-ffmpeg/cmake/legacy.cmake 2024-06-19 17:12:54.309587800 +0200
+@@ -116,7 +116,7 @@
+ target_link_libraries(obs-ffmpeg PRIVATE Libva::va Libva::drm LIBPCI::LIBPCI Libdrm::Libdrm)
+
+ if(ENABLE_NATIVE_NVENC)
+- find_package(FFnvcodec 12.0.0.0...<12.2.0.0 REQUIRED)
++ find_package(FFnvcodec 12.0.0.0...<12.3.0.0 REQUIRED)
+ target_sources(obs-ffmpeg PRIVATE obs-nvenc.c obs-nvenc.h obs-nvenc-helpers.c obs-nvenc-ver.h)
+ target_link_libraries(obs-ffmpeg PRIVATE FFnvcodec::FFnvcodec OBS::obsglad)
+ target_compile_definitions(obs-ffmpeg PRIVATE NVCODEC_AVAILABLE)