@@ -345,11 +345,32 @@ void heif_track_options_set_gimi_track_id(struct heif_track_options* options,
345
345
}
346
346
347
347
348
+ heif_sequence_encoding_options* heif_sequence_encoding_options_alloc ()
349
+ {
350
+ heif_sequence_encoding_options* options = new heif_sequence_encoding_options ();
351
+
352
+ options->version = 1 ;
353
+ options->output_nclx_profile = nullptr ;
354
+
355
+ options->color_conversion_options .version = 1 ;
356
+ options->color_conversion_options .preferred_chroma_downsampling_algorithm = heif_chroma_downsampling_average;
357
+ options->color_conversion_options .preferred_chroma_upsampling_algorithm = heif_chroma_upsampling_bilinear;
358
+ options->color_conversion_options .only_use_preferred_chroma_algorithm = false ;
359
+
360
+ return options;
361
+ }
362
+
363
+
364
+ void heif_sequence_encoding_options_release (heif_sequence_encoding_options* options)
365
+ {
366
+ delete options;
367
+ }
368
+
369
+
348
370
struct heif_error heif_context_add_visual_sequence_track (heif_context* ctx,
349
371
struct heif_track_options * track_options,
350
372
uint16_t width, uint16_t height,
351
373
heif_track_type track_type,
352
- const struct heif_encoding_options * options,
353
374
const struct heif_sequence_encoding_options * seq_options,
354
375
heif_track** out_track)
355
376
{
@@ -392,13 +413,30 @@ void heif_image_set_duration(heif_image* img, uint32_t duration)
392
413
struct heif_error heif_track_encode_sequence_image (struct heif_track * track,
393
414
const struct heif_image * input_image,
394
415
struct heif_encoder * encoder,
395
- const struct heif_encoding_options * input_options,
396
- const struct heif_sequence_encoding_options * seq_input_options)
416
+ const struct heif_sequence_encoding_options * sequence_options)
397
417
{
418
+ // the input track must be a visual track
419
+
420
+ auto visual_track = std::dynamic_pointer_cast<Track_Visual>(track->track );
421
+ if (!visual_track) {
422
+ return {heif_error_Usage_error,
423
+ heif_suberror_Invalid_parameter_value,
424
+ " Cannot encode image for non-visual track." };
425
+ }
426
+
427
+
428
+ // convert heif_sequence_encoding_options to heif_encoding_options that is used by track->encode_image()
429
+
398
430
heif_encoding_options* options = heif_encoding_options_alloc ();
399
431
heif_color_profile_nclx nclx;
400
- if (input_options) {
401
- heif_encoding_options_copy (options, input_options);
432
+ if (sequence_options) {
433
+ if (sequence_options->version >= 4 ) {
434
+ options->output_nclx_profile = sequence_options->output_nclx_profile ;
435
+ }
436
+
437
+ if (sequence_options->version >= 6 ) {
438
+ options->color_conversion_options = sequence_options->color_conversion_options ;
439
+ }
402
440
403
441
if (options->output_nclx_profile == nullptr ) {
404
442
auto input_nclx = input_image->image ->get_color_profile_nclx ();
@@ -413,14 +451,7 @@ struct heif_error heif_track_encode_sequence_image(struct heif_track* track,
413
451
}
414
452
}
415
453
416
- auto visual_track = std::dynamic_pointer_cast<Track_Visual>(track->track );
417
- if (!visual_track) {
418
- heif_encoding_options_free (options);
419
-
420
- return {heif_error_Usage_error,
421
- heif_suberror_Invalid_parameter_value,
422
- " Cannot encode image for non-visual track." };
423
- }
454
+ // encode the image
424
455
425
456
auto error = visual_track->encode_image (input_image->image ,
426
457
encoder,
0 commit comments