@@ -94,7 +94,7 @@ struct gpujpeg_reader
9494 enum gpujpeg_color_space header_color_space ;
9595 enum gpujpeg_header_type header_type ;
9696 bool in_spiff ;
97- struct gpujpeg_image_metadata metadata ;
97+ struct gpujpeg_image_metadata * metadata ;
9898 const char * comment ;
9999};
100100
@@ -326,7 +326,7 @@ gpujpeg_reader_read_app1(uint8_t** image, struct gpujpeg_reader *reader)
326326 if ( strcmp ((char * ) type_tag , "Exif" ) == 0 ) {
327327 reader -> header_color_space = GPUJPEG_YCBCR_BT601_256LVLS ;
328328 reader -> header_type = GPUJPEG_HEADER_EXIF ;
329- gpujpeg_exif_parse (image , reader -> image_end , reader -> param .verbose , & reader -> metadata );
329+ gpujpeg_exif_parse (image , reader -> image_end , reader -> param .verbose , reader -> metadata );
330330 return ;
331331 }
332332 WARN_MSG ("Skipping unsupported APP1 marker \"%s\"!\n" , type_tag );
@@ -474,9 +474,9 @@ gpujpeg_reader_read_spiff_directory(uint8_t** image, struct gpujpeg_reader *read
474474 if ( tag == SPIFF_ENTRY_TAG_ORIENATAION ) {
475475 int rotation = gpujpeg_reader_read_byte (* image );
476476 bool flip = gpujpeg_reader_read_byte (* image );
477- reader -> metadata . vals [GPUJPEG_METADATA_ORIENTATION ].orient .rotation = rotation ;
478- reader -> metadata . vals [GPUJPEG_METADATA_ORIENTATION ].orient .flip = flip ;
479- reader -> metadata . vals [GPUJPEG_METADATA_ORIENTATION ].set = 1 ;
477+ reader -> metadata -> vals [GPUJPEG_METADATA_ORIENTATION ].orient .rotation = rotation ;
478+ reader -> metadata -> vals [GPUJPEG_METADATA_ORIENTATION ].orient .flip = flip ;
479+ reader -> metadata -> vals [GPUJPEG_METADATA_ORIENTATION ].set = 1 ;
480480 DEBUG_MSG (reader -> param .verbose , "SPIFF CW rotation: %d deg%s\n" , rotation * 90 , flip ? ", mirrored" : "" );
481481 * image += 2 ; // 2 bytes reserved
482482 return 0 ;
@@ -1551,10 +1551,14 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
15511551 .param_image = decoder -> coder .param_image ,
15521552 .image_end = image + image_size ,
15531553 .ff_cs_itu601_is_709 = decoder -> ff_cs_itu601_is_709 ,
1554+ .metadata = & decoder -> metadata ,
15541555 };
15551556 reader .param .restart_interval = 0 ;
15561557 reader .param_image .pixel_format = decoder -> req_pixel_format ;
15571558 reader .param_image .color_space = decoder -> req_color_space ;
1559+ for (unsigned i = 0 ; i < GPUJPEG_METADATA_COUNT ; ++ i ) {
1560+ decoder -> metadata .vals [i ].set = false;
1561+ }
15581562
15591563 // Check first SOI marker
15601564 int marker_soi = gpujpeg_reader_read_marker (& image , reader .image_end , decoder -> coder .param .verbose );
@@ -1653,14 +1657,6 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
16531657 return -1 ;
16541658 }
16551659
1656- if ( reader .metadata .vals [GPUJPEG_METADATA_ORIENTATION ].set ) {
1657- if ( reader .metadata .vals [GPUJPEG_METADATA_ORIENTATION ].orient .rotation != 0 ||
1658- reader .metadata .vals [GPUJPEG_METADATA_ORIENTATION ].orient .flip != 0 ) {
1659- WARN_MSG ("Orientation %s not handled!\n" ,
1660- gpujpeg_orientation_get_name (reader .metadata .vals [GPUJPEG_METADATA_ORIENTATION ].orient ));
1661- }
1662- }
1663-
16641660 return 0 ;
16651661}
16661662
@@ -1678,6 +1674,7 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
16781674 .param .verbose = verbose ,
16791675 .param_image .pixel_format = GPUJPEG_PIXFMT_AUTODETECT ,
16801676 .image_end = image + image_size ,
1677+ .metadata = & info -> metadata ,
16811678 };
16821679
16831680 // Check first SOI marker
@@ -1793,7 +1790,6 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
17931790 info -> segment_count = segments ;
17941791 info -> header_type = reader .header_type ;
17951792 info -> comment = reader .comment ;
1796- info -> metadata = reader .metadata ;
17971793
17981794 return 0 ;
17991795}
0 commit comments