Skip to content

Commit 45afa76

Browse files
committed
remove heif_encoding_options from heif_track_encode_sequence_image()
1 parent b1b4170 commit 45afa76

File tree

3 files changed

+63
-20
lines changed

3 files changed

+63
-20
lines changed

examples/heif_enc.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,7 +1814,6 @@ int do_encode_sequence(heif_context* context, heif_encoder* encoder, heif_encodi
18141814
image_width, image_height,
18151815
heif_track_type_video,
18161816
nullptr,
1817-
nullptr,
18181817
&track);
18191818

18201819
heif_track_options_release(track_options);
@@ -1841,7 +1840,7 @@ int do_encode_sequence(heif_context* context, heif_encoder* encoder, heif_encodi
18411840

18421841
heif_image_set_duration(image.get(), sequence_durations);
18431842

1844-
error = heif_track_encode_sequence_image(track, image.get(), encoder, nullptr, nullptr);
1843+
error = heif_track_encode_sequence_image(track, image.get(), encoder, nullptr);
18451844
if (error.code) {
18461845
std::cerr << "Cannot encode sequence image: " << error.message << "\n";
18471846
return 5;

libheif/api/libheif/heif_sequences.cc

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -345,11 +345,32 @@ void heif_track_options_set_gimi_track_id(struct heif_track_options* options,
345345
}
346346

347347

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+
348370
struct heif_error heif_context_add_visual_sequence_track(heif_context* ctx,
349371
struct heif_track_options* track_options,
350372
uint16_t width, uint16_t height,
351373
heif_track_type track_type,
352-
const struct heif_encoding_options* options,
353374
const struct heif_sequence_encoding_options* seq_options,
354375
heif_track** out_track)
355376
{
@@ -392,13 +413,30 @@ void heif_image_set_duration(heif_image* img, uint32_t duration)
392413
struct heif_error heif_track_encode_sequence_image(struct heif_track* track,
393414
const struct heif_image* input_image,
394415
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)
397417
{
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+
398430
heif_encoding_options* options = heif_encoding_options_alloc();
399431
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+
}
402440

403441
if (options->output_nclx_profile == nullptr) {
404442
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,
413451
}
414452
}
415453

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
424455

425456
auto error = visual_track->encode_image(input_image->image,
426457
encoder,

libheif/api/libheif/heif_sequences.h

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,22 @@ void heif_track_options_set_gimi_track_id(struct heif_track_options*,
305305
// --- writing visual tracks
306306

307307
// This structure is for future use. It is not defined yet.
308-
struct heif_sequence_encoding_options;
308+
struct heif_sequence_encoding_options
309+
{
310+
uint8_t version;
311+
312+
// version 1 options
313+
314+
// Set this to the NCLX parameters to be used in the output images or set to NULL
315+
// when the same parameters as in the input images should be used.
316+
struct heif_color_profile_nclx* output_nclx_profile;
317+
318+
struct heif_color_conversion_options color_conversion_options;
319+
};
320+
321+
heif_sequence_encoding_options* heif_sequence_encoding_options_alloc();
322+
323+
void heif_sequence_encoding_options_release(heif_sequence_encoding_options*);
309324

310325
/**
311326
* Add a visual track to the sequence.
@@ -325,7 +340,6 @@ struct heif_error heif_context_add_visual_sequence_track(heif_context*,
325340
struct heif_track_options* track_options,
326341
uint16_t width, uint16_t height,
327342
heif_track_type track_type,
328-
const struct heif_encoding_options* encoding_options,
329343
const struct heif_sequence_encoding_options* seq_encoding_options,
330344
heif_track** out_track);
331345

@@ -339,14 +353,13 @@ void heif_image_set_duration(heif_image*, uint32_t duration);
339353
* Encode the image into a visual track.
340354
* If the passed track is no visual track, an error will be returned.
341355
*
342-
* Currently, pass NULL as seq_options.
356+
* Currently, pass NULL as sequence_options.
343357
*/
344358
LIBHEIF_API
345359
struct heif_error heif_track_encode_sequence_image(struct heif_track*,
346360
const struct heif_image* image,
347361
struct heif_encoder* encoder,
348-
const struct heif_encoding_options* options,
349-
const struct heif_sequence_encoding_options* seq_options);
362+
const struct heif_sequence_encoding_options* sequence_options);
350363

351364
// --- metadata tracks
352365

0 commit comments

Comments
 (0)