From: DRC Date: Mon, 10 Mar 2014 09:34:04 +0000 (+0000) Subject: When tjDecodeYUV() is used with a "fresh" decompressor instance (one that hasn't... X-Git-Tag: 1.3.90~144 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c90144950ffc9e58f942f1be7fc18e7820a14eb7;p=libjpeg-turbo When tjDecodeYUV() is used with a "fresh" decompressor instance (one that hasn't been previously used to decompress a JPEG image), then it needs comps_in_scan, data_precision, and the quantization tables to be defined. This patch also extends TJUnitTest to check for this error. git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1143 632fc199-4ca6-4c93-a231-07263d6284db --- diff --git a/tjunittest.c b/tjunittest.c index 6920ea1..d2d3e98 100644 --- a/tjunittest.c +++ b/tjunittest.c @@ -414,14 +414,17 @@ void compTest(tjhandle handle, unsigned char **dstBuf, { unsigned long yuvSize=tjBufSizeYUV2(w, pad, h, subsamp); tjscalingfactor sf={1, 1}; + tjhandle handle2=tjInitCompress(); + if(!handle2) _throwtj(); if((yuvBuf=(unsigned char *)malloc(yuvSize))==NULL) _throw("Memory allocation failure"); memset(yuvBuf, 0, yuvSize); printf("%s %s -> YUV %s ... ", pfStr, buStrLong, subNameLong[subsamp]); - _tj(tjEncodeYUV3(handle, srcBuf, w, 0, h, pf, yuvBuf, pad, subsamp, + _tj(tjEncodeYUV3(handle2, srcBuf, w, 0, h, pf, yuvBuf, pad, subsamp, flags)); + tjDestroy(handle2); snprintf(tempStr, 1024, "%s_enc_%s_%s_%s.yuv", basename, pfStr, buStr, subName[subsamp]); writeJPEG(yuvBuf, yuvSize, tempStr); @@ -476,6 +479,8 @@ void _decompTest(tjhandle handle, unsigned char *jpegBuf, { unsigned long yuvSize=tjBufSizeYUV2(scaledWidth, pad, scaledHeight, subsamp); + tjhandle handle2=tjInitDecompress(); + if(!handle2) _throwtj(); if((yuvBuf=(unsigned char *)malloc(yuvSize))==NULL) _throw("Memory allocation failure"); @@ -493,8 +498,9 @@ void _decompTest(tjhandle handle, unsigned char *jpegBuf, printf("YUV %s -> %s %s ... ", subNameLong[subsamp], pixFormatStr[pf], (flags&TJFLAG_BOTTOMUP)? "Bottom-Up":"Top-Down "); - _tj(tjDecodeYUV(handle, yuvBuf, pad, subsamp, dstBuf, scaledWidth, 0, + _tj(tjDecodeYUV(handle2, yuvBuf, pad, subsamp, dstBuf, scaledWidth, 0, scaledHeight, pf, flags)); + tjDestroy(handle2); } else { diff --git a/turbojpeg.c b/turbojpeg.c index edcf882..8ccb15e 100644 --- a/turbojpeg.c +++ b/turbojpeg.c @@ -1242,12 +1242,12 @@ static int setDecodeDefaults(struct jpeg_decompress_struct *dinfo, if(subsamp==TJSAMP_GRAY) { - dinfo->num_components=1; + dinfo->num_components=dinfo->comps_in_scan=1; dinfo->jpeg_color_space=JCS_GRAYSCALE; } else { - dinfo->num_components=3; + dinfo->num_components=dinfo->comps_in_scan=3; dinfo->jpeg_color_space=JCS_YCbCr; } @@ -1265,6 +1265,12 @@ static int setDecodeDefaults(struct jpeg_decompress_struct *dinfo, (i==0)? 0:1; dinfo->cur_comp_info[i]=compptr; } + dinfo->data_precision=8; + for(i=0; i<2; i++) + { + if(dinfo->quant_tbl_ptrs[i]==NULL) + dinfo->quant_tbl_ptrs[i]=jpeg_alloc_quant_table((j_common_ptr)dinfo); + } return 0; }