Skip to content

Comments

x265: build a single shared library for all bit-depths#92052

Merged
FRidh merged 1 commit intoNixOS:stagingfrom
dominikh:x265-multibit
Aug 15, 2020
Merged

x265: build a single shared library for all bit-depths#92052
FRidh merged 1 commit intoNixOS:stagingfrom
dominikh:x265-multibit

Conversation

@dominikh
Copy link
Contributor

@dominikh dominikh commented Jul 2, 2020

This builds the 10-bit and 12-bit versions of x265 as static
libraries, which then get linked into the 8-bit dynamic library and
executable. This causes x265 to default to 8-bit, but make 10- and
12-bit available to callers that use introspection, such as ffmpeg.

$ x265 -V
x265 [info]: HEVC encoder version 3.2
x265 [info]: build info [Linux][GCC 9.3.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2

$ ffmpeg -h encoder=libx265
[...]
    Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p gbrp yuv420p10le yuv422p10le yuv444p10le gbrp10le yuv420p12le yuv422p12le yuv444p12le gbrp12le gray gray10le gray12le

Inspired by @codyopel's comment on #80405.

Motivation for this change
Things done
  • Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
  • Built on platform(s)
    • NixOS
    • macOS
    • other Linux distributions
  • Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
  • Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
  • Tested execution of all binary files (usually in ./result/bin/)
  • Determined the impact on package closure size (by running nix path-info -S before and after)
  • Ensured that relevant documentation is up to date
  • Fits CONTRIBUTING.md.

This builds the 10-bit and 12-bit versions of x265 as static
libraries, which then get linked into the 8-bit dynamic library and
executable. This causes x265 to default to 8-bit, but make 10- and
12-bit available to callers that use introspection, such as ffmpeg.

    $ x265 -V
    x265 [info]: HEVC encoder version 3.2
    x265 [info]: build info [Linux][GCC 9.3.0][64 bit] 8bit+10bit+12bit
    x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2

    $ ffmpeg -h encoder=libx265
    [...]
        Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p gbrp yuv420p10le yuv422p10le yuv444p10le gbrp10le yuv420p12le yuv422p12le yuv444p12le gbrp12le gray gray10le gray12le

Inspired by @codyopel's comment on NixOS#80405.
@ofborg ofborg bot requested a review from codyopel July 2, 2020 14:48
@ofborg ofborg bot added 10.rebuild-darwin: 101-500 This PR causes between 101 and 500 packages to rebuild on Darwin. 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-linux: 501-1000 This PR causes many rebuilds on Linux and should normally target the staging branches. labels Jul 2, 2020
@mdlayher
Copy link
Member

mdlayher commented Jul 2, 2020

/marvin opt-in

@mdlayher
Copy link
Member

mdlayher commented Jul 2, 2020

For anyone reading, I'm running nixpkgs-review pr 92052 locally but it's taking a very long time to pull all the reverse dependencies and such. I'll share another update when it's done.

@mdlayher
Copy link
Member

mdlayher commented Jul 2, 2020

I let it run for about 3 hours and it noted 28 package failures before starting compilation on really big packages like Blender. I don't think my desktop is beefy enough to run this whole workload: https://gist.github.com/mdlayher/7e4cc832f5cc0f2ec7e6934bd74a8c0f

@mdlayher
Copy link
Member

mdlayher commented Jul 2, 2020

I can confirm that this also works locally on my machine, but I'm out of my depth as far as diagnosing any possible reverse dependency issues:

✔ ~/src/github.com/nixos/nixpkgs [:bdd65f3f69d|✔] 
14:21 $ nix run -f default.nix x265
[3 built, 5 copied (34.5 MiB), 7.9 MiB DL]
✔ ~/src/github.com/nixos/nixpkgs [:bdd65f3f69d|✔] 
14:25 $ nix-build -A x265
/nix/store/16lp8nyar1rwx7iz0flvk0kybcnnwwp0-x265-3.2
✘-1 ~/src/github.com/nixos/nixpkgs [:bdd65f3f69d|✔] 
14:25 $ ./result/bin/x265 -V
x265 [info]: HEVC encoder version 3.2
x265 [info]: build info [Linux][GCC 9.3.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2

@FRidh FRidh changed the base branch from master to staging August 15, 2020 06:58
@FRidh FRidh merged commit 90cd27e into NixOS:staging Aug 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

10.rebuild-darwin: 101-500 This PR causes between 101 and 500 packages to rebuild on Darwin. 10.rebuild-linux: 501-1000 This PR causes many rebuilds on Linux and should normally target the staging branches. 10.rebuild-linux: 501+ This PR causes many rebuilds on Linux and should normally target the staging branches.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants