From 6c2050fd9cc53cd08af85d8e516316a6e7cc5955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Sun, 11 Nov 2018 10:43:52 +0100 Subject: [PATCH 1/2] handbrake: 1.1.0 -> 1.1.2 Changes: https://github.com/HandBrake/HandBrake/releases/tag/1.1.2 https://github.com/HandBrake/HandBrake/releases/tag/1.1.1 Derivation changes: Transcoding to to MP4 was broken, failing with: Tag avc1/0x31637661 incompatible with output codec id '28' muxavformat: avformat_write_header failed! Fix this using A20-avc3-hvc1-override.patch provided by upstream. --- pkgs/applications/video/handbrake/default.nix | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/video/handbrake/default.nix b/pkgs/applications/video/handbrake/default.nix index 2f27eb83884..abd4973bbdf 100644 --- a/pkgs/applications/video/handbrake/default.nix +++ b/pkgs/applications/video/handbrake/default.nix @@ -20,21 +20,34 @@ stdenv.mkDerivation rec { # TODO: Release 1.2.0 would switch LibAV to FFmpeg. - version = "1.1.0"; + version = "1.1.2"; name = "handbrake-${version}"; src = fetchurl { url = ''https://download2.handbrake.fr/${version}/HandBrake-${version}-source.tar.bz2''; - sha256 = "1nj0ihflisxcfkmsk7fm3b5cn7cpnpg66dk2lkp2ip6qidppqbm0"; + sha256 = "0bny0hwlr55g2c69rsamv0xvwmfh1s4a582b9vq20xv5ly84m6ms"; }; patched_libav_12 = libav_12.overrideAttrs (super: { - # NOTE: 2018-04-26: HandBrake compilation (1.1.0) requires a patch of LibAV (12.3) from HandBrake team. This patch not went LibAV upstream. patches = (super.patches or []) ++ [( + # NOTE: 2018-04-26: HandBrake compilation (1.1.0) requires + # a patch of LibAV (12.3) from HandBrake team. This patch + # not went LibAV upstream. fetchurl { url = ''https://raw.githubusercontent.com/HandBrake/HandBrake/9e1f245708a157231c427c0ef9b91729d59a30e1/contrib/ffmpeg/A21-mp4-sdtp.patch''; sha256 = "14grzyvb1qbb90k31ibabnwmwnrc48ml6h2z0rjamdv83q45jq4g"; }) + # NOTE: 2018-11-11: Transcoding to MP4 can fail with: + # + # Tag avc1/0x31637661 incompatible with output codec id '28' + # muxavformat: avformat_write_header failed! + # + # Fix using Handbrake patch that is not upstream in libav. + ( + fetchurl { + url = ''https://raw.githubusercontent.com/HandBrake/HandBrake/df6c26fa261423237ee2bec0bf784c32cbfda3fa/contrib/ffmpeg/A20-avc3-hvc1-override.patch''; + sha256 = "1vijd7bmkzp3sb6zhpcpdni8fz4h13wgglnml6cz9f44j41w2c3v"; + }) ]; }); From 40f41772aa68f8bb4f04ec78cdee612ea8701259 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Mon, 12 Nov 2018 07:45:00 +0100 Subject: [PATCH 2/2] tests: handbrake: test transcoding to MKV and MP4. --- nixos/tests/all-tests.nix | 1 + nixos/tests/handbrake.nix | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 nixos/tests/handbrake.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 718a95dadd2..754a8ff20b2 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -88,6 +88,7 @@ in graphite = handleTest ./graphite.nix {}; hadoop.hdfs = handleTestOn [ "x86_64-linux" ] ./hadoop/hdfs.nix {}; hadoop.yarn = handleTestOn [ "x86_64-linux" ] ./hadoop/yarn.nix {}; + handbrake = handleTestOn ["x86_64-linux"] ./handbrake.nix {}; haproxy = handleTest ./haproxy.nix {}; #hardened = handleTest ./hardened.nix {}; # broken due useSandbox = true hibernate = handleTest ./hibernate.nix {}; diff --git a/nixos/tests/handbrake.nix b/nixos/tests/handbrake.nix new file mode 100644 index 00000000000..ae87e1f69a7 --- /dev/null +++ b/nixos/tests/handbrake.nix @@ -0,0 +1,25 @@ +import ./make-test.nix ({ pkgs, ... }: +let + # Download Big Buck Bunny example, licensed under CC Attribution 3.0. + testMkv = pkgs.fetchurl { + url = "https://github.com/Matroska-Org/matroska-test-files/blob/cf0792be144ac470c4b8052cfe19bb691993e3a2/test_files/test1.mkv?raw=true"; + sha256 = "1hfxbbgxwfkzv85pvpvx55a72qsd0hxjbm9hkl5r3590zw4s75h9"; + }; +in { + name = "handbrake"; + + meta = { + maintainers = with pkgs.stdenv.lib.maintainers; [ danieldk ]; + }; + + machine = { pkgs, ... }: { + environment.systemPackages = with pkgs; [ handbrake ]; + }; + + testScript = '' + # Test MP4 and MKV transcoding. Since this is a short clip, transcoding typically + # only takes a few seconds. + $machine->succeed("HandBrakeCLI -i ${testMkv} -o test.mp4 -e x264 -q 20 -B 160"); + $machine->succeed("HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160"); + ''; +})