@@ -1664,8 +1664,10 @@ gcd(int a, int b)
16641664
16651665/* Documented at declaration */
16661666int
1667- gpujpeg_reader_get_image_info (uint8_t * image , size_t image_size , struct gpujpeg_image_parameters * param_image , struct gpujpeg_parameters * param , int * segment_count )
1667+ gpujpeg_reader_get_image_info (uint8_t * image , size_t image_size , struct gpujpeg_image_info * info , int verbose , unsigned flags )
16681668{
1669+ // gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_image_parameters *param_image,
1670+ // struct gpujpeg_parameters *param, int *segment_count)
16691671 int segments = 0 ;
16701672 int unused [4 ];
16711673 uint8_t unused2 [4 ];
@@ -1674,11 +1676,11 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
16741676 uint8_t * image_end = image + image_size ;
16751677 struct gpujpeg_exif_parameters exif_metadata ;
16761678
1677- param -> interleaved = 0 ;
1678- param -> restart_interval = 0 ;
1679+ info -> param . interleaved = 0 ;
1680+ info -> param . restart_interval = 0 ;
16791681
16801682 // Check first SOI marker
1681- int marker_soi = gpujpeg_reader_read_marker (& image , image_end , param -> verbose );
1683+ int marker_soi = gpujpeg_reader_read_marker (& image , image_end , verbose );
16821684 if (marker_soi != GPUJPEG_MARKER_SOI ) {
16831685 fprintf (stderr , "[GPUJPEG] [Error] JPEG data should begin with SOI marker, but marker %s was found!\n" , gpujpeg_marker_name ((enum gpujpeg_marker_code )marker_soi ));
16841686 return -1 ;
@@ -1688,15 +1690,15 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
16881690 _Bool in_spiff = 0 ;
16891691 while (eoi_presented == 0 ) {
16901692 // Read marker
1691- int marker = gpujpeg_reader_read_marker (& image , image_end , param -> verbose );
1693+ int marker = gpujpeg_reader_read_marker (& image , image_end , verbose );
16921694 if (marker == -1 ) {
16931695 return -1 ;
16941696 }
16951697
16961698 // Read more info according to the marker
16971699 int rc =
1698- gpujpeg_reader_read_common_markers (& image , image_end , marker , param -> verbose , false, & header_color_space ,
1699- & header_type , & param -> restart_interval , & in_spiff , & exif_metadata );
1700+ gpujpeg_reader_read_common_markers (& image , image_end , marker , verbose , false, & header_color_space ,
1701+ & header_type , & info -> param . restart_interval , & in_spiff , & exif_metadata );
17001702 if ( rc < 0 ) {
17011703 return rc ;
17021704 }
@@ -1708,12 +1710,12 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
17081710 case GPUJPEG_MARKER_SOF0 : // Baseline
17091711 case GPUJPEG_MARKER_SOF1 : // Extended sequential with Huffman coder
17101712 {
1711- param -> color_space_internal = header_color_space ;
1712- if ( gpujpeg_reader_read_sof0 (param , param_image , header_color_space , header_type , unused , unused2 , & image ,
1713+ info -> param . color_space_internal = header_color_space ;
1714+ if ( gpujpeg_reader_read_sof0 (& info -> param , & info -> param_image , header_color_space , header_type , unused , unused2 , & image ,
17131715 image_end ) != 0 ) {
17141716 return -1 ;
17151717 }
1716- param_image -> color_space = param -> color_space_internal ;
1718+ info -> param_image . color_space = info -> param . color_space_internal ;
17171719 break ;
17181720 }
17191721 case GPUJPEG_MARKER_RST0 :
@@ -1738,9 +1740,9 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
17381740 assert (length > 3 );
17391741 int comp_count = (int ) gpujpeg_reader_read_byte (image ); // comp count in the segment
17401742 if (comp_count > 1 ) {
1741- param -> interleaved = 1 ;
1743+ info -> param . interleaved = 1 ;
17421744 }
1743- if (segment_count == NULL ) { // if not counting segments, we can skip the rest
1745+ if ( ( flags & GPUJPEG_COUNT_SEG_COUNT_REQ ) != 0 ) { // if not counting segments, we can skip the rest
17441746 eoi_presented = 1 ;
17451747 }
17461748 }
@@ -1787,55 +1789,53 @@ gpujpeg_reader_get_image_info(uint8_t *image, size_t image_size, struct gpujpeg_
17871789 }
17881790 }
17891791
1790- if (segment_count != NULL ) {
1791- * segment_count = segments ;
1792- }
1792+ info -> segment_count = segments ;
17931793
1794- param_image -> pixel_format = GPUJPEG_PIXFMT_NONE ;
1794+ info -> param_image . pixel_format = GPUJPEG_PIXFMT_NONE ;
17951795
1796- if ( param -> comp_count == 1 ) {
1797- param_image -> pixel_format = GPUJPEG_U8 ;
1796+ if ( info -> param . comp_count == 1 ) {
1797+ info -> param_image . pixel_format = GPUJPEG_U8 ;
17981798 }
1799- if ( param -> comp_count == 3 ) {
1799+ if ( info -> param . comp_count == 3 ) {
18001800 // reduce [2, 2; 1, 2; 1, 2] (FFmpeg) to [2, 1; 1, 1; 1, 1]
1801- int horizontal_gcd = param -> sampling_factor [0 ].horizontal ;
1802- int vertical_gcd = param -> sampling_factor [0 ].vertical ;
1801+ int horizontal_gcd = info -> param . sampling_factor [0 ].horizontal ;
1802+ int vertical_gcd = info -> param . sampling_factor [0 ].vertical ;
18031803 for (int i = 1 ; i < 3 ; ++ i ) {
1804- horizontal_gcd = gcd (horizontal_gcd , param -> sampling_factor [i ].horizontal );
1805- vertical_gcd = gcd (vertical_gcd , param -> sampling_factor [i ].vertical );
1804+ horizontal_gcd = gcd (horizontal_gcd , info -> param . sampling_factor [i ].horizontal );
1805+ vertical_gcd = gcd (vertical_gcd , info -> param . sampling_factor [i ].vertical );
18061806 }
18071807 for (int i = 0 ; i < 3 ; ++ i ) {
1808- param -> sampling_factor [i ].horizontal /= horizontal_gcd ;
1809- param -> sampling_factor [i ].vertical /= vertical_gcd ;
1808+ info -> param . sampling_factor [i ].horizontal /= horizontal_gcd ;
1809+ info -> param . sampling_factor [i ].vertical /= vertical_gcd ;
18101810 }
18111811
1812- if (param -> sampling_factor [1 ].horizontal == 1 && param -> sampling_factor [1 ].vertical == 1
1813- && param -> sampling_factor [2 ].horizontal == 1 && param -> sampling_factor [2 ].vertical == 1 ) {
1814- int sum = param -> interleaved << 16 | param -> sampling_factor [0 ].horizontal << 8 |
1815- param -> sampling_factor [0 ].vertical ; // NOLINT
1812+ if (info -> param . sampling_factor [1 ].horizontal == 1 && info -> param . sampling_factor [1 ].vertical == 1
1813+ && info -> param . sampling_factor [2 ].horizontal == 1 && info -> param . sampling_factor [2 ].vertical == 1 ) {
1814+ int sum = info -> param . interleaved << 16 | info -> param . sampling_factor [0 ].horizontal << 8 |
1815+ info -> param . sampling_factor [0 ].vertical ; // NOLINT
18161816 switch (sum ) {
1817- case 1 <<16 | 1 <<8 | 1 : param_image -> pixel_format = GPUJPEG_444_U8_P012 ; break ; // NOLINT
1818- case 0 <<16 | 1 <<8 | 1 : param_image -> pixel_format = GPUJPEG_444_U8_P0P1P2 ; break ; // NOLINT
1819- case 1 <<16 | 2 <<8 | 1 : param_image -> pixel_format = GPUJPEG_422_U8_P1020 ; break ; // NOLINT
1820- case 0 <<16 | 2 <<8 | 1 : param_image -> pixel_format = GPUJPEG_422_U8_P0P1P2 ; break ; // NOLINT
1817+ case 1 <<16 | 1 <<8 | 1 : info -> param_image . pixel_format = GPUJPEG_444_U8_P012 ; break ; // NOLINT
1818+ case 0 <<16 | 1 <<8 | 1 : info -> param_image . pixel_format = GPUJPEG_444_U8_P0P1P2 ; break ; // NOLINT
1819+ case 1 <<16 | 2 <<8 | 1 : info -> param_image . pixel_format = GPUJPEG_422_U8_P1020 ; break ; // NOLINT
1820+ case 0 <<16 | 2 <<8 | 1 : info -> param_image . pixel_format = GPUJPEG_422_U8_P0P1P2 ; break ; // NOLINT
18211821 case 1 <<16 | 2 <<8 | 2 : // we have only one pixfmt for 420, so use for both NOLINT
1822- case 0 <<16 | 2 <<8 | 2 : param_image -> pixel_format = GPUJPEG_420_U8_P0P1P2 ; break ; // NOLINT
1822+ case 0 <<16 | 2 <<8 | 2 : info -> param_image . pixel_format = GPUJPEG_420_U8_P0P1P2 ; break ; // NOLINT
18231823 default : break ;
18241824 }
18251825 }
18261826 }
18271827
1828- if ( param -> comp_count == 4 ) {
1828+ if ( info -> param . comp_count == 4 ) {
18291829 _Bool subsampling_is4444 = 1 ;
18301830 for (int i = 1 ; i < 4 ; ++ i ) {
1831- if (param -> sampling_factor [i ].horizontal != param -> sampling_factor [0 ].horizontal
1832- || param -> sampling_factor [i ].vertical != param -> sampling_factor [0 ].vertical ) {
1831+ if (info -> param . sampling_factor [i ].horizontal != info -> param . sampling_factor [0 ].horizontal
1832+ || info -> param . sampling_factor [i ].vertical != info -> param . sampling_factor [0 ].vertical ) {
18331833 subsampling_is4444 = 0 ;
18341834 break ;
18351835 }
18361836 }
18371837 if (subsampling_is4444 ) {
1838- param_image -> pixel_format = GPUJPEG_4444_U8_P0123 ;
1838+ info -> param_image . pixel_format = GPUJPEG_4444_U8_P0123 ;
18391839 }
18401840 }
18411841
0 commit comments