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:
17
turbojpeg.c
17
turbojpeg.c
@@ -359,6 +359,23 @@ static int getSubsamp(j_decompress_ptr dinfo)
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user