< prev index next >
src/java.desktop/share/native/libjavajpeg/imageioJPEG.c
Print this page
*** 1608,1617 ****
--- 1608,1618 ----
jboolean reset) {
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;
struct jpeg_source_mgr *src;
sun_jpeg_error_ptr jerr;
*** 1709,1740 ****
cinfo->jpeg_color_space = JCS_UNKNOWN;
cinfo->out_color_space = JCS_UNKNOWN;
}
} else if (!cinfo->saw_JFIF_marker && !IS_EXIF(cinfo)) {
/*
! * IJG assumes all unidentified 3-channels are YCbCr.
! * We assume that only if the second two channels are
! * subsampled (either horizontally or vertically). If not,
! * we assume RGB.
! *
! * 4776576: Some digital cameras output YCbCr JPEG images
! * that do not contain a JFIF APP0 marker but are only
! * vertically subsampled (no horizontal subsampling).
! * We should only assume this is RGB data if the subsampling
! * factors for the second two channels are the same as the
! * first (check both horizontal and vertical factors).
*/
h_samp0 = cinfo->comp_info[0].h_samp_factor;
h_samp1 = cinfo->comp_info[1].h_samp_factor;
h_samp2 = cinfo->comp_info[2].h_samp_factor;
v_samp0 = cinfo->comp_info[0].v_samp_factor;
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))
{
cinfo->jpeg_color_space = JCS_RGB;
/* output is already RGB, so it stays the same */
}
}
--- 1710,1744 ----
cinfo->jpeg_color_space = JCS_UNKNOWN;
cinfo->out_color_space = JCS_UNKNOWN;
}
} else if (!cinfo->saw_JFIF_marker && !IS_EXIF(cinfo)) {
/*
! * In the absence of certain markers, IJG has interpreted
! * component id's of [1,2,3] as meaning YCbCr.We follow that
! * interpretation, which is additionally described in the Image
! * I/O JPEG metadata spec.If that condition is not met here the
! * next step will be to examine the subsampling factors, if
! * there is any difference in subsampling factors we also assume
! * YCbCr, only if both horizontal and vertical subsampling
! * is same we assume JPEG color space as RGB.
! * This is also described in the Image I/O JPEG metadata spec.
*/
h_samp0 = cinfo->comp_info[0].h_samp_factor;
h_samp1 = cinfo->comp_info[1].h_samp_factor;
h_samp2 = cinfo->comp_info[2].h_samp_factor;
v_samp0 = cinfo->comp_info[0].v_samp_factor;
v_samp1 = cinfo->comp_info[1].v_samp_factor;
v_samp2 = cinfo->comp_info[2].v_samp_factor;
! cid0 = cinfo->comp_info[0].component_id;
! cid1 = cinfo->comp_info[1].component_id;
! cid2 = cinfo->comp_info[2].component_id;
!
! 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 */
}
}
< prev index next >