{blackmagic-desktop-video,decklink}: init at 14.0.1a2

This commit is contained in:
Naxdy 2024-07-09 13:12:14 +02:00
parent aa82083389
commit f634371d21
No known key found for this signature in database
GPG Key ID: CC15075846BCE91B
5 changed files with 162 additions and 2 deletions

View File

@ -48,6 +48,8 @@
, nlohmann_json
, websocketpp
, asio
, decklinkSupport ? false
, blackmagic-desktop-video
, libdatachannel
, libvpl
, qrcodegencpp
@ -165,6 +167,8 @@ stdenv.mkDerivation (finalAttrs: {
xorg.libX11
libvlc
libGL
] ++ optionals decklinkSupport [
blackmagic-desktop-video
];
in ''
# Remove libcef before patchelf, otherwise it will fail

View File

@ -0,0 +1,108 @@
{ stdenv
, cacert
, curl
, runCommandLocal
, lib
, autoPatchelfHook
, libcxx
, libGL
, gcc7
}:
stdenv.mkDerivation (finalAttrs: {
pname = "blackmagic-desktop-video";
version = "14.0.1a2";
buildInputs = [
autoPatchelfHook
libcxx
libGL
gcc7.cc.lib
];
# yes, the below download function is an absolute mess.
# blame blackmagicdesign.
src =
let
# from the URL that the POST happens to, see browser console
DOWNLOADID = "d73a63095b6a4a189916fb2baa5a0ef3";
in
runCommandLocal "${finalAttrs.pname}-${lib.versions.majorMinor finalAttrs.version}-src.tar.gz"
{
outputHashMode = "recursive";
outputHashAlgo = "sha256";
outputHash = "sha256-jkKzUqfirvsVIefjWLx4NlqznXanWDtvhTsIThWFTo4=";
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
nativeBuildInputs = [ curl ];
# ENV VARS
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
inherit DOWNLOADID;
# from the URL the download page where you click the "only download" button is at
REFERID = "76801bc1d84147da9cb1a16e663ac33e";
SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}";
USERAGENT = builtins.concatStringsSep " " [
"User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})"
"AppleWebKit/537.36 (KHTML, like Gecko)"
"Chrome/77.0.3865.75"
"Safari/537.36"
];
REQJSON = builtins.toJSON {
"country" = "nl";
"downloadOnly" = true;
"platform" = "Linux";
"policy" = true;
};
} ''
RESOLVEURL=$(curl \
-s \
-H "$USERAGENT" \
-H 'Content-Type: application/json;charset=UTF-8' \
-H "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \
--data-ascii "$REQJSON" \
--compressed \
"$SITEURL")
curl \
--retry 3 --retry-delay 3 \
--compressed \
"$RESOLVEURL" \
> $out
'';
postUnpack =
let
arch = stdenv.hostPlatform.uname.processor;
in
''
tar xf Blackmagic_Desktop_Video_Linux_${lib.head (lib.splitString "a" finalAttrs.version)}/other/${arch}/desktopvideo-${finalAttrs.version}-${arch}.tar.gz
unpacked=$NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}-${stdenv.hostPlatform.uname.processor}
'';
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,share/doc,lib/systemd/system}
cp -r $unpacked/usr/share/doc/desktopvideo $out/share/doc
cp $unpacked/usr/lib/*.so $out/lib
cp $unpacked/usr/lib/systemd/system/DesktopVideoHelper.service $out/lib/systemd/system
cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper $out/bin/
substituteInPlace $out/lib/systemd/system/DesktopVideoHelper.service \
--replace-fail "/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper" "$out/bin/DesktopVideoHelper"
runHook postInstall
'';
# need to tell the DesktopVideoHelper where to find its own library
appendRunpaths = [ "${placeholder "out"}/lib" ];
meta = with lib; {
homepage = "https://www.blackmagicdesign.com/support/family/capture-and-playback";
maintainers = [ maintainers.naxdy ];
license = licenses.unfree;
description = "Supporting applications for Blackmagic Decklink. Doesn't include the desktop applications, only the helper required to make the driver work";
platforms = platforms.linux;
};
})

View File

@ -0,0 +1,49 @@
{ stdenv
, lib
, blackmagic-desktop-video
, kernel
}:
stdenv.mkDerivation (finalAttrs: {
pname = "decklink";
# the download is a horrible curl mess. we reuse it between the kernel module
# and desktop service, since the version of the two have to match anyways.
# See pkgs/by-name/bl/blackmagic-desktop-video/package.nix for more.
inherit (blackmagic-desktop-video) src version;
KERNELDIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
INSTALL_MOD_PATH = placeholder "out";
nativeBuildInputs = kernel.moduleBuildDependencies;
postUnpack = let
arch = stdenv.hostPlatform.uname.processor;
in ''
tar xf Blackmagic_Desktop_Video_Linux_${lib.head (lib.splitString "a" finalAttrs.version)}/other/${arch}/desktopvideo-${finalAttrs.version}-${arch}.tar.gz
moduleRoot=$NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}-${stdenv.hostPlatform.uname.processor}/usr/src
sourceRoot=$moduleRoot
'';
buildPhase = ''
runHook preBuild
make -C $moduleRoot/blackmagic-${finalAttrs.version} -j$NIX_BUILD_CORES
make -C $moduleRoot/blackmagic-io-${finalAttrs.version} -j$NIX_BUILD_CORES
runHook postBuild
'';
installPhase = ''
runHook preInstall
make -C $KERNELDIR M=$moduleRoot/blackmagic-${finalAttrs.version} modules_install
make -C $KERNELDIR M=$moduleRoot/blackmagic-io-${finalAttrs.version} modules_install
runHook postInstall
'';
meta = with lib; {
homepage = "https://www.blackmagicdesign.com/support/family/capture-and-playback";
maintainers = [ maintainers.naxdy ];
license = licenses.unfree;
description = "Kernel module for the Blackmagic Design Decklink cards";
sourceProvenance = with lib.sourceTypes; [ binaryFirmware ];
platforms = platforms.linux;
};
})

View File

@ -134,7 +134,6 @@ mapAliases ({
bitwarden = bitwarden-desktop; # Added 2024-02-25
bitwig-studio1 = throw "bitwig-studio1 has been removed, you can upgrade to 'bitwig-studio'"; # Added 2023-01-03
bitwig-studio2 = throw "bitwig-studio2 has been removed, you can upgrade to 'bitwig-studio'"; # Added 2023-01-03
blackmagic-desktop-video = throw "blackmagic-desktop-video has been due to being unmaintained"; # Added 2024-07-02
blender-with-packages = args:
lib.warn "blender-with-packages is deprecated in favor of blender.withPackages, e.g. `blender.withPackages(ps: [ ps.foobar ])`"
(blender.withPackages (_: args.packages)).overrideAttrs

View File

@ -343,7 +343,7 @@ in {
dddvb = callPackage ../os-specific/linux/dddvb { };
decklink = throw "The decklink kernel module has been removed due to being unmaintained"; # Module removed on 2024-07-02
decklink = callPackage ../os-specific/linux/decklink { };
digimend = callPackage ../os-specific/linux/digimend { };