[packages/ffmpeg] - added fix for x265 >= 210, enable x265 also on x32; release 1.2

qboosh qboosh at pld-linux.org
Sun Sep 15 08:30:20 CEST 2024


commit b5ff82117803867777801952ed8e2c357a339a01
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun Sep 15 08:33:09 2024 +0200

    - added fix for x265 >= 210, enable x265 also on x32; release 1.2

 ffmpeg-x265-210.patch | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++
 ffmpeg.spec           |  6 ++--
 2 files changed, 103 insertions(+), 2 deletions(-)
---
diff --git a/ffmpeg.spec b/ffmpeg.spec
index 26aa3a1..b3cd0f0 100644
--- a/ffmpeg.spec
+++ b/ffmpeg.spec
@@ -119,7 +119,7 @@
 %ifnarch %{ix86} %{x8664} aarch64
 %undefine	with_rav1e
 %endif
-%ifnarch %{ix86} %{x8664} %{arm} aarch64
+%ifnarch %{ix86} %{x8664} x32 %{arm} aarch64
 %undefine	with_x265
 %endif
 %ifarch i386 i486
@@ -133,7 +133,7 @@ Summary(pl.UTF-8):	FFmpeg - szybki konwerter audio/wideo
 Name:		ffmpeg
 # NOTE: 7.0 prepared on DEVEL-7 branch, but other software is not ready (e.g. xine-lib 1.2.13, gstreamer-libav 1.24.2)
 Version:	6.1.2
-Release:	1.1
+Release:	1.2
 # LGPL or GPL, chosen at configure time (GPL version is more featured)
 # GPL: frei0r libcdio libdavs2 rubberband vidstab x264 x265 xavs xavs2 xvid
 # v3 (allows *GPLv3 or Apache-licensed libs): gmp lensfun opencore-amr vmaf vo-*enc rkmpp
@@ -148,6 +148,7 @@ Patch2:		opencv4.patch
 Patch3:		v4l2-request-hwdec.patch
 Patch4:		ffmpeg-vulkan1.3.280.patch
 Patch5:		gcc14.patch
+Patch6:		%{name}-x265-210.patch
 URL:		https://ffmpeg.org/
 %{?with_avisynth:BuildRequires:	AviSynthPlus-devel >= 3.7.3}
 %{?with_decklink:BuildRequires:	Blackmagic_DeckLink_SDK >= 10.11}
@@ -576,6 +577,7 @@ Dokumentacja pakietu FFmpeg w formacie HTML.
 %endif
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
 
 # package the grep result for mplayer, the result formatted as ./mplayer/configure
 cat <<EOF > ffmpeg-avconfig
diff --git a/ffmpeg-x265-210.patch b/ffmpeg-x265-210.patch
new file mode 100644
index 0000000..94a6947
--- /dev/null
+++ b/ffmpeg-x265-210.patch
@@ -0,0 +1,99 @@
+From f749aaf108696fcfc2be6a9f6c1059415474caf3 Mon Sep 17 00:00:00 2001
+From: Gyan Doshi <ffmpeg at gyani.pro>
+Date: Sun, 11 Aug 2024 12:51:50 +0530
+Subject: [PATCH] lavc/libx265: unbreak build for X265_BUILD >= 210
+
+x265 added support for alpha starting with build 210.
+While doing so, x265_encoder_encode() changed its fifth arg to
+an array of pointers to x265_picture. This broke building lavc/libx265.c
+
+This patch simply unbreaks the build and maintains existing single-layer
+non-alpha encoding support.
+
+Fixes #11130
+---
+ libavcodec/libx265.c | 40 ++++++++++++++++++++++++++++++----------
+ 1 file changed, 30 insertions(+), 10 deletions(-)
+
+diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c
+index 447e6da25f..29fc26eab4 100644
+--- a/libavcodec/libx265.c
++++ b/libavcodec/libx265.c
+@@ -581,7 +581,13 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
+ {
+     libx265Context *ctx = avctx->priv_data;
+     x265_picture x265pic;
+-    x265_picture x265pic_out = { 0 };
++#if X265_BUILD >= 210
++    x265_picture x265pic_layers_out[MAX_SCALABLE_LAYERS];
++    x265_picture* x265pic_lyrptr_out[MAX_SCALABLE_LAYERS];
++#else
++    x265_picture x265pic_solo_out = { 0 };
++#endif
++    x265_picture* x265pic_out;
+     x265_nal *nal;
+     x265_sei *sei;
+     uint8_t *dst;
+@@ -704,8 +710,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
+         }
+     }
+ 
++#if X265_BUILD >= 210
++    for (i = 0; i < MAX_SCALABLE_LAYERS; i++)
++        x265pic_lyrptr_out[i] = &x265pic_layers_out[i];
++
++    ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
++                                   pic ? &x265pic : NULL, x265pic_lyrptr_out);
++#else
+     ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
+-                                   pic ? &x265pic : NULL, &x265pic_out);
++                                   pic ? &x265pic : NULL, &x265pic_solo_out);
++#endif
+ 
+     for (i = 0; i < sei->numPayloads; i++)
+         av_free(sei->payloads[i].payload);
+@@ -735,10 +749,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
+             pkt->flags |= AV_PKT_FLAG_KEY;
+     }
+ 
+-    pkt->pts = x265pic_out.pts;
+-    pkt->dts = x265pic_out.dts;
++#if X265_BUILD >= 210
++    x265pic_out = x265pic_lyrptr_out[0];
++#else
++    x265pic_out = &x265pic_solo_out;
++#endif
++
++    pkt->pts = x265pic_out->pts;
++    pkt->dts = x265pic_out->dts;
+ 
+-    switch (x265pic_out.sliceType) {
++    switch (x265pic_out->sliceType) {
+     case X265_TYPE_IDR:
+     case X265_TYPE_I:
+         pict_type = AV_PICTURE_TYPE_I;
+@@ -756,16 +776,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
+     }
+ 
+ #if X265_BUILD >= 130
+-    if (x265pic_out.sliceType == X265_TYPE_B)
++    if (x265pic_out->sliceType == X265_TYPE_B)
+ #else
+-    if (x265pic_out.frameData.sliceType == 'b')
++    if (x265pic_out->frameData.sliceType == 'b')
+ #endif
+         pkt->flags |= AV_PKT_FLAG_DISPOSABLE;
+ 
+-    ff_side_data_set_encoder_stats(pkt, x265pic_out.frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type);
++    ff_side_data_set_encoder_stats(pkt, x265pic_out->frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type);
+ 
+-    if (x265pic_out.userData) {
+-        int idx = (int)(intptr_t)x265pic_out.userData - 1;
++    if (x265pic_out->userData) {
++        int idx = (int)(intptr_t)x265pic_out->userData - 1;
+         ReorderedData *rd = &ctx->rd[idx];
+ 
+ #if FF_API_REORDERED_OPAQUE
+-- 
+2.25.1
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/ffmpeg.git/commitdiff/b5ff82117803867777801952ed8e2c357a339a01



More information about the pld-cvs-commit mailing list