diff options
author | V <v@anomalous.eu> | 2021-06-17 20:05:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-17 14:05:26 -0400 |
commit | e8e025516256498d4217086e349e6b4b291e352e (patch) | |
tree | 3aaae5aa43ff985d848b5abe7bbefec86eb38ead /pkgs/applications/video/obs-studio | |
parent | b26545db7e07e26f2ebacf449400f5aa04ee7f29 (diff) |
obs-studio: add plugin wrapper (#125308)
* obs-studio: tidy things up a little * obs-studio: add plugin wrapper This allows users to install plugins into their OBS Studio, like so: wrapOBS { plugins = with obs-studio-plugins; [ wlrobs obs-multi-rtmp obs-gstreamer ]; } * obs-gstreamer: convert to plugin * obs-move-transition: convert to plugin * obs-multi-rtmp: convert to plugin * obs-ndi: convert to plugin * obs-v4l2sink: remove The functionality provided by this package is included in the upstream project as of version 26.1. Link: https://github.com/CatxFish/obs-v4l2sink/issues/56#issuecomment-753191690 Link: https://github.com/obsproject/obs-studio/releases/tag/26.1.0 * wlrobs: convert to plugin, unstable-2020-06-22 -> unstable-2021-05-13
Diffstat (limited to 'pkgs/applications/video/obs-studio')
13 files changed, 61 insertions, 147 deletions
diff --git a/pkgs/applications/video/obs-studio/default.nix b/pkgs/applications/video/obs-studio/default.nix index ff56fa1c0fbc6..d7784279c3155 100644 --- a/pkgs/applications/video/obs-studio/default.nix +++ b/pkgs/applications/video/obs-studio/default.nix @@ -114,13 +114,13 @@ in mkDerivation rec { ]; postInstall = '' - wrapProgram $out/bin/obs \ - --prefix "LD_LIBRARY_PATH" : "${xorg.libX11.out}/lib:${libvlc}/lib" + wrapProgram $out/bin/obs \ + --prefix "LD_LIBRARY_PATH" : "${xorg.libX11.out}/lib:${libvlc}/lib" ''; postFixup = lib.optionalString stdenv.isLinux '' - addOpenGLRunpath $out/lib/lib*.so - addOpenGLRunpath $out/lib/obs-plugins/*.so + addOpenGLRunpath $out/lib/lib*.so + addOpenGLRunpath $out/lib/obs-plugins/*.so ''; meta = with lib; { @@ -131,7 +131,7 @@ in mkDerivation rec { video content, efficiently ''; homepage = "https://obsproject.com"; - maintainers = with maintainers; [ jb55 MP2E ]; + maintainers = with maintainers; [ jb55 MP2E V ]; license = licenses.gpl2; platforms = [ "x86_64-linux" "i686-linux" ]; }; diff --git a/pkgs/applications/video/obs-studio/plugins/default.nix b/pkgs/applications/video/obs-studio/plugins/default.nix new file mode 100644 index 0000000000000..477f0efa3e09f --- /dev/null +++ b/pkgs/applications/video/obs-studio/plugins/default.nix @@ -0,0 +1,9 @@ +{ callPackage, libsForQt5 }: + +{ + obs-gstreamer = callPackage ./obs-gstreamer.nix {}; + obs-move-transition = callPackage ./obs-move-transition.nix {}; + obs-multi-rtmp = libsForQt5.callPackage ./obs-multi-rtmp.nix {}; + obs-ndi = libsForQt5.callPackage ./obs-ndi.nix {}; + wlrobs = callPackage ./wlrobs.nix {}; +} diff --git a/pkgs/applications/video/obs-studio/fix-search-path.patch b/pkgs/applications/video/obs-studio/plugins/fix-search-path.patch index 4503447ff5dc7..4503447ff5dc7 100644 --- a/pkgs/applications/video/obs-studio/fix-search-path.patch +++ b/pkgs/applications/video/obs-studio/plugins/fix-search-path.patch diff --git a/pkgs/applications/video/obs-studio/hardcode-ndi-path.patch b/pkgs/applications/video/obs-studio/plugins/hardcode-ndi-path.patch index caef96c381f27..caef96c381f27 100644 --- a/pkgs/applications/video/obs-studio/hardcode-ndi-path.patch +++ b/pkgs/applications/video/obs-studio/plugins/hardcode-ndi-path.patch diff --git a/pkgs/applications/video/obs-studio/obs-gstreamer.nix b/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix index e32ec7575b2d1..d21d78c42b2a2 100644 --- a/pkgs/applications/video/obs-studio/obs-gstreamer.nix +++ b/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix @@ -22,18 +22,6 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ pkg-config meson ninja ]; buildInputs = [ gst_all_1.gstreamermm obs-studio ]; - # obs-studio expects the shared object to be located in bin/32bit or bin/64bit - # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48 - postInstall = let - pluginPath = { - i686-linux = "bin/32bit"; - x86_64-linux = "bin/64bit"; - }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}"); - in '' - mkdir -p $out/share/obs/obs-plugins/obs-gstreamer/${pluginPath} - ln -s $out/lib/obs-plugins/obs-gstreamer.so $out/share/obs/obs-plugins/obs-gstreamer/${pluginPath} - ''; - meta = with lib; { description = "An OBS Studio source, encoder and video filter plugin to use GStreamer elements/pipelines in OBS Studio"; homepage = "https://github.com/fswoch/obs-gstreamer"; diff --git a/pkgs/applications/video/obs-studio/obs-move-transition.nix b/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix index 9a896c7320af1..befc27dd5dcac 100644 --- a/pkgs/applications/video/obs-studio/obs-move-transition.nix +++ b/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix @@ -39,18 +39,6 @@ stdenv.mkDerivation rec { substituteInPlace audio-move.c --replace '<../UI/obs-frontend-api/obs-frontend-api.h>' '<obs-frontend-api.h>' ''; - # obs-studio expects the shared object to be located in bin/32bit or bin/64bit - # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48 - postInstall = let - pluginPath = { - i686-linux = "bin/32bit"; - x86_64-linux = "bin/64bit"; - }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}"); - in '' - mkdir -p $out/share/obs/obs-plugins/move-transition/${pluginPath} - ln -s $out/lib/obs-plugins/move-transition.so $out/share/obs/obs-plugins/move-transition/${pluginPath} - ''; - meta = with lib; { description = "Plugin for OBS Studio to move source to a new position during scene transition"; homepage = "https://github.com/exeldro/obs-move-transition"; diff --git a/pkgs/applications/video/obs-studio/obs-multi-rtmp.nix b/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp.nix index f716d93a36034..0122cba0f3d80 100644 --- a/pkgs/applications/video/obs-studio/obs-multi-rtmp.nix +++ b/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp.nix @@ -20,18 +20,6 @@ stdenv.mkDerivation rec { dontWrapQtApps = true; - # obs-studio expects the shared object to be located in bin/32bit or bin/64bit - # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48 - postInstall = let - pluginPath = { - i686-linux = "bin/32bit"; - x86_64-linux = "bin/64bit"; - }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}"); - in '' - mkdir -p $out/share/obs/obs-plugins/obs-multi-rtmp/${pluginPath} - ln -s $out/lib/obs-plugins/obs-multi-rtmp.so $out/share/obs/obs-plugins/obs-multi-rtmp/${pluginPath} - ''; - meta = with lib; { homepage = "https://github.com/sorayuki/obs-multi-rtmp/"; changelog = "https://github.com/sorayuki/obs-multi-rtmp/releases/tag/${version}"; diff --git a/pkgs/applications/video/obs-studio/obs-ndi.nix b/pkgs/applications/video/obs-studio/plugins/obs-ndi.nix index b35398d65b5ca..1e2abb45a5b3d 100644 --- a/pkgs/applications/video/obs-studio/obs-ndi.nix +++ b/pkgs/applications/video/obs-studio/plugins/obs-ndi.nix @@ -1,10 +1,3 @@ -# We don't have a wrapper which can supply obs-studio plugins so you have to -# somewhat manually install this: - -# nix-env -f "<nixpkgs>" -iA obs-ndi -# mkdir -p ~/.config/obs-studio/plugins/bin -# ln -s ~/.nix-profile/lib/obs-plugins/obs-ndi.so ~/.config/obs-studio/plugins/bin/ - { lib, stdenv, fetchFromGitHub, obs-studio, cmake, qtbase, ndi }: stdenv.mkDerivation rec { diff --git a/pkgs/applications/video/obs-studio/rename-obs-move-transition-cmake.patch b/pkgs/applications/video/obs-studio/plugins/rename-obs-move-transition-cmake.patch index ed6df1d565db8..ed6df1d565db8 100644 --- a/pkgs/applications/video/obs-studio/rename-obs-move-transition-cmake.patch +++ b/pkgs/applications/video/obs-studio/plugins/rename-obs-move-transition-cmake.patch diff --git a/pkgs/applications/video/obs-studio/plugins/wlrobs.nix b/pkgs/applications/video/obs-studio/plugins/wlrobs.nix new file mode 100644 index 0000000000000..adae03036f81c --- /dev/null +++ b/pkgs/applications/video/obs-studio/plugins/wlrobs.nix @@ -0,0 +1,26 @@ +{ lib, stdenv, fetchhg +, meson, pkg-config, ninja +, wayland, obs-studio, libX11 +}: + +stdenv.mkDerivation { + pname = "wlrobs"; + version = "unstable-2021-05-13"; + + src = fetchhg { + url = "https://hg.sr.ht/~scoopta/wlrobs"; + rev = "4184a4a8ea7dc054c993efa16007f3a75b2c6f51"; + sha256 = "146xirzd3nw1sd216y406v1riky9k08b6a0j4kwxrif5zyqa3adc"; + }; + + nativeBuildInputs = [ meson pkg-config ninja ]; + buildInputs = [ wayland obs-studio libX11 ]; + + meta = with lib; { + description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors"; + homepage = "https://hg.sr.ht/~scoopta/wlrobs"; + maintainers = with maintainers; [ grahamc V ]; + license = licenses.gpl3Plus; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/applications/video/obs-studio/v4l2sink.nix b/pkgs/applications/video/obs-studio/v4l2sink.nix deleted file mode 100644 index 2716120682ea8..0000000000000 --- a/pkgs/applications/video/obs-studio/v4l2sink.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ lib -, stdenv -, fetchFromGitHub -, fetchpatch -, cmake -, qtbase -, obs-studio -}: - -stdenv.mkDerivation rec { - pname = "obs-v4l2sink"; - version = "0.1.0-12-g1ec3c8a"; - - src = fetchFromGitHub { - owner = "CatxFish"; - repo = "obs-v4l2sink"; - rev = version; - sha256 = "03ah91cm1qz26k90mfx51l0d598i9bcmw39lkikjs1msm4c9dfxx"; - }; - - nativeBuildInputs = [ cmake ]; - buildInputs = [ qtbase obs-studio ]; - - dontWrapQtApps = true; - - patches = [ - # Fixes the segfault when stopping the plugin - (fetchpatch { - url = "https://github.com/CatxFish/obs-v4l2sink/commit/6604f01796d1b84a95714730ea51a6b8ac0e450b.diff"; - sha256 = "0crcvw02dj0aqy7hnhizjdsnhiw03zmg6cbdkasxz2mrrbyc3s88"; - }) - ]; - - cmakeFlags = with lib; [ - "-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs" - ]; - - # obs-studio expects the shared object to be located in bin/32bit or bin/64bit - # https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48 - postInstall = let - pluginPath = { - i686-linux = "bin/32bit"; - x86_64-linux = "bin/64bit"; - }.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}"); - in '' - mkdir -p $out/share/obs/obs-plugins/v4l2sink/${pluginPath} - ln -s $out/lib/obs-plugins/v4l2sink.so $out/share/obs/obs-plugins/v4l2sink/${pluginPath} - ''; - - meta = with lib; { - description = "obs studio output plugin for Video4Linux2 device"; - homepage = "https://github.com/CatxFish/obs-v4l2sink"; - maintainers = with maintainers; [ colemickens peelz ]; - license = licenses.gpl2; - platforms = [ "x86_64-linux" "i686-linux" ]; - }; -} diff --git a/pkgs/applications/video/obs-studio/wlrobs.nix b/pkgs/applications/video/obs-studio/wlrobs.nix deleted file mode 100644 index 47f6ea9e5ddb4..0000000000000 --- a/pkgs/applications/video/obs-studio/wlrobs.nix +++ /dev/null @@ -1,42 +0,0 @@ -# (the following is somewhat lifted from ./linuxbrowser.nix) -# We don't have a wrapper which can supply obs-studio plugins so you have to -# somewhat manually install this: - -# nix-env -f . -iA obs-wlrobs -# mkdir -p ~/.config/obs-studio/plugins/wlrobs/bin/64bit -# ln -s ~/.nix-profile/share/obs/obs-plugins/wlrobs/bin/64bit/libwlrobs.so ~/.config/obs-studio/plugins/wlrobs/bin/64bit -{ stdenv, fetchhg, wayland, obs-studio -, meson, ninja, pkg-config, libX11 -, dmabufSupport ? false, libdrm ? null, libGL ? null, lib}: - -assert dmabufSupport -> libdrm != null && libGL != null; - -stdenv.mkDerivation { - pname = "obs-wlrobs"; - version = "20200622"; - - src = fetchhg { - url = "https://hg.sr.ht/~scoopta/wlrobs"; - rev = "1d3acaaf64049da3da9721aa8b9b47582fe0081b"; - sha256 = "0qrcf8024r4ynfjw0zx8vn59ygx9q5rb196s6nyxmy3gkv2lfxlq"; - }; - - buildInputs = [ libX11 libGL libdrm meson ninja pkg-config wayland obs-studio ]; - - installPhase = '' - mkdir -p $out/share/obs/obs-plugins/wlrobs/bin/64bit - cp ./libwlrobs.so $out/share/obs/obs-plugins/wlrobs/bin/64bit/ - ''; - - mesonFlags = [ - "-Duse_dmabuf=${lib.boolToString dmabufSupport}" - ]; - - meta = with lib; { - description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors"; - homepage = "https://hg.sr.ht/~scoopta/wlrobs"; - maintainers = with maintainers; [ grahamc ]; - license = licenses.gpl3; - platforms = [ "x86_64-linux" ]; - }; -} diff --git a/pkgs/applications/video/obs-studio/wrapper.nix b/pkgs/applications/video/obs-studio/wrapper.nix new file mode 100644 index 0000000000000..3871151bbb28d --- /dev/null +++ b/pkgs/applications/video/obs-studio/wrapper.nix @@ -0,0 +1,21 @@ +{ obs-studio, symlinkJoin, makeWrapper }: + +{ plugins ? [] }: + +symlinkJoin { + name = "wrapped-${obs-studio.name}"; + + nativeBuildInputs = [ makeWrapper ]; + paths = [ obs-studio ] ++ plugins; + + postBuild = '' + wrapProgram $out/bin/obs \ + --set OBS_PLUGINS_PATH "$out/lib/obs-plugins" \ + --set OBS_PLUGINS_DATA_PATH "$out/share/obs/obs-plugins" + ''; + + inherit (obs-studio) meta; + passthru = obs-studio.passthru // { + passthru.unwrapped = obs-studio; + }; +} |