From 23acef021de8f216ddbb53d52647dc0b05bf457b Mon Sep 17 00:00:00 2001 From: EnumDev Date: Mon, 9 Feb 2026 11:13:11 +0200 Subject: [PATCH] Rebuild with svt-av1 4.0.1 --- pkg.info | 4 +- source-files/svt-av1-4.0-fix.patch | 81 ++++++++++++++++++++++++++++++ source.sh | 7 +++ 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 source-files/svt-av1-4.0-fix.patch diff --git a/pkg.info b/pkg.info index 8192d36..dad8f3d 100644 --- a/pkg.info +++ b/pkg.info @@ -1,9 +1,11 @@ name: libheif description: HEIF and AVIF file format decoder and encoder version: 1.21.2 -revision: 1 +revision: 2 url: https://github.com/strukturag/libheif license: LGPL3-or-later +maintainers: + - enumdev@enumerated.dev architecture: any type: source depends: diff --git a/source-files/svt-av1-4.0-fix.patch b/source-files/svt-av1-4.0-fix.patch new file mode 100644 index 0000000..1b948d2 --- /dev/null +++ b/source-files/svt-av1-4.0-fix.patch @@ -0,0 +1,81 @@ +From 61923302d12f80e2a5c945a3903d1009cf67778f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= +Date: Sat, 24 Jan 2026 17:30:35 +0100 +Subject: [PATCH 1/2] Set SVT-AV1's avif option for v4.0.0 or later + +--- + libheif/plugins/encoder_svt.cc | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/libheif/plugins/encoder_svt.cc b/libheif/plugins/encoder_svt.cc +index 03d87ca1ae..7993e3959a 100644 +--- a/libheif/plugins/encoder_svt.cc ++++ b/libheif/plugins/encoder_svt.cc +@@ -858,9 +858,10 @@ static heif_error svt_start_sequence_encoding_intern(void* encoder_raw, const he + #endif + } + else { +- // TODO: enable when https://gitlab.com/AOMediaCodec/SVT-AV1/-/issues/2245 is resolved +- // svt_config.avif = true; +- // encoder->still_image_mode = true; ++#if SVT_AV1_CHECK_VERSION(4, 0, 0) ++ svt_config.avif = true; ++ encoder->still_image_mode = true; ++#endif + } + + if (color_format == EB_YUV422 || bitdepth_y > 10) { + +From f9919e34868920000ddba13c55e1bf3731b1e64b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= +Date: Sat, 24 Jan 2026 18:18:46 +0100 +Subject: [PATCH 2/2] Use PredStructure values from definitions.h instead of + removed SvtAv1PredStructure for v4.0.0 or later + +--- + libheif/plugins/encoder_svt.cc | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/libheif/plugins/encoder_svt.cc b/libheif/plugins/encoder_svt.cc +index 7993e3959a..393748e997 100644 +--- a/libheif/plugins/encoder_svt.cc ++++ b/libheif/plugins/encoder_svt.cc +@@ -838,8 +838,20 @@ static heif_error svt_start_sequence_encoding_intern(void* encoder_raw, const he + // svt_config.force_key_frames = true; TODO: this does not seem to work (see all [1]) + + #if 1 ++#if SVT_AV1_CHECK_VERSION(4, 0, 0) ++ switch (options->gop_structure) { ++ case heif_sequence_gop_structure_intra_only: ++ //svt_config.pred_structure = 1; // LOW_DELAY ++ break; ++ case heif_sequence_gop_structure_lowdelay: ++ //svt_config.pred_structure = 1; // LOW_DELAY ++ break; ++ case heif_sequence_gop_structure_unrestricted: ++ svt_config.pred_structure = 2; // RANDOM_ACCESS ++ break; ++ } ++#else + // TODO: setting pref_structure to SVT_AV1_PRED_LOW_DELAY_B hangs the encoder +- + switch (options->gop_structure) { + case heif_sequence_gop_structure_intra_only: + //svt_config.pred_structure = SvtAv1PredStructure::SVT_AV1_PRED_LOW_DELAY_B; +@@ -851,6 +863,7 @@ static heif_error svt_start_sequence_encoding_intern(void* encoder_raw, const he + svt_config.pred_structure = SvtAv1PredStructure::SVT_AV1_PRED_RANDOM_ACCESS; + break; + } ++#endif + + if (options->keyframe_distance_max) { + svt_config.intra_period_length = options->keyframe_distance_max; // TODO -1 ? +@@ -921,7 +934,7 @@ static heif_error read_encoder_output_packets(void* encoder_raw, bool done_sendi + + /* TODO: this is a hack + * When using +- * svt_config.pred_structure = SvtAv1PredStructure::SVT_AV1_PRED_LOW_DELAY_B; ++ * svt_config.pred_structure = 1; // LOW_DELAY + * svt_av1_enc_get_packet() hangs on the second call. As a workaround, we can leave the + * loop when we got the image: + */ diff --git a/source.sh b/source.sh index 91ef196..8a95d40 100644 --- a/source.sh +++ b/source.sh @@ -2,6 +2,13 @@ # BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE # BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT +# The prepare function is executed in the root of the temp directory +# This function is used for putting downloaded files to the correct location or applying patches +prepare() { + cd "$BPM_SOURCE" + patch -Np1 -i "$BPM_WORKDIR"/svt-av1-4.0-fix.patch +} + # The build function is executed in the source directory # This function is used to compile the source code build() {