@@ -302,7 +302,8 @@ gpujpeg_reader_read_app0(uint8_t** image, const uint8_t* image_end, enum gpujpeg
302302
303303static void
304304gpujpeg_reader_read_app1 (uint8_t * * image , const uint8_t * image_end , enum gpujpeg_header_type * header_type ,
305- enum gpujpeg_color_space * color_space , int verbose )
305+ enum gpujpeg_color_space * color_space , int verbose ,
306+ struct gpujpeg_exif_parameters * exif_metadata )
306307{
307308 if ( image_end - * image < 2 ) {
308309 ERROR_MSG ("Unexpected end of APP1 marker!\n" );
@@ -319,7 +320,8 @@ gpujpeg_reader_read_app1(uint8_t** image, const uint8_t* image_end, enum gpujpeg
319320 if ( strcmp ((char * ) type_tag , "Exif" ) == 0 ) {
320321 * color_space = GPUJPEG_YCBCR_BT601_256LVLS ;
321322 * header_type = GPUJPEG_HEADER_EXIF ;
322- gpujpeg_exif_parse (image , image_end , verbose );
323+ memset (exif_metadata , 0 , sizeof * exif_metadata );
324+ gpujpeg_exif_parse (image , image_end , verbose , exif_metadata );
323325 return ;
324326 }
325327 WARN_MSG ("Skipping unsupported APP1 marker \"%s\"!\n" , type_tag );
@@ -1362,8 +1364,8 @@ gpujpeg_reader_read_sos(struct gpujpeg_decoder* decoder, struct gpujpeg_reader*
13621364static int
13631365gpujpeg_reader_read_common_markers (uint8_t * * image , const uint8_t * image_end , int marker , int log_level ,
13641366 bool ff_cs_itu601_is_709 , enum gpujpeg_color_space * color_space ,
1365- enum gpujpeg_header_type * header_type ,
1366- int * restart_interval , bool * in_spiff )
1367+ enum gpujpeg_header_type * header_type , int * restart_interval , bool * in_spiff ,
1368+ struct gpujpeg_exif_parameters * exif_metadata )
13671369{
13681370 int rc = 0 ;
13691371 switch (marker )
@@ -1374,7 +1376,7 @@ gpujpeg_reader_read_common_markers(uint8_t** image, const uint8_t* image_end, in
13741376 }
13751377 break ;
13761378 case GPUJPEG_MARKER_APP1 :
1377- gpujpeg_reader_read_app1 (image , image_end , header_type , color_space , log_level );
1379+ gpujpeg_reader_read_app1 (image , image_end , header_type , color_space , log_level , exif_metadata );
13781380 break ;
13791381 case GPUJPEG_MARKER_APP8 :
13801382 if ( gpujpeg_reader_read_app8 (image , image_end , color_space , header_type , log_level , in_spiff ) != 0 ) {
@@ -1534,6 +1536,7 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
15341536 reader .segment_info_size = 0 ;
15351537 enum gpujpeg_color_space header_color_space = GPUJPEG_NONE ;
15361538 enum gpujpeg_header_type header_type = GPUJPEG_HEADER_DEFAULT ;
1539+ struct gpujpeg_exif_parameters exif_metadata ;
15371540
15381541 // Get image end
15391542 uint8_t * image_end = image + image_size ;
@@ -1557,7 +1560,7 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
15571560 // Read more info according to the marker
15581561 int rc = gpujpeg_reader_read_common_markers (& image , image_end , marker , decoder -> coder .param .verbose ,
15591562 decoder -> ff_cs_itu601_is_709 , & header_color_space , & header_type ,
1560- & reader .param .restart_interval , & in_spiff );
1563+ & reader .param .restart_interval , & in_spiff , & exif_metadata );
15611564 if ( rc < 0 ) {
15621565 return rc ;
15631566 }
@@ -1638,6 +1641,10 @@ gpujpeg_reader_read_image(struct gpujpeg_decoder* decoder, uint8_t* image, size_
16381641 return -1 ;
16391642 }
16401643
1644+ if ( header_type == GPUJPEG_HEADER_EXIF && exif_metadata .orientation != EXIF_ORIENTATION_HORIZONTAL ) {
1645+ WARN_MSG ("Exif %d not handled!\n" , exif_metadata .orientation );
1646+ }
1647+
16411648 return 0 ;
16421649}
16431650
@@ -1665,6 +1672,7 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
16651672 enum gpujpeg_color_space header_color_space = GPUJPEG_NONE ;
16661673 enum gpujpeg_header_type header_type = GPUJPEG_HEADER_DEFAULT ;
16671674 uint8_t * image_end = image + image_size ;
1675+ struct gpujpeg_exif_parameters exif_metadata ;
16681676
16691677 param -> interleaved = 0 ;
16701678 param -> restart_interval = 0 ;
@@ -1688,7 +1696,7 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
16881696 // Read more info according to the marker
16891697 int rc =
16901698 gpujpeg_reader_read_common_markers (& image , image_end , marker , param -> verbose , false, & header_color_space ,
1691- & header_type , & param -> restart_interval , & in_spiff );
1699+ & header_type , & param -> restart_interval , & in_spiff , & exif_metadata );
16921700 if ( rc < 0 ) {
16931701 return rc ;
16941702 }
0 commit comments