Commit c9928225 for libheif

commit c992822543cdc92e4fa7921f202fc03078b9e975
Author: Dirk Farin <dirk.farin@gmail.com>
Date:   Mon Apr 13 14:07:48 2026 +0200

    copy encoder parameters for alpha-channel encoder also when encoding sequences (#1732)

diff --git a/libheif/api_structs.h b/libheif/api_structs.h
index 3dd7ec93..a4c5c10d 100644
--- a/libheif/api_structs.h
+++ b/libheif/api_structs.h
@@ -83,6 +83,8 @@ struct heif_encoder

   void release();

+  void copy_parameters_from(const heif_encoder& src);
+

   const struct heif_encoder_plugin* plugin;
   void* encoder = nullptr;
diff --git a/libheif/context.cc b/libheif/context.cc
index 3d152d64..fd6d949d 100644
--- a/libheif/context.cc
+++ b/libheif/context.cc
@@ -98,25 +98,23 @@ heif_error heif_encoder::alloc()
 }


-static void copy_encoder_parameters(heif_encoder* dst, const heif_encoder* src)
+void heif_encoder::copy_parameters_from(const heif_encoder& src)
 {
-  const auto* plugin = src->plugin;
-
   // Copy dedicated quality/lossless/logging parameters
   int ival;
-  plugin->get_parameter_quality(src->encoder, &ival);
-  plugin->set_parameter_quality(dst->encoder, ival);
+  plugin->get_parameter_quality(src.encoder, &ival);
+  plugin->set_parameter_quality(encoder, ival);

-  plugin->get_parameter_lossless(src->encoder, &ival);
-  plugin->set_parameter_lossless(dst->encoder, ival);
+  plugin->get_parameter_lossless(src.encoder, &ival);
+  plugin->set_parameter_lossless(encoder, ival);

   if (plugin->get_parameter_logging_level && plugin->set_parameter_logging_level) {
-    plugin->get_parameter_logging_level(src->encoder, &ival);
-    plugin->set_parameter_logging_level(dst->encoder, ival);
+    plugin->get_parameter_logging_level(src.encoder, &ival);
+    plugin->set_parameter_logging_level(encoder, ival);
   }

   // Copy all enumerable plugin parameters
-  const heif_encoder_parameter* const* params = plugin->list_parameters(src->encoder);
+  const heif_encoder_parameter* const* params = plugin->list_parameters(src.encoder);
   if (!params) return;

   for (; *params; params++) {
@@ -124,20 +122,20 @@ static void copy_encoder_parameters(heif_encoder* dst, const heif_encoder* src)
     switch ((*params)->type) {
       case heif_encoder_parameter_type_integer: {
         int v;
-        if (plugin->get_parameter_integer(src->encoder, name, &v).code == heif_error_Ok)
-          plugin->set_parameter_integer(dst->encoder, name, v);
+        if (plugin->get_parameter_integer(src.encoder, name, &v).code == heif_error_Ok)
+          plugin->set_parameter_integer(encoder, name, v);
         break;
       }
       case heif_encoder_parameter_type_boolean: {
         int v;
-        if (plugin->get_parameter_boolean(src->encoder, name, &v).code == heif_error_Ok)
-          plugin->set_parameter_boolean(dst->encoder, name, v);
+        if (plugin->get_parameter_boolean(src.encoder, name, &v).code == heif_error_Ok)
+          plugin->set_parameter_boolean(encoder, name, v);
         break;
       }
       case heif_encoder_parameter_type_string: {
         char v[256];
-        if (plugin->get_parameter_string(src->encoder, name, v, sizeof(v)).code == heif_error_Ok)
-          plugin->set_parameter_string(dst->encoder, name, v);
+        if (plugin->get_parameter_string(src.encoder, name, v, sizeof(v)).code == heif_error_Ok)
+          plugin->set_parameter_string(encoder, name, v);
         break;
       }
     }
@@ -1644,7 +1642,7 @@ Result<std::shared_ptr<ImageItem>> HeifContext::encode_image(const std::shared_p
     if (alloc_err.code) {
       return Error(alloc_err.code, alloc_err.subcode, alloc_err.message);
     }
-    copy_encoder_parameters(&alpha_enc, encoder);
+    alpha_enc.copy_parameters_from(*encoder);

     auto alphaEncodingResult = encode_image(alpha_image, &alpha_enc, options,
                          heif_image_input_class_alpha);
diff --git a/libheif/sequences/track_visual.cc b/libheif/sequences/track_visual.cc
index 3c3f11ad..ce822256 100644
--- a/libheif/sequences/track_visual.cc
+++ b/libheif/sequences/track_visual.cc
@@ -429,6 +429,7 @@ Error Track_Visual::encode_image(std::shared_ptr<HeifPixelImage> image,
       if (err.code) {
         return {err.code, err.subcode, err.message};
       }
+      m_alpha_track_encoder->copy_parameters_from(*h_encoder);
     }
   }