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: */