From eeab158f685bb39aa694ca7c39ad4c19c3dddcb6 Mon Sep 17 00:00:00 2001 From: Raboneko <119771935+raboneko@users.noreply.github.com> Date: Sun, 31 May 2026 22:56:49 -0500 Subject: [PATCH] chore(x265): Update build (#12773) (#12776) (cherry picked from commit 59ccf2c5bca532840c807f8aef5fe9c4a4c24466) Co-authored-by: Gilver --- anda/multimedia/x265/update.rhai | 7 +- anda/multimedia/x265/x265-HandBrake.patch | 264 ++++++++++++ .../x265/x265-fix-aarch64-build.patch | 11 + anda/multimedia/x265/x265-gcc15.patch | 11 + .../x265/x265-high-bit-depth-soname.patch | 15 +- anda/multimedia/x265/x265-pic.patch | 11 - .../x265/x265-pkgconfig_path_fix.patch | 11 - .../x265/x265-sei-length-crash-fix.patch | 29 -- anda/multimedia/x265/x265-vmaf.patch | 26 ++ anda/multimedia/x265/x265.spec | 384 ++++++------------ 10 files changed, 439 insertions(+), 330 deletions(-) create mode 100644 anda/multimedia/x265/x265-HandBrake.patch create mode 100644 anda/multimedia/x265/x265-fix-aarch64-build.patch create mode 100644 anda/multimedia/x265/x265-gcc15.patch delete mode 100644 anda/multimedia/x265/x265-pic.patch delete mode 100644 anda/multimedia/x265/x265-pkgconfig_path_fix.patch delete mode 100644 anda/multimedia/x265/x265-sei-length-crash-fix.patch create mode 100644 anda/multimedia/x265/x265-vmaf.patch diff --git a/anda/multimedia/x265/update.rhai b/anda/multimedia/x265/update.rhai index 291bc4d5af..b9af9b10ce 100644 --- a/anda/multimedia/x265/update.rhai +++ b/anda/multimedia/x265/update.rhai @@ -1,5 +1,10 @@ // HACK: use RegEx to parse HTML! let vers = find_all(` + +diff -Naur x265_4.2.old/source/CMakeLists.txt x265_4.2/source/CMakeLists.txt +--- x265_4.2.old/source/CMakeLists.txt 2026-05-22 09:31:41.511324918 +0200 ++++ x265_4.2/source/CMakeLists.txt 2026-05-22 09:31:41.564187955 +0200 +@@ -890,6 +890,9 @@ + elseif(ARM64 OR CROSS_COMPILE_ARM64) + # compile ARM64 arch asm files here + enable_language(ASM) ++ if(APPLE) ++ set(ARM_ARGS ${ARM_ARGS} -arch ${CMAKE_OSX_ARCHITECTURES}) ++ endif() + foreach(ASM ${ARM_ASMS}) + set(ASM_SRC ${CMAKE_CURRENT_SOURCE_DIR}/common/aarch64/${ASM}) + list(APPEND ASM_SRCS ${ASM_SRC}) +diff -Naur x265_4.2.old/source/common/frame.cpp x265_4.2/source/common/frame.cpp +--- x265_4.2.old/source/common/frame.cpp 2026-05-22 09:31:41.405483833 +0200 ++++ x265_4.2/source/common/frame.cpp 2026-05-22 09:31:41.561815253 +0200 +@@ -378,6 +378,11 @@ + delete[] m_userSEI.payloads; + } + ++ if (m_rpu.payloadSize) ++ { ++ delete[] m_rpu.payload; ++ } ++ + if (m_ctuInfo) + { + uint32_t widthInCU = (m_param->sourceWidth + m_param->maxCUSize - 1) >> m_param->maxLog2CUSize; +diff -Naur x265_4.2.old/source/common/param.cpp x265_4.2/source/common/param.cpp +--- x265_4.2.old/source/common/param.cpp 2026-05-22 09:31:41.406483841 +0200 ++++ x265_4.2/source/common/param.cpp 2026-05-22 09:31:41.566608597 +0200 +@@ -408,6 +408,7 @@ + param->preferredTransferCharacteristics = -1; + param->pictureStructure = -1; + param->bEmitCLL = 1; ++ param->bEmitAmbientViewingEnvironment = 0; + + param->bEnableFrameDuplication = 0; + param->dupThreshold = 70; +@@ -1815,10 +1816,10 @@ + " smpte170m, smpte240m, linear, log100, log316, iec61966-2-4, bt1361e," + " iec61966-2-1, bt2020-10, bt2020-12, smpte-st-2084, smpte-st-428 or arib-std-b67"); + CHECK(param->vui.matrixCoeffs < 0 +- || param->vui.matrixCoeffs > 15 ++ || param->vui.matrixCoeffs > 17 + || param->vui.matrixCoeffs == 3, + "Matrix Coefficients must be unknown, bt709, fcc, bt470bg, smpte170m," +- " smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte-st-2085, chroma-nc, chroma-c, ictcp or ipt-pq-c2"); ++ " smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte-st-2085, chroma-nc, chroma-c, ictcp, ipt-pq-c2, ycgco-re, or ycgco-ro"); + CHECK(param->vui.chromaSampleLocTypeTopField < 0 + || param->vui.chromaSampleLocTypeTopField > 5, + "Chroma Sample Location Type Top Field must be 0-5"); +@@ -1980,6 +1981,7 @@ + || param->bEmitIDRRecoverySEI + || !!param->interlaceMode + || param->preferredTransferCharacteristics > 1 ++ || param->bEmitAmbientViewingEnvironment + || strlen(param->toneMapFile) + || strlen(param->naluFile)); + +@@ -2941,6 +2943,10 @@ + dst->bEmitCLL = src->bEmitCLL; + dst->maxCLL = src->maxCLL; + dst->maxFALL = src->maxFALL; ++ dst->ambientIlluminance = src->ambientIlluminance; ++ dst->ambientLightX = src->ambientLightX; ++ dst->ambientLightY = src->ambientLightY; ++ dst->bEmitAmbientViewingEnvironment = src->bEmitAmbientViewingEnvironment; + dst->log2MaxPocLsb = src->log2MaxPocLsb; + dst->bEmitVUIHRDInfo = src->bEmitVUIHRDInfo; + dst->bEmitVUITimingInfo = src->bEmitVUITimingInfo; +diff -Naur x265_4.2.old/source/common/threadpool.cpp x265_4.2/source/common/threadpool.cpp +--- x265_4.2.old/source/common/threadpool.cpp 2026-05-22 09:31:41.414483910 +0200 ++++ x265_4.2/source/common/threadpool.cpp 2026-05-22 09:31:41.556420957 +0200 +@@ -125,12 +125,6 @@ + { + THREAD_NAME("Worker", m_id); + +-#if _WIN32 +- SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL); +-#else +- __attribute__((unused)) int val = nice(10); +-#endif +- + m_pool.setCurrentThreadAffinity(); + + sleepbitmap_t idBit = (sleepbitmap_t)1 << m_id; +@@ -835,10 +829,16 @@ + else if (cpuCount >= 32) + return (p->sourceHeight > 2000) ? 6 : 5; + else if (cpuCount >= 16) +- return 4; ++#if MACOS && X265_ARCH_ARM64 ++ return 16; ++#else ++ return 4; ++#endif + else if (cpuCount >= 8) + #if _WIN32 && X265_ARCH_ARM64 + return cpuCount; ++#elif MACOS && X265_ARCH_ARM64 ++ return 8; + #else + return 3; + #endif +diff -Naur x265_4.2.old/source/encoder/encoder.cpp x265_4.2/source/encoder/encoder.cpp +--- x265_4.2.old/source/encoder/encoder.cpp 2026-05-22 09:31:41.432484066 +0200 ++++ x265_4.2/source/encoder/encoder.cpp 2026-05-22 09:31:41.562115269 +0200 +@@ -1768,11 +1768,20 @@ + } + copyUserSEIMessages(inFrame[0], inputPic[0]); + +- /*Copy Dolby Vision RPU from inputPic to frame*/ ++ /* Copy Dolby Vision RPU from inputPic to frame. */ ++ if (inFrame[0]->m_rpu.payload && inFrame[0]->m_rpu.payloadSize < inputPic[0]->rpu.payloadSize) ++ { ++ delete[] inFrame[0]->m_rpu.payload; ++ inFrame[0]->m_rpu.payload = NULL; ++ } ++ + if (inputPic[0]->rpu.payloadSize) + { ++ if (inFrame[0]->m_rpu.payload == NULL) ++ { ++ inFrame[0]->m_rpu.payload = new uint8_t[inputPic[0]->rpu.payloadSize]; ++ } + inFrame[0]->m_rpu.payloadSize = inputPic[0]->rpu.payloadSize; +- inFrame[0]->m_rpu.payload = new uint8_t[inputPic[0]->rpu.payloadSize]; + memcpy(inFrame[0]->m_rpu.payload, inputPic[0]->rpu.payload, inputPic[0]->rpu.payloadSize); + } + +@@ -3475,6 +3484,15 @@ + } + } + ++ if (m_param->bEmitAmbientViewingEnvironment) ++ { ++ SEIAmbientViewingEnvironment ambientsei; ++ ambientsei.ambientIlluminance = m_param->ambientIlluminance; ++ ambientsei.ambientLightX = m_param->ambientLightX; ++ ambientsei.ambientLightY = m_param->ambientLightY; ++ ambientsei.writeSEImessages(bs, m_sps, NAL_UNIT_PREFIX_SEI, list, m_param->bSingleSeiNal); ++ } ++ + if (m_param->bEmitInfoSEI) + { + char *opts = x265_param2string(m_param, m_sps.conformanceWindow.rightOffset, m_sps.conformanceWindow.bottomOffset); +diff -Naur x265_4.2.old/source/encoder/entropy.cpp x265_4.2/source/encoder/entropy.cpp +--- x265_4.2.old/source/encoder/entropy.cpp 2026-05-22 09:31:41.433484074 +0200 ++++ x265_4.2/source/encoder/entropy.cpp 2026-05-22 09:31:41.565040953 +0200 +@@ -2104,8 +2104,9 @@ + void Entropy::codeMvd(const CUData& cu, uint32_t absPartIdx, int list) + { + const MV& mvd = cu.m_mvd[list][absPartIdx]; +- const int hor = mvd.x; +- const int ver = mvd.y; ++ // to ensure the mvdLX is in the range of [-2^15, 2^15-1] ++ const int16_t hor = (int16_t)mvd.x; ++ const int16_t ver = (int16_t)mvd.y; + + encodeBin(hor != 0 ? 1 : 0, m_contextState[OFF_MV_RES_CTX]); + encodeBin(ver != 0 ? 1 : 0, m_contextState[OFF_MV_RES_CTX]); +diff -Naur x265_4.2.old/source/encoder/sei.h x265_4.2/source/encoder/sei.h +--- x265_4.2.old/source/encoder/sei.h 2026-05-22 09:31:41.437484109 +0200 ++++ x265_4.2/source/encoder/sei.h 2026-05-22 09:31:41.558216982 +0200 +@@ -726,6 +726,25 @@ + } + }; + ++class SEIAmbientViewingEnvironment : public SEI ++{ ++public: ++ SEIAmbientViewingEnvironment() ++ { ++ m_payloadType = AMBIENT_VIEWING_ENVIRONMENT; ++ m_payloadSize = 8; ++ } ++ uint32_t ambientIlluminance; ++ uint16_t ambientLightX; ++ uint16_t ambientLightY; ++ void writeSEI(const SPS&) ++ { ++ WRITE_CODE(ambientIlluminance, 32, "ambient_illuminance"); ++ WRITE_CODE(ambientLightX, 16, "ambient_light_x"); ++ WRITE_CODE(ambientLightY, 16, "ambient_light_y"); ++ } ++}; ++ + class SEIDecodedPictureHash : public SEI + { + public: +diff -Naur x265_4.2.old/source/x265cli.cpp x265_4.2/source/x265cli.cpp +--- x265_4.2.old/source/x265cli.cpp 2026-05-22 09:31:41.443484161 +0200 ++++ x265_4.2/source/x265cli.cpp 2026-05-22 09:31:41.567013470 +0200 +@@ -328,7 +328,7 @@ + H0(" smpte240m, linear, log100, log316, iec61966-2-4, bt1361e, iec61966-2-1,\n"); + H0(" bt2020-10, bt2020-12, smpte2084, smpte428, arib-std-b67. Default unknown\n"); + H1(" --colormatrix Specify color matrix setting from unknown, bt709, fcc, bt470bg, smpte170m,\n"); +- H1(" smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte2085, chroma-derived-nc, chroma-derived-c, ictcp, ipt-pq-c2. Default unknown\n"); ++ H1(" smpte240m, gbr, ycgco, bt2020nc, bt2020c, smpte2085, chroma-derived-nc, chroma-derived-c, ictcp, ipt-pq-c2, ycgco-re, ycgco-ro. Default unknown\n"); + H1(" --chromaloc Specify chroma sample location (0 to 5). Default of %d\n", param->vui.chromaSampleLocTypeTopField); + H0(" --master-display SMPTE ST 2086 master display color volume info SEI (HDR)\n"); + H0(" format: G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)\n"); +@@ -1508,4 +1508,4 @@ + + #ifdef __cplusplus + } +-#endif +\ No newline at end of file ++#endif +diff -Naur x265_4.2.old/source/x265.h x265_4.2/source/x265.h +--- x265_4.2.old/source/x265.h 2026-05-22 09:31:41.443484161 +0200 ++++ x265_4.2/source/x265.h 2026-05-22 09:31:41.566832268 +0200 +@@ -378,6 +378,7 @@ + MASTERING_DISPLAY_INFO = 137, + CONTENT_LIGHT_LEVEL_INFO = 144, + ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147, ++ AMBIENT_VIEWING_ENVIRONMENT = 148, + ALPHA_CHANNEL_INFO = 165, + THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO = 176, + MULTIVIEW_SCENE_INFO = 178, +@@ -753,7 +754,7 @@ + "log316", "iec61966-2-4", "bt1361e", "iec61966-2-1", "bt2020-10", "bt2020-12", + "smpte2084", "smpte428", "arib-std-b67", 0 }; + static const char * const x265_colmatrix_names[] = { "gbr", "bt709", "unknown", "", "fcc", "bt470bg", "smpte170m", "smpte240m", +- "ycgco", "bt2020nc", "bt2020c", "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ictcp", "ipt-pq-c2", 0 }; ++ "ycgco", "bt2020nc", "bt2020c", "smpte2085", "chroma-derived-nc", "chroma-derived-c", "ictcp", "ipt-pq-c2", "ycgco-re", "ycgco-ro", 0 }; + static const char * const x265_sar_names[] = { "unknown", "1:1", "12:11", "10:11", "16:11", "40:33", "24:11", "20:11", + "32:11", "80:33", "18:11", "15:11", "64:33", "160:99", "4:3", "3:2", "2:1", 0 }; + static const char * const x265_interlace_names[] = { "prog", "tff", "bff", 0 }; +@@ -1978,6 +1979,11 @@ + * value to that value. */ + uint16_t maxLuma; + ++ /* ISO/IEC 23008-2:2017, D.2.39 ambient viewing environment SEI message */ ++ uint32_t ambientIlluminance; ++ uint16_t ambientLightX; ++ uint16_t ambientLightY; ++ + /* Maximum of the picture order count */ + int log2MaxPocLsb; + +@@ -2189,6 +2195,9 @@ + /*Emit content light level info SEI*/ + int bEmitCLL; + ++ /* Emit ambient viewing environment SEI */ ++ int bEmitAmbientViewingEnvironment; ++ + /* + * Signals picture structure SEI timing message for every frame + * picture structure 7 is signalled for frame doubling diff --git a/anda/multimedia/x265/x265-fix-aarch64-build.patch b/anda/multimedia/x265/x265-fix-aarch64-build.patch new file mode 100644 index 0000000000..76eb030e7e --- /dev/null +++ b/anda/multimedia/x265/x265-fix-aarch64-build.patch @@ -0,0 +1,11 @@ +diff -Naur x265_4.2.old/source/common/aarch64/asm-primitives.cpp x265_4.2/source/common/aarch64/asm-primitives.cpp +--- x265_4.2.old/source/common/aarch64/asm-primitives.cpp 2026-05-22 09:31:41.396956906 +0200 ++++ x265_4.2/source/common/aarch64/asm-primitives.cpp 2026-05-22 09:31:41.512336554 +0200 +@@ -31,6 +31,7 @@ + + extern "C" { + #include "fun-decls.h" ++#include "../arm/ipfilter8.h" + } + + #define ALL_LUMA_TU_TYPED(prim, fncdef, fname, cpu) \ diff --git a/anda/multimedia/x265/x265-gcc15.patch b/anda/multimedia/x265/x265-gcc15.patch new file mode 100644 index 0000000000..9f54889414 --- /dev/null +++ b/anda/multimedia/x265/x265-gcc15.patch @@ -0,0 +1,11 @@ +diff -Naur x265_4.2.old/source/dynamicHDR10/json11/json11.cpp x265_4.2/source/dynamicHDR10/json11/json11.cpp +--- x265_4.2.old/source/dynamicHDR10/json11/json11.cpp 2026-05-22 09:31:41.430924883 +0200 ++++ x265_4.2/source/dynamicHDR10/json11/json11.cpp 2026-05-22 09:31:41.531899433 +0200 +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + + #if _MSC_VER + #pragma warning(disable: 4510) //const member cannot be default initialized diff --git a/anda/multimedia/x265/x265-high-bit-depth-soname.patch b/anda/multimedia/x265/x265-high-bit-depth-soname.patch index 5b1e5ed6b8..540eab3dca 100644 --- a/anda/multimedia/x265/x265-high-bit-depth-soname.patch +++ b/anda/multimedia/x265/x265-high-bit-depth-soname.patch @@ -1,6 +1,7 @@ ---- a/source/CMakeLists.txt -+++ b/source/CMakeLists.txt -@@ -611,7 +611,15 @@ +diff -Naur x265_4.2.old/source/CMakeLists.txt x265_4.2/source/CMakeLists.txt +--- x265_4.2.old/source/CMakeLists.txt 2026-05-22 09:31:41.395284685 +0200 ++++ x265_4.2/source/CMakeLists.txt 2026-05-22 09:31:41.446248583 +0200 +@@ -1075,7 +1075,15 @@ if(MSVC) set_target_properties(x265-shared PROPERTIES OUTPUT_NAME libx265) else() @@ -17,9 +18,10 @@ endif() if(UNIX) set_target_properties(x265-shared PROPERTIES VERSION ${X265_BUILD}) ---- a/source/encoder/api.cpp -+++ b/source/encoder/api.cpp -@@ -704,7 +704,7 @@ +diff -Naur x265_4.2.old/source/encoder/api.cpp x265_4.2/source/encoder/api.cpp +--- x265_4.2.old/source/encoder/api.cpp 2026-05-22 09:31:41.431540093 +0200 ++++ x265_4.2/source/encoder/api.cpp 2026-05-22 09:31:41.446517920 +0200 +@@ -1119,7 +1119,7 @@ #define ext ".dylib" #else #include @@ -28,4 +30,3 @@ #endif #if defined(__GNUC__) && __GNUC__ >= 8 #pragma GCC diagnostic ignored "-Wcast-function-type" - diff --git a/anda/multimedia/x265/x265-pic.patch b/anda/multimedia/x265/x265-pic.patch deleted file mode 100644 index a047ad15a2..0000000000 --- a/anda/multimedia/x265/x265-pic.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/source/CMakeLists.txt -+++ b/source/CMakeLists.txt -@@ -212,7 +212,7 @@ - add_definitions(-std=gnu++98) - endif() - if(ENABLE_PIC) -- add_definitions(-fPIC) -+ add_definitions(-fPIC -DPIC) - endif(ENABLE_PIC) - if(NATIVE_BUILD) - if(INTEL_CXX) diff --git a/anda/multimedia/x265/x265-pkgconfig_path_fix.patch b/anda/multimedia/x265/x265-pkgconfig_path_fix.patch deleted file mode 100644 index 5d958f3e75..0000000000 --- a/anda/multimedia/x265/x265-pkgconfig_path_fix.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/source/x265.pc.in -+++ b/source/x265.pc.in -@@ -1,6 +1,6 @@ - prefix=@CMAKE_INSTALL_PREFIX@ - exec_prefix=${prefix} --libdir=${exec_prefix}/@LIB_INSTALL_DIR@ -+libdir=@LIB_INSTALL_DIR@ - includedir=${prefix}/include - - Name: @CMAKE_PROJECT_NAME@ - diff --git a/anda/multimedia/x265/x265-sei-length-crash-fix.patch b/anda/multimedia/x265/x265-sei-length-crash-fix.patch deleted file mode 100644 index 87c6d49544..0000000000 --- a/anda/multimedia/x265/x265-sei-length-crash-fix.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 8454caf458c5f5d20cce711ff8ea8de55ec1ae50 Mon Sep 17 00:00:00 2001 -From: harlanc -Date: Thu, 1 Dec 2022 07:46:13 +0000 -Subject: [PATCH] fix crash when SEI length is variable - ---- - source/encoder/encoder.cpp | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp -index 0fea6553c..5a3fcafc7 100644 ---- a/source/encoder/encoder.cpp -+++ b/source/encoder/encoder.cpp -@@ -1103,6 +1103,12 @@ void Encoder::copyUserSEIMessages(Frame *frame, const x265_picture* pic_in) - input = seiMsg; - else - input = pic_in->userSEI.payloads[i]; -+ -+ if (frame->m_userSEI.payloads[i].payload && (frame->m_userSEI.payloads[i].payloadSize < input.payloadSize)) -+ { -+ delete[] frame->m_userSEI.payloads[i].payload; -+ frame->m_userSEI.payloads[i].payload = NULL; -+ } - - if (!frame->m_userSEI.payloads[i].payload) - frame->m_userSEI.payloads[i].payload = new uint8_t[input.payloadSize]; --- -2.45.0 - diff --git a/anda/multimedia/x265/x265-vmaf.patch b/anda/multimedia/x265/x265-vmaf.patch new file mode 100644 index 0000000000..74b09e96be --- /dev/null +++ b/anda/multimedia/x265/x265-vmaf.patch @@ -0,0 +1,26 @@ +diff -Naur x265_4.2.old/source/CMakeLists.txt x265_4.2/source/CMakeLists.txt +--- x265_4.2.old/source/CMakeLists.txt 2026-05-22 09:31:41.492277260 +0200 ++++ x265_4.2/source/CMakeLists.txt 2026-05-22 09:31:41.494071992 +0200 +@@ -178,6 +178,7 @@ + option(ENABLE_LIBVMAF "Enable VMAF" OFF) + if(ENABLE_LIBVMAF) + add_definitions(-DENABLE_LIBVMAF) ++ include_directories(${VMAF_INCLUDE_DIR}) + endif() + if(X64) + option(ENABLE_CET "Enable Control-flow Enforcement" OFF) +@@ -1068,10 +1069,13 @@ + if(EXTRA_LIB) + target_link_libraries(x265-shared ${EXTRA_LIB}) + endif() +- target_link_libraries(x265-shared ${PLATFORM_LIBS}) ++ target_link_libraries(x265-shared ${PLATFORM_LIBS}) + if(SVTHEVC_FOUND) + target_link_libraries(x265-shared ${SVT_HEVC_LIBRARY}) + endif(SVTHEVC_FOUND) ++ if(ENABLE_LIBVMAF) ++ target_link_libraries(x265-shared ${VMAF}) ++ endif(ENABLE_LIBVMAF) + if(MSVC) + set_target_properties(x265-shared PROPERTIES OUTPUT_NAME libx265) + else() diff --git a/anda/multimedia/x265/x265.spec b/anda/multimedia/x265/x265.spec index fb88be98f5..3a32cbf1f0 100644 --- a/anda/multimedia/x265/x265.spec +++ b/anda/multimedia/x265/x265.spec @@ -1,41 +1,39 @@ -%global build_cxxflags %{__build_flags_lang_cxx} %{?_distro_extra_cxxflags} -include %_includedir/c++/*/cstdint +%global api_version 216 -# Use old cmake macro -%global __cmake_in_source_build 1 - -%global terrasrc_commit b018f3e14bd28f5b17c22446328c6decf9ce57a5 - -%global _so_version 212 +%ifarch %{ix86} +%global _pkg_extra_ldflags "-Wl,-z,notext" +%endif Summary: H.265/HEVC encoder Name: x265 Version: 4.2 Release: 1%{?dist} +Epoch: 1 URL: http://x265.org/ -# source/Lib/TLibCommon - BSD -# source/Lib/TLibEncoder - BSD -# everything else - GPLv2+ -License: GPLv2+ and BSD +License: GPL-2.0-or-later + Source0: https://bitbucket.org/multicoreware/%{name}_git/downloads/%{name}_%{version}.tar.gz +Patch0: %{name}-high-bit-depth-soname.patch +Patch1: %{name}-vmaf.patch +Patch2: %{name}-fix-aarch64-build.patch +Patch3: %{name}-gcc15.patch +# https://github.com/HandBrake/HandBrake/tree/2f464fcf93d411ebdd969b39d67739ed658c5e58 +# Except: +# contrib/x265/A06-Update-version-strings.patch +# contrib/x265/A08-Fix-inconsistent-bitrate-in-second-pass.patch +Patch4: %{name}-HandBrake.patch -# fix building as PIC -Patch0: https://raw.githubusercontent.com/terrapkg/pkg-x265/%terrasrc_commit/x265-pic.patch -Patch1: https://raw.githubusercontent.com/terrapkg/pkg-x265/%terrasrc_commit/x265-high-bit-depth-soname.patch -Patch2: https://raw.githubusercontent.com/terrapkg/pkg-x265/%terrasrc_commit/x265-pkgconfig_path_fix.patch -# https://bitbucket.org/multicoreware/x265_git/pull-requests/10 -Patch3: https://bitbucket.org/harlancc/x265_git/commits/8454caf458c5f5d20cce711ff8ea8de55ec1ae50/raw#/x265-sei-length-crash-fix.patch - -BuildRequires: gcc-c++ -BuildRequires: libstdc++-devel -BuildRequires: git BuildRequires: cmake -%{?el7:BuildRequires: epel-rpm-macros} -BuildRequires: nasm -BuildRequires: ninja-build - -%ifnarch armv7hl armv7hnl s390 s390x -BuildRequires: numactl-devel +BuildRequires: gcc-c++ +%ifnarch %{ix86} +BuildRequires: nasm >= 2.13 %endif +BuildRequires: numactl-devel +%ifarch x86_64 +BuildRequires: libvmaf-devel +%endif + +Packager: Terra Packaging Team %description The primary objective of x265 is to become the best H.265/HEVC encoder @@ -56,7 +54,7 @@ This package contains the shared library. %package devel Summary: H.265/HEVC encoder library development files -Requires: %{name}-libs%{?_isa} = %{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} %description devel The primary objective of x265 is to become the best H.265/HEVC encoder @@ -68,282 +66,126 @@ This package contains the shared library development files. %prep %autosetup -p1 -n %{name}_%{version} -%build +sed -i -e 's|libdir=${exec_prefix}/@LIB_INSTALL_DIR@|libdir=@LIB_INSTALL_DIR@|g' source/x265.pc.in + +%conf # High depth libraries (from source/h265.h): -# If the requested bitDepth is not supported by the linked libx265, -# it will attempt to dynamically bind x265_api_get() from a shared -# library with an appropriate name: +# If the requested bitDepth is not supported by the linked libx265, it will +# attempt to dynamically bind from a shared library with an appropriate name: # 8bit: libx265_main.so # 10bit: libx265_main10.so +# 12bit: libx265_main12.so +# +# Trying to link 10/12 bits statically inside the shared library (as per +# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=x265-hg#n45) makes the +# library not strippable. -build() { -%cmake -Wno-dev -G "Ninja" \ - -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON \ - -DCMAKE_SKIP_RPATH:BOOL=YES \ - -DENABLE_PIC:BOOL=ON \ - -DENABLE_SHARED=ON \ - -DENABLE_TESTS:BOOL=ON \ - -DENABLE_HDR10_PLUS=YES \ - -DCMAKE_ASM_NASM_FLAGS=-w-macro-params-legacy \ - $* \ - ../source -%cmake_build +# Setting GIT_ARCHETYPE to 1 is like using git as a build dependency: +configure_cmake() { +%cmake -G "Unix Makefiles" \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_SKIP_RPATH=ON \ + -DENABLE_ALPHA=ON \ + -DENABLE_ASSEMBLY=ON \ + -DENABLE_HDR10_PLUS=ON \ + -DENABLE_MULTIVIEW=ON \ + -DENABLE_PIC=ON \ + -DENABLE_SCC_EXT=ON \ + -DENABLE_SHARED=ON \ + -DGIT_ARCHETYPE="1" \ +%ifarch x86_64 + -DENABLE_LIBVMAF=ON \ + -DVMAF_INCLUDE_DIR=%{_includedir}/libvmaf \ +%endif +%ifarch %{ix86} + -DENABLE_ASSEMBLY=OFF \ +%endif + $* \ + ../source } -# High depth 10/12 bit libraries are supported only on 64 bit. They require -# disabled AltiVec instructions for building on ppc64/ppc64le. -%ifarch x86_64 aarch64 ppc64 ppc64le -mkdir 10bit; pushd 10bit - build \ +%ifnarch %{ix86} +# 10/12 bit libraries are supported only on 64 bit +mkdir 12bit && pushd 12bit + configure_cmake \ -DENABLE_CLI=OFF \ - -DENABLE_ALTIVEC=OFF \ - -DHIGH_BIT_DEPTH=ON -popd - -mkdir 12bit; pushd 12bit - build \ - -DENABLE_CLI=OFF \ - -DENABLE_ALTIVEC=OFF \ -DHIGH_BIT_DEPTH=ON \ -DMAIN12=ON popd + +mkdir 10bit && pushd 10bit + configure_cmake \ + -DENABLE_CLI=OFF \ + -DHIGH_BIT_DEPTH=ON +popd %endif -# 8 bit base library + encoder -mkdir 8bit; pushd 8bit - build +# 8 bit + dynamicHDR CLI +# TestBench dlopens the appropriate x265 library +mkdir 8bit && pushd 8bit + configure_cmake \ + -DENABLE_CLI=ON \ + -DENABLE_TESTS=ON +popd + +%build +%ifnarch %{ix86} +pushd 12bit +%cmake_build +popd + +pushd 10bit +%cmake_build +popd +%endif + +pushd 8bit +%cmake_build popd %install for i in 8 10 12; do - if [ -d ${i}bit ]; then - pushd ${i}bit - %cmake_install - # Remove unversioned library, should not be linked to - rm -f %{buildroot}%{_libdir}/libx265_main${i}.so - popd - fi + if [ -d ${i}bit ]; then + pushd ${i}bit + %cmake_install + rm -f %{buildroot}%{_libdir}/libx265_main${i}.so + popd + fi done find %{buildroot} -name "*.a" -delete %check for i in 8 10 12; do - if [ -d ${i}bit ]; then - pushd ${i}bit - test/TestBench || : - popd - fi + if [ -d ${i}bit ]; then + pushd ${i}bit + test/TestBench || : + popd + fi done -%ldconfig_scriptlets libs - %files -%{_bindir}/x265 +%doc readme.rst +%license COPYING +%{_bindir}/%{name} %files libs %license COPYING %{_libdir}/libhdr10plus.so -%{_libdir}/libx265.so.* -%ifarch x86_64 aarch64 ppc64 ppc64le -%{_libdir}/libx265_main10.so.* -%{_libdir}/libx265_main12.so.* +%{_libdir}/lib%{name}.so.%{api_version} +%ifnarch %{ix86} +%{_libdir}/lib%{name}_main10.so.%{api_version} +%{_libdir}/lib%{name}_main12.so.%{api_version} %endif %files devel %doc doc/* %{_includedir}/hdr10plus.h -%{_includedir}/x265.h -%{_includedir}/x265_config.h -%{_libdir}/libx265.so -%{_libdir}/pkgconfig/x265.pc +%{_includedir}/%{name}.h +%{_includedir}/%{name}_config.h +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/%{name}.pc %changelog -* Sun Sep 15 2024 Leigh Scott - 4.0-1 -- Update to 4.0 - -* Fri Aug 02 2024 RPM Fusion Release Engineering - 3.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Thu May 16 2024 Dominik Mierzejewski - 3.6-2 -- Backport a fix for crashes when encoding with variable length SEI - -* Sat Apr 06 2024 Leigh Scott - 3.6-1 -- Update to 3.6 - -* Sun Feb 04 2024 RPM Fusion Release Engineering - 3.5-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Aug 02 2023 RPM Fusion Release Engineering - 3.5-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Thu Dec 29 2022 Nicolas Chauvet - 3.5-5 -- Enable ENABLE_HDR10_PLUS everywhere rfbz#6454 - -* Mon Aug 08 2022 RPM Fusion Release Engineering - 3.5-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild and ffmpeg - 5.1 - -* Wed Feb 09 2022 RPM Fusion Release Engineering - 3.5-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Tue Aug 03 2021 RPM Fusion Release Engineering - 3.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Tue Apr 13 2021 Leigh Scott - 3.5-1 -- Update to 3.5 - -* Tue Mar 16 2021 Leigh Scott - 3.4-5 -- Enable HDR10+. - -* Thu Feb 04 2021 RPM Fusion Release Engineering - 3.4-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Aug 19 2020 RPM Fusion Release Engineering - 3.4-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Thu Jul 23 2020 Leigh Scott - 3.4-2 -- Use old cmake macro - -* Sun May 31 2020 Leigh Scott - 3.4-1 -- Update to 3.4 - -* Wed Mar 11 2020 Nicolas Chauvet - 3.3-2 -- Rebuilt for i686 - -* Sun Feb 23 2020 Leigh Scott - 3.3-1 -- Update to 3.3 - -* Wed Feb 05 2020 RPM Fusion Release Engineering - 3.2.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Thu Nov 28 2019 Leigh Scott - 3.2.1-1 -- Update to 3.2.1 -- Switch upstream source url - -* Fri Aug 09 2019 RPM Fusion Release Engineering - 3.1.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Sun Aug 04 2019 Leigh Scott - 3.1.2-1 -- Update to 3.1.2 - -* Fri Jun 28 2019 Nicolas Chauvet - 3.1-1 -- Update to 3.1 -- Switch to github mirror - -* Tue Mar 05 2019 RPM Fusion Release Engineering - 3.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Thu Feb 28 2019 Leigh Scott - 3.0-1 -- Update to 3.0 - -* Sun Dec 30 2018 Leigh Scott - 2.9-3 -- Rebuild against newer nasm on el7 (rfbz #5128) - -* Wed Nov 21 2018 Antonio Trande - 2.9-2 -- Rebuild for ffmpeg-3.* on el7 - -* Sun Nov 18 2018 Leigh Scott - 2.9-1 -- Update to 2.9 - -* Thu Oct 04 2018 Sérgio Basto - 2.8-1 -- Update to 2.8 more 2 patches to fix builds on non-x86 and arm - https://bitbucket.org/multicoreware/x265/issues/404/28-fails-to-build-on-ppc64le-gnu-linux - https://bitbucket.org/multicoreware/x265/issues/406/arm-assembly-fail-to-compile-on-18 - -* Sun Aug 19 2018 Leigh Scott - 2.7-5 -- Rebuilt for Fedora 29 Mass Rebuild binutils issue - -* Fri Jul 27 2018 RPM Fusion Release Engineering - 2.7-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Sun Apr 08 2018 Leigh Scott - 2.7-3 -- Fix pkgconfig file (rfbz #4853) - -* Tue Feb 27 2018 Nicolas Chauvet - 2.7-2 -- Fix CFLAGS on ARM - -* Tue Feb 27 2018 Leigh Scott - 2.7-1 -- update to 2.7 -- Drop shared test patch as it causes nasm build to fail -- Fix scriptlets -- Use ninja to build - -* Sat Dec 30 2017 Sérgio Basto - 2.6-1 -- Update x265 to 2.6 - -* Mon Oct 16 2017 Leigh Scott - 2.5-1 -- update to 2.5 - -* Thu Aug 31 2017 RPM Fusion Release Engineering - 2.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Sat Apr 29 2017 Leigh Scott - 2.4-1 -- update to 2.4 - -* Mon Apr 10 2017 Simone Caronni - 2.2-3 -- Use source from multicoreware website. -- Clean up SPEC file a bit (formatting, 80 char wide descriptions). -- Enable shared 10/12 bit libraries on 64 bit architectures. - -* Mon Mar 20 2017 RPM Fusion Release Engineering - 2.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Tue Jan 03 2017 Dominik Mierzejewski - 2.2-1 -- update to 2.2 -- spell out SO version in file list -- fix typo in patch - -* Mon Nov 07 2016 Sérgio Basto - 2.1-1 -- Update to 2.1 - -* Thu Aug 18 2016 Sérgio Basto - 1.9-3 -- Clean spec, Vascom patches series, rfbz #4199, add license tag - -* Tue Jul 19 2016 Dominik Mierzejewski - 1.9-2 -- use https for source URL -- enable NUMA support -- make sure Fedora compiler flags are used on ARM - -* Fri Apr 08 2016 Adrian Reber - 1.9-1 -- Update to 1.9 - -* Sun Oct 25 2015 Dominik Mierzejewski 1.8-2 -- fix building as PIC -- update SO version in file list - -* Sat Oct 24 2015 Nicolas Chauvet - 1.8-1 -- Update to 1.8 -- Avoid tests for now - -* Wed Apr 15 2015 Dominik Mierzejewski 1.6-1 -- update to 1.6 (ABI bump, rfbz#3593) -- release tarballs are now hosted on videolan.org -- drop obsolete patches - -* Thu Dec 18 2014 Dominik Mierzejewski 1.2-6 -- fix build on armv7l arch (partially fix rfbz#3361, patch by Nicolas Chauvet) -- don't run tests on ARM for now (rfbz#3361) - -* Sun Aug 17 2014 Dominik Mierzejewski 1.2-5 -- don't include contributor agreement in doc -- make sure /usr/share/doc/x265 is owned -- add a comment noting which files are BSD-licenced - -* Fri Aug 08 2014 Dominik Mierzejewski 1.2-4 -- don't create bogus soname (patch by Xavier) - -* Thu Jul 17 2014 Dominik Mierzejewski 1.2-3 -- fix tr call to remove DOS EOL -- build the library with -fPIC on arm and i686, too - -* Sun Jul 13 2014 Dominik Mierzejewski 1.2-2 -- use version in source URL -- update License tag -- fix EOL in drag-uncrustify.bat -- don't link test binaries with shared binary on x86 (segfault) - -* Thu Jul 10 2014 Dominik Mierzejewski 1.2-1 -- initial build -- fix pkgconfig file install location -- link test binaries with shared library +* Sun May 31 2026 Gilver E. - 4.2-1 +- Updated patches and spec based on RPM Fusion and Negativo's changes