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
decompress a specially-crafted malformed JPEG image with a specified image
width or height of 0 using the C version of TJBench.
+12. 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.
+
1.5.3
=====
/*
- * Copyright (C)2009-2018 D. R. Commander. All Rights Reserved.
+ * Copyright (C)2009-2019 D. R. Commander. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
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;