diff options
author | hbono@chromium.org <hbono@chromium.org@4ff67af0-8c30-449e-8e8b-ad334ec8d88c> | 2011-11-29 05:16:26 +0000 |
---|---|---|
committer | hbono@chromium.org <hbono@chromium.org@4ff67af0-8c30-449e-8e8b-ad334ec8d88c> | 2011-11-29 05:16:26 +0000 |
commit | c6beb74efd1b43982a5b6c957c57426442359c17 (patch) | |
tree | eb0161babfcef429f7feccb7c407b6d66fa9290a /turbojpeg.c | |
parent | dd03f0f2343b6b732fb65fe8bc38811be877e4f8 (diff) |
Update libjpeg-turbo to r722.
This change just updates our copy of libjpeg-turbo to r722.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/8720003
git-svn-id: http://src.chromium.org/svn/trunk/deps/third_party/libjpeg_turbo@111873 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
Diffstat (limited to 'turbojpeg.c')
-rw-r--r-- | turbojpeg.c | 63 |
1 files changed, 54 insertions, 9 deletions
diff --git a/turbojpeg.c b/turbojpeg.c index 5f097a9..9fc60ce 100644 --- a/turbojpeg.c +++ b/turbojpeg.c @@ -132,9 +132,11 @@ static int getPixelFormat(int pixelSize, int flags) return -1; } -static void setCompDefaults(struct jpeg_compress_struct *cinfo, +static int setCompDefaults(struct jpeg_compress_struct *cinfo, int pixelFormat, int subsamp, int jpegQual) { + int retval=0; + switch(pixelFormat) { case TJPF_GRAY: @@ -182,11 +184,18 @@ static void setCompDefaults(struct jpeg_compress_struct *cinfo, cinfo->comp_info[0].v_samp_factor=tjMCUHeight[subsamp]/8; cinfo->comp_info[1].v_samp_factor=1; cinfo->comp_info[2].v_samp_factor=1; + + #if JCS_EXTENSIONS!=1 + bailout: + #endif + return retval; } -static void setDecompDefaults(struct jpeg_decompress_struct *dinfo, +static int setDecompDefaults(struct jpeg_decompress_struct *dinfo, int pixelFormat) { + int retval=0; + switch(pixelFormat) { case TJPF_GRAY: @@ -214,6 +223,11 @@ static void setDecompDefaults(struct jpeg_decompress_struct *dinfo, _throw("Unsupported pixel format"); #endif } + + #if JCS_EXTENSIONS!=1 + bailout: + #endif + return retval; } @@ -416,7 +430,8 @@ DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, unsigned char *srcBuf, alloc=0; *jpegSize=tjBufSize(width, height, jpegSubsamp); } jpeg_mem_dest_tj(cinfo, jpegBuf, jpegSize, alloc); - setCompDefaults(cinfo, pixelFormat, jpegSubsamp, jpegQual); + if(setCompDefaults(cinfo, pixelFormat, jpegSubsamp, jpegQual)==-1) + return -1; jpeg_start_compress(cinfo, TRUE); if((row_pointer=(JSAMPROW *)malloc(sizeof(JSAMPROW)*height))==NULL) @@ -507,7 +522,7 @@ DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf, yuvsize=tjBufSizeYUV(width, height, subsamp); jpeg_mem_dest_tj(cinfo, &dstBuf, &yuvsize, 0); - setCompDefaults(cinfo, pixelFormat, subsamp, -1); + if(setCompDefaults(cinfo, pixelFormat, subsamp, -1)==-1) return -1; jpeg_start_compress(cinfo, TRUE); pw=PAD(width, cinfo->max_h_samp_factor); @@ -729,7 +744,7 @@ DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, unsigned char *jpegBuf, jpeg_mem_src_tj(dinfo, jpegBuf, jpegSize); jpeg_read_header(dinfo, TRUE); - setDecompDefaults(dinfo, pixelFormat); + if(setDecompDefaults(dinfo, pixelFormat)==-1) return -1; if(flags&TJFLAG_FASTUPSAMPLE) dinfo->do_fancy_upsampling=FALSE; @@ -1023,15 +1038,45 @@ DLLEXPORT int DLLCALL tjTransform(tjhandle handle, unsigned char *jpegBuf, { alloc=0; dstSizes[i]=tjBufSize(w, h, jpegSubsamp); } - jpeg_mem_dest_tj(cinfo, &dstBufs[i], &dstSizes[i], alloc); + if(!(t[i].options&TJXOPT_NOOUTPUT)) + jpeg_mem_dest_tj(cinfo, &dstBufs[i], &dstSizes[i], alloc); jpeg_copy_critical_parameters(dinfo, cinfo); dstcoefs=jtransform_adjust_parameters(dinfo, cinfo, srccoefs, &xinfo[i]); - jpeg_write_coefficients(cinfo, dstcoefs); - jcopy_markers_execute(dinfo, cinfo, JCOPYOPT_ALL); + if(!(t[i].options&TJXOPT_NOOUTPUT)) + { + jpeg_write_coefficients(cinfo, dstcoefs); + jcopy_markers_execute(dinfo, cinfo, JCOPYOPT_ALL); + } + else jinit_c_master_control(cinfo, TRUE); jtransform_execute_transformation(dinfo, cinfo, srccoefs, &xinfo[i]); - jpeg_finish_compress(cinfo); + if(t[i].customFilter) + { + int ci, by, y; + for(ci=0; ci<cinfo->num_components; ci++) + { + jpeg_component_info *compptr=&cinfo->comp_info[ci]; + tjregion arrayRegion={0, 0, compptr->width_in_blocks*DCTSIZE, + DCTSIZE}; + tjregion planeRegion={0, 0, compptr->width_in_blocks*DCTSIZE, + compptr->height_in_blocks*DCTSIZE}; + for(by=0; by<compptr->height_in_blocks; by+=compptr->v_samp_factor) + { + JBLOCKARRAY barray=(dinfo->mem->access_virt_barray) + ((j_common_ptr)dinfo, dstcoefs[ci], by, compptr->v_samp_factor, + TRUE); + for(y=0; y<compptr->v_samp_factor; y++) + { + if(t[i].customFilter(barray[y][0], arrayRegion, planeRegion, + ci, i, &t[i])==-1) + _throw("tjTransform(): Error in custom filter"); + arrayRegion.y+=DCTSIZE; + } + } + } + } + if(!(t[i].options&TJXOPT_NOOUTPUT)) jpeg_finish_compress(cinfo); } jpeg_finish_decompress(dinfo); |