@@ -243,7 +243,8 @@ Result<std::vector<uint8_t>> Decoder::get_compressed_data() const
243
243
244
244
245
245
Result<std::shared_ptr<HeifPixelImage>>
246
- Decoder::decode_single_frame_from_compressed_data (const struct heif_decoding_options & options)
246
+ Decoder::decode_single_frame_from_compressed_data (const struct heif_decoding_options & options,
247
+ const struct heif_security_limits * limits)
247
248
{
248
249
const struct heif_decoder_plugin * decoder_plugin = get_decoder (get_compression_format (), options.decoder_id );
249
250
if (!decoder_plugin) {
@@ -285,9 +286,19 @@ Decoder::decode_single_frame_from_compressed_data(const struct heif_decoding_opt
285
286
286
287
heif_image* decoded_img = nullptr ;
287
288
288
- err = decoder_plugin->decode_image (decoder, &decoded_img);
289
- if (err.code != heif_error_Ok) {
290
- return Error (err.code , err.subcode , err.message );
289
+ if (decoder_plugin->plugin_api_version >= 4 &&
290
+ decoder_plugin->decode_next_image != nullptr ) {
291
+
292
+ err = decoder_plugin->decode_next_image (decoder, &decoded_img, limits);
293
+ if (err.code != heif_error_Ok) {
294
+ return Error (err.code , err.subcode , err.message );
295
+ }
296
+ }
297
+ else {
298
+ err = decoder_plugin->decode_image (decoder, &decoded_img);
299
+ if (err.code != heif_error_Ok) {
300
+ return Error (err.code , err.subcode , err.message );
301
+ }
291
302
}
292
303
293
304
if (!decoded_img) {
0 commit comments