--- old/src/java.desktop/share/native/libjavajpeg/imageioJPEG.c 2015-11-23 17:25:20.547512436 +0530 +++ new/src/java.desktop/share/native/libjavajpeg/imageioJPEG.c 2015-11-23 17:25:20.327512436 +0530 @@ -1610,6 +1610,7 @@ int ret; int h_samp0, h_samp1, h_samp2; int v_samp0, v_samp1, v_samp2; + int cid0, cid1, cid2; jboolean retval = JNI_FALSE; imageIODataPtr data = (imageIODataPtr)jlong_to_ptr(ptr); j_decompress_ptr cinfo; @@ -1731,8 +1732,20 @@ v_samp1 = cinfo->comp_info[1].v_samp_factor; v_samp2 = cinfo->comp_info[2].v_samp_factor; - if ((h_samp1 == h_samp0) && (h_samp2 == h_samp0) && - (v_samp1 == v_samp0) && (v_samp2 == v_samp0)) + cid0 = cinfo->comp_info[0].component_id; + cid1 = cinfo->comp_info[1].component_id; + cid2 = cinfo->comp_info[2].component_id; + + /* + * 8041501 : Added extra check to verify component ID's + * before checking sampling factors, because if we dont + * check component ID's we will be overwriting decision + * made in jdapimin.c to set default compression parameters. + */ + + if ((!(cid0 == 1 && cid1 == 2 && cid2 == 3)) && + ((h_samp1 == h_samp0) && (h_samp2 == h_samp0) && + (v_samp1 == v_samp0) && (v_samp2 == v_samp0))) { cinfo->jpeg_color_space = JCS_RGB; /* output is already RGB, so it stays the same */