TurboJPEG: Decompress 4:4:4 JPEGs with unusual SFs
Normally, 4:4:4 JPEGs have horizontal x vertical luminance & chrominance sampling factors of 1x1. However, it is technically legal to create 4:4:4 JPEGs with sampling factors of 2x1, 1x2, 3x1, or 1x3, since the sums of the products of those sampling factors are still <= 10. The libjpeg API correctly decodes such images, so the TurboJPEG API should as well. Fixes #323
This commit is contained in:
@@ -22,6 +22,12 @@ djpeg.
|
|||||||
decompress a specially-crafted malformed JPEG image with a specified image
|
decompress a specially-crafted malformed JPEG image with a specified image
|
||||||
width or height of 0 using the C version of TJBench.
|
width or height of 0 using the C version of TJBench.
|
||||||
|
|
||||||
|
5. The TurboJPEG API will now decompress 4:4:4 JPEG images with 2x1, 1x2, 3x1,
|
||||||
|
or 1x3 luminance and chrominance sampling factors. This is a non-standard way
|
||||||
|
of specifying 1x subsampling (normally 4:4:4 JPEGs have 1x1 luminance and
|
||||||
|
chrominance sampling factors), but the JPEG format and the libjpeg API both
|
||||||
|
allow it.
|
||||||
|
|
||||||
|
|
||||||
2.0.1
|
2.0.1
|
||||||
=====
|
=====
|
||||||
|
|||||||
17
turbojpeg.c
17
turbojpeg.c
@@ -359,6 +359,23 @@ static int getSubsamp(j_decompress_ptr dinfo)
|
|||||||
retval = i; break;
|
retval = i; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Handle 4:4:4 images whose sampling factors are specified in
|
||||||
|
non-standard ways. */
|
||||||
|
if (dinfo->comp_info[0].h_samp_factor *
|
||||||
|
dinfo->comp_info[0].v_samp_factor <=
|
||||||
|
D_MAX_BLOCKS_IN_MCU / pixelsize[i] && i == TJSAMP_444) {
|
||||||
|
int match = 0;
|
||||||
|
for (k = 1; k < dinfo->num_components; k++) {
|
||||||
|
if (dinfo->comp_info[i].h_samp_factor ==
|
||||||
|
dinfo->comp_info[0].h_samp_factor &&
|
||||||
|
dinfo->comp_info[i].v_samp_factor ==
|
||||||
|
dinfo->comp_info[0].v_samp_factor)
|
||||||
|
match++;
|
||||||
|
if (match == dinfo->num_components - 1) {
|
||||||
|
retval = i; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
|
|||||||
Reference in New Issue
Block a user