@@ -36,6 +36,7 @@ extern "C" {
36
36
struct jpeg_decoder
37
37
{
38
38
std::vector<uint8_t > data;
39
+ std::string error_message;
39
40
};
40
41
41
42
static const char kSuccess [] = " Success" ;
@@ -222,7 +223,15 @@ struct heif_error jpeg_decode_image(void* decoder_raw, struct heif_image** out_i
222
223
return err;
223
224
}
224
225
225
- heif_image_add_plane (heif_img, heif_channel_Y, cinfo.output_width , cinfo.output_height , 8 );
226
+ err = heif_image_add_plane (heif_img, heif_channel_Y, cinfo.output_width , cinfo.output_height , 8 );
227
+ if (err.code ) {
228
+ // copy error message to decoder object because heif_image will be released
229
+ decoder->error_message = err.message ;
230
+ err.message = decoder->error_message .c_str ();
231
+
232
+ heif_image_release (heif_img);
233
+ return err;
234
+ }
226
235
227
236
size_t y_stride;
228
237
uint8_t * py = heif_image_get_plane2 (heif_img, heif_channel_Y, &y_stride);
@@ -262,14 +271,26 @@ struct heif_error jpeg_decode_image(void* decoder_raw, struct heif_image** out_i
262
271
263
272
err = heif_image_add_plane (heif_img, heif_channel_Y, cinfo.output_width , cinfo.output_height , 8 );
264
273
if (err.code ) {
274
+ // copy error message to decoder object because heif_image will be released
275
+ decoder->error_message = err.message ;
276
+ err.message = decoder->error_message .c_str ();
277
+
265
278
return err;
266
279
}
267
280
err = heif_image_add_plane (heif_img, heif_channel_Cb, (cinfo.output_width + 1 ) / 2 , (cinfo.output_height + 1 ) / 2 , 8 );
268
281
if (err.code ) {
282
+ // copy error message to decoder object because heif_image will be released
283
+ decoder->error_message = err.message ;
284
+ err.message = decoder->error_message .c_str ();
285
+
269
286
return err;
270
287
}
271
288
err = heif_image_add_plane (heif_img, heif_channel_Cr, (cinfo.output_width + 1 ) / 2 , (cinfo.output_height + 1 ) / 2 , 8 );
272
289
if (err.code ) {
290
+ // copy error message to decoder object because heif_image will be released
291
+ decoder->error_message = err.message ;
292
+ err.message = decoder->error_message .c_str ();
293
+
273
294
return err;
274
295
}
275
296
0 commit comments