@@ -868,7 +868,13 @@ jpeg_simple_progression (j_compress_ptr cinfo)
868
868
ncomps = cinfo -> num_components ;
869
869
if (ncomps == 3 && cinfo -> jpeg_color_space == JCS_YCbCr ) {
870
870
/* Custom script for YCbCr color images. */
871
- nscans = 10 ;
871
+ if (cinfo -> master -> dc_scan_opt_mode == 0 ) {
872
+ nscans = 8 ; /* 1 DC scan for all components */
873
+ } else if (cinfo -> master -> dc_scan_opt_mode == 1 ) {
874
+ nscans = 10 ; /* 1 DC scan for each component */
875
+ } else {
876
+ nscans = 9 ; /* 1 DC scan for luminance and 1 DC scan for chroma */
877
+ }
872
878
} else {
873
879
/* All-purpose script for other color spaces. */
874
880
if (cinfo -> master -> compress_profile == JCP_MAX_COMPRESSION ) {
@@ -906,14 +912,16 @@ jpeg_simple_progression (j_compress_ptr cinfo)
906
912
if (cinfo -> master -> compress_profile == JCP_MAX_COMPRESSION ) {
907
913
/* scan defined in jpeg_scan_rgb.txt in jpgcrush */
908
914
/* Initial DC scan */
909
- if (cinfo -> master -> dc_scan_opt_mode == 0 )
915
+ if (cinfo -> master -> dc_scan_opt_mode == 0 ) {
916
+ /* 1 DC scan for all components */
910
917
scanptr = fill_dc_scans (scanptr , ncomps , 0 , 0 );
911
- else if (cinfo -> master -> dc_scan_opt_mode == 1 ) {
918
+ } else if (cinfo -> master -> dc_scan_opt_mode == 1 ) {
919
+ /* 1 DC scan for each component */
912
920
scanptr = fill_a_scan (scanptr , 0 , 0 , 0 , 0 , 0 );
913
921
scanptr = fill_a_scan (scanptr , 1 , 0 , 0 , 0 , 0 );
914
922
scanptr = fill_a_scan (scanptr , 2 , 0 , 0 , 0 , 0 );
915
- }
916
- else {
923
+ } else {
924
+ /* 1 DC scan for luminance and 1 DC scan for chroma */
917
925
scanptr = fill_dc_scans (scanptr , 1 , 0 , 0 );
918
926
scanptr = fill_a_scan_pair (scanptr , 1 , 0 , 0 , 0 , 0 );
919
927
}
0 commit comments