Skip to content

Commit 0d1591a

Browse files
committed
add functions for heif_unci_image_parameters processing
1 parent 3ce3d48 commit 0d1591a

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

libheif/api/libheif/heif_uncompressed.cc

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,54 @@
2727
#include <memory>
2828

2929

30+
struct heif_unci_image_parameters* heif_unci_image_parameters_alloc()
31+
{
32+
auto* params = new heif_unci_image_parameters();
33+
34+
params->version = 1;
35+
36+
// --- version 1
37+
38+
params->image_width = 0;
39+
params->image_height = 0;
40+
41+
// TODO: should we define that tile size = 0 means no tiling?
42+
params->tile_width = 0;
43+
params->tile_height = 0;
44+
45+
params->compression = heif_unci_compression_off;
46+
47+
return params;
48+
}
49+
50+
51+
void heif_unci_image_parameters_copy(struct heif_unci_image_parameters* dst,
52+
const struct heif_unci_image_parameters* src)
53+
{
54+
if (src == nullptr || dst == nullptr) {
55+
return;
56+
}
57+
58+
int min_version = std::min(src->version, dst->version);
59+
60+
switch (min_version) {
61+
case 1:
62+
dst->image_width = src->image_width;
63+
dst->image_height = src->image_height;
64+
dst->tile_width = src->tile_width;
65+
dst->tile_height = src->tile_height;
66+
dst->compression = src->compression;
67+
break;
68+
}
69+
}
70+
71+
72+
void heif_unci_image_parameters_release(struct heif_unci_image_parameters* params)
73+
{
74+
delete params;
75+
}
76+
77+
3078
struct heif_error heif_context_add_unci_image(struct heif_context* ctx,
3179
const struct heif_unci_image_parameters* parameters,
3280
const struct heif_encoding_options* encoding_options,

libheif/image-items/unc_image.cc

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -283,16 +283,19 @@ Result<Encoder::CodedImageData> ImageItem_uncompressed::encode(const std::shared
283283
Result<Encoder::CodedImageData> ImageItem_uncompressed::encode_static(const std::shared_ptr<HeifPixelImage>& src_image,
284284
const struct heif_encoding_options& options)
285285
{
286-
heif_unci_image_parameters parameters{};
287-
parameters.image_width = src_image->get_width();
288-
parameters.image_height = src_image->get_height();
289-
parameters.tile_width = parameters.image_width;
290-
parameters.tile_height = parameters.image_height;
286+
auto parameters = std::unique_ptr<heif_unci_image_parameters,
287+
void (*)(heif_unci_image_parameters*)>(heif_unci_image_parameters_alloc(),
288+
heif_unci_image_parameters_release);
289+
290+
parameters->image_width = src_image->get_width();
291+
parameters->image_height = src_image->get_height();
292+
parameters->tile_width = parameters->image_width;
293+
parameters->tile_height = parameters->image_height;
291294

292295

293296
// --- generate configuration property boxes
294297

295-
Result<unciHeaders> genHeadersResult = generate_headers(src_image, &parameters, &options);
298+
Result<unciHeaders> genHeadersResult = generate_headers(src_image, parameters.get(), &options);
296299
if (genHeadersResult.error) {
297300
return genHeadersResult.error;
298301
}

0 commit comments

Comments
 (0)