Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: turbojpeg.c

Issue 8720003: Update libjpeg-turbo to r722. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libjpeg_turbo/
Patch Set: '' Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « turbojpeg.h ('k') | turbojpeg-jni.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C)2009-2011 D. R. Commander. All Rights Reserved. 2 * Copyright (C)2009-2011 D. R. Commander. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met: 5 * modification, are permitted provided that the following conditions are met:
6 * 6 *
7 * - Redistributions of source code must retain the above copyright notice, 7 * - Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer. 8 * this list of conditions and the following disclaimer.
9 * - Redistributions in binary form must reproduce the above copyright notice, 9 * - Redistributions in binary form must reproduce the above copyright notice,
10 * this list of conditions and the following disclaimer in the documentation 10 * this list of conditions and the following disclaimer in the documentation
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 125 }
126 else 126 else
127 { 127 {
128 if(flags&TJ_BGR) return TJPF_BGRX; 128 if(flags&TJ_BGR) return TJPF_BGRX;
129 else return TJPF_RGBX; 129 else return TJPF_RGBX;
130 } 130 }
131 } 131 }
132 return -1; 132 return -1;
133 } 133 }
134 134
135 static void setCompDefaults(struct jpeg_compress_struct *cinfo, 135 static int setCompDefaults(struct jpeg_compress_struct *cinfo,
136 int pixelFormat, int subsamp, int jpegQual) 136 int pixelFormat, int subsamp, int jpegQual)
137 { 137 {
138 int retval=0;
139
138 switch(pixelFormat) 140 switch(pixelFormat)
139 { 141 {
140 case TJPF_GRAY: 142 case TJPF_GRAY:
141 cinfo->in_color_space=JCS_GRAYSCALE; break; 143 cinfo->in_color_space=JCS_GRAYSCALE; break;
142 #if JCS_EXTENSIONS==1 144 #if JCS_EXTENSIONS==1
143 case TJPF_RGB: 145 case TJPF_RGB:
144 cinfo->in_color_space=JCS_EXT_RGB; break; 146 cinfo->in_color_space=JCS_EXT_RGB; break;
145 case TJPF_BGR: 147 case TJPF_BGR:
146 cinfo->in_color_space=JCS_EXT_BGR; break; 148 cinfo->in_color_space=JCS_EXT_BGR; break;
147 case TJPF_RGBX: 149 case TJPF_RGBX:
(...skipping 27 matching lines...) Expand all
175 jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); 177 jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
176 else 178 else
177 jpeg_set_colorspace(cinfo, JCS_YCbCr); 179 jpeg_set_colorspace(cinfo, JCS_YCbCr);
178 180
179 cinfo->comp_info[0].h_samp_factor=tjMCUWidth[subsamp]/8; 181 cinfo->comp_info[0].h_samp_factor=tjMCUWidth[subsamp]/8;
180 cinfo->comp_info[1].h_samp_factor=1; 182 cinfo->comp_info[1].h_samp_factor=1;
181 cinfo->comp_info[2].h_samp_factor=1; 183 cinfo->comp_info[2].h_samp_factor=1;
182 cinfo->comp_info[0].v_samp_factor=tjMCUHeight[subsamp]/8; 184 cinfo->comp_info[0].v_samp_factor=tjMCUHeight[subsamp]/8;
183 cinfo->comp_info[1].v_samp_factor=1; 185 cinfo->comp_info[1].v_samp_factor=1;
184 cinfo->comp_info[2].v_samp_factor=1; 186 cinfo->comp_info[2].v_samp_factor=1;
187
188 #if JCS_EXTENSIONS!=1
189 bailout:
190 #endif
191 return retval;
185 } 192 }
186 193
187 static void setDecompDefaults(struct jpeg_decompress_struct *dinfo, 194 static int setDecompDefaults(struct jpeg_decompress_struct *dinfo,
188 int pixelFormat) 195 int pixelFormat)
189 { 196 {
197 int retval=0;
198
190 switch(pixelFormat) 199 switch(pixelFormat)
191 { 200 {
192 case TJPF_GRAY: 201 case TJPF_GRAY:
193 dinfo->out_color_space=JCS_GRAYSCALE; break; 202 dinfo->out_color_space=JCS_GRAYSCALE; break;
194 #if JCS_EXTENSIONS==1 203 #if JCS_EXTENSIONS==1
195 case TJPF_RGB: 204 case TJPF_RGB:
196 dinfo->out_color_space=JCS_EXT_RGB; break; 205 dinfo->out_color_space=JCS_EXT_RGB; break;
197 case TJPF_BGR: 206 case TJPF_BGR:
198 dinfo->out_color_space=JCS_EXT_BGR; break; 207 dinfo->out_color_space=JCS_EXT_BGR; break;
199 case TJPF_RGBX: 208 case TJPF_RGBX:
200 dinfo->out_color_space=JCS_EXT_RGBX; break; 209 dinfo->out_color_space=JCS_EXT_RGBX; break;
201 case TJPF_BGRX: 210 case TJPF_BGRX:
202 dinfo->out_color_space=JCS_EXT_BGRX; break; 211 dinfo->out_color_space=JCS_EXT_BGRX; break;
203 case TJPF_XRGB: 212 case TJPF_XRGB:
204 dinfo->out_color_space=JCS_EXT_XRGB; break; 213 dinfo->out_color_space=JCS_EXT_XRGB; break;
205 case TJPF_XBGR: 214 case TJPF_XBGR:
206 dinfo->out_color_space=JCS_EXT_XBGR; break; 215 dinfo->out_color_space=JCS_EXT_XBGR; break;
207 #else 216 #else
208 case TJPF_RGB: 217 case TJPF_RGB:
209 if(RGB_RED==0 && RGB_GREEN==1 && RGB_BLUE==2 && RGB_PIXE LSIZE==3) 218 if(RGB_RED==0 && RGB_GREEN==1 && RGB_BLUE==2 && RGB_PIXE LSIZE==3)
210 { 219 {
211 dinfo->out_color_space=JCS_RGB; break; 220 dinfo->out_color_space=JCS_RGB; break;
212 } 221 }
213 default: 222 default:
214 _throw("Unsupported pixel format"); 223 _throw("Unsupported pixel format");
215 #endif 224 #endif
216 } 225 }
226
227 #if JCS_EXTENSIONS!=1
228 bailout:
229 #endif
230 return retval;
217 } 231 }
218 232
219 233
220 static int getSubsamp(j_decompress_ptr dinfo) 234 static int getSubsamp(j_decompress_ptr dinfo)
221 { 235 {
222 int retval=-1, i, k; 236 int retval=-1, i, k;
223 for(i=0; i<NUMSUBOPT; i++) 237 for(i=0; i<NUMSUBOPT; i++)
224 { 238 {
225 if(dinfo->num_components==pixelsize[i]) 239 if(dinfo->num_components==pixelsize[i])
226 { 240 {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 423
410 if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1"); 424 if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
411 else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1"); 425 else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
412 else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1"); 426 else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
413 427
414 if(flags&TJFLAG_NOREALLOC) 428 if(flags&TJFLAG_NOREALLOC)
415 { 429 {
416 alloc=0; *jpegSize=tjBufSize(width, height, jpegSubsamp); 430 alloc=0; *jpegSize=tjBufSize(width, height, jpegSubsamp);
417 } 431 }
418 jpeg_mem_dest_tj(cinfo, jpegBuf, jpegSize, alloc); 432 jpeg_mem_dest_tj(cinfo, jpegBuf, jpegSize, alloc);
419 » setCompDefaults(cinfo, pixelFormat, jpegSubsamp, jpegQual); 433 » if(setCompDefaults(cinfo, pixelFormat, jpegSubsamp, jpegQual)==-1)
434 » » return -1;
420 435
421 jpeg_start_compress(cinfo, TRUE); 436 jpeg_start_compress(cinfo, TRUE);
422 if((row_pointer=(JSAMPROW *)malloc(sizeof(JSAMPROW)*height))==NULL) 437 if((row_pointer=(JSAMPROW *)malloc(sizeof(JSAMPROW)*height))==NULL)
423 _throw("tjCompress2(): Memory allocation failure"); 438 _throw("tjCompress2(): Memory allocation failure");
424 for(i=0; i<height; i++) 439 for(i=0; i<height; i++)
425 { 440 {
426 if(flags&TJFLAG_BOTTOMUP) row_pointer[i]=&srcBuf[(height-i-1)*pi tch]; 441 if(flags&TJFLAG_BOTTOMUP) row_pointer[i]=&srcBuf[(height-i-1)*pi tch];
427 else row_pointer[i]=&srcBuf[i*pitch]; 442 else row_pointer[i]=&srcBuf[i*pitch];
428 } 443 }
429 while(cinfo->next_scanline<cinfo->image_height) 444 while(cinfo->next_scanline<cinfo->image_height)
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 515
501 cinfo->image_width=width; 516 cinfo->image_width=width;
502 cinfo->image_height=height; 517 cinfo->image_height=height;
503 518
504 if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1"); 519 if(flags&TJFLAG_FORCEMMX) putenv("JSIMD_FORCEMMX=1");
505 else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1"); 520 else if(flags&TJFLAG_FORCESSE) putenv("JSIMD_FORCESSE=1");
506 else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1"); 521 else if(flags&TJFLAG_FORCESSE2) putenv("JSIMD_FORCESSE2=1");
507 522
508 yuvsize=tjBufSizeYUV(width, height, subsamp); 523 yuvsize=tjBufSizeYUV(width, height, subsamp);
509 jpeg_mem_dest_tj(cinfo, &dstBuf, &yuvsize, 0); 524 jpeg_mem_dest_tj(cinfo, &dstBuf, &yuvsize, 0);
510 » setCompDefaults(cinfo, pixelFormat, subsamp, -1); 525 » if(setCompDefaults(cinfo, pixelFormat, subsamp, -1)==-1) return -1;
511 526
512 jpeg_start_compress(cinfo, TRUE); 527 jpeg_start_compress(cinfo, TRUE);
513 pw=PAD(width, cinfo->max_h_samp_factor); 528 pw=PAD(width, cinfo->max_h_samp_factor);
514 ph=PAD(height, cinfo->max_v_samp_factor); 529 ph=PAD(height, cinfo->max_v_samp_factor);
515 530
516 if((row_pointer=(JSAMPROW *)malloc(sizeof(JSAMPROW)*ph))==NULL) 531 if((row_pointer=(JSAMPROW *)malloc(sizeof(JSAMPROW)*ph))==NULL)
517 _throw("tjEncodeYUV2(): Memory allocation failure"); 532 _throw("tjEncodeYUV2(): Memory allocation failure");
518 for(i=0; i<height; i++) 533 for(i=0; i<height; i++)
519 { 534 {
520 if(flags&TJFLAG_BOTTOMUP) row_pointer[i]=&srcBuf[(height-i-1)*pi tch]; 535 if(flags&TJFLAG_BOTTOMUP) row_pointer[i]=&srcBuf[(height-i-1)*pi tch];
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 737
723 if(setjmp(this->jerr.setjmp_buffer)) 738 if(setjmp(this->jerr.setjmp_buffer))
724 { 739 {
725 /* If we get here, the JPEG code has signaled an error. */ 740 /* If we get here, the JPEG code has signaled an error. */
726 retval=-1; 741 retval=-1;
727 goto bailout; 742 goto bailout;
728 } 743 }
729 744
730 jpeg_mem_src_tj(dinfo, jpegBuf, jpegSize); 745 jpeg_mem_src_tj(dinfo, jpegBuf, jpegSize);
731 jpeg_read_header(dinfo, TRUE); 746 jpeg_read_header(dinfo, TRUE);
732 » setDecompDefaults(dinfo, pixelFormat); 747 » if(setDecompDefaults(dinfo, pixelFormat)==-1) return -1;
733 748
734 if(flags&TJFLAG_FASTUPSAMPLE) dinfo->do_fancy_upsampling=FALSE; 749 if(flags&TJFLAG_FASTUPSAMPLE) dinfo->do_fancy_upsampling=FALSE;
735 750
736 jpegwidth=dinfo->image_width; jpegheight=dinfo->image_height; 751 jpegwidth=dinfo->image_width; jpegheight=dinfo->image_height;
737 if(width==0) width=jpegwidth; 752 if(width==0) width=jpegwidth;
738 if(height==0) height=jpegheight; 753 if(height==0) height=jpegheight;
739 for(i=0; i<NUMSF; i++) 754 for(i=0; i<NUMSF; i++)
740 { 755 {
741 scaledw=TJSCALED(jpegwidth, sf[i]); 756 scaledw=TJSCALED(jpegwidth, sf[i]);
742 scaledh=TJSCALED(jpegheight, sf[i]); 757 scaledh=TJSCALED(jpegheight, sf[i]);
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 w=dinfo->image_width; h=dinfo->image_height; 1031 w=dinfo->image_width; h=dinfo->image_height;
1017 } 1032 }
1018 else 1033 else
1019 { 1034 {
1020 w=xinfo[i].crop_width; h=xinfo[i].crop_height; 1035 w=xinfo[i].crop_width; h=xinfo[i].crop_height;
1021 } 1036 }
1022 if(flags&TJFLAG_NOREALLOC) 1037 if(flags&TJFLAG_NOREALLOC)
1023 { 1038 {
1024 alloc=0; dstSizes[i]=tjBufSize(w, h, jpegSubsamp); 1039 alloc=0; dstSizes[i]=tjBufSize(w, h, jpegSubsamp);
1025 } 1040 }
1026 » » jpeg_mem_dest_tj(cinfo, &dstBufs[i], &dstSizes[i], alloc); 1041 » » if(!(t[i].options&TJXOPT_NOOUTPUT))
1042 » » » jpeg_mem_dest_tj(cinfo, &dstBufs[i], &dstSizes[i], alloc );
1027 jpeg_copy_critical_parameters(dinfo, cinfo); 1043 jpeg_copy_critical_parameters(dinfo, cinfo);
1028 dstcoefs=jtransform_adjust_parameters(dinfo, cinfo, srccoefs, 1044 dstcoefs=jtransform_adjust_parameters(dinfo, cinfo, srccoefs,
1029 &xinfo[i]); 1045 &xinfo[i]);
1030 » » jpeg_write_coefficients(cinfo, dstcoefs); 1046 » » if(!(t[i].options&TJXOPT_NOOUTPUT))
1031 » » jcopy_markers_execute(dinfo, cinfo, JCOPYOPT_ALL); 1047 » » {
1048 » » » jpeg_write_coefficients(cinfo, dstcoefs);
1049 » » » jcopy_markers_execute(dinfo, cinfo, JCOPYOPT_ALL);
1050 » » }
1051 » » else jinit_c_master_control(cinfo, TRUE);
1032 jtransform_execute_transformation(dinfo, cinfo, srccoefs, 1052 jtransform_execute_transformation(dinfo, cinfo, srccoefs,
1033 &xinfo[i]); 1053 &xinfo[i]);
1034 » » jpeg_finish_compress(cinfo); 1054 » » if(t[i].customFilter)
1055 » » {
1056 » » » int ci, by, y;
1057 » » » for(ci=0; ci<cinfo->num_components; ci++)
1058 » » » {
1059 » » » » jpeg_component_info *compptr=&cinfo->comp_info[c i];
1060 » » » » tjregion arrayRegion={0, 0, compptr->width_in_bl ocks*DCTSIZE,
1061 » » » » » DCTSIZE};
1062 » » » » tjregion planeRegion={0, 0, compptr->width_in_bl ocks*DCTSIZE,
1063 » » » » » compptr->height_in_blocks*DCTSIZE};
1064 » » » » for(by=0; by<compptr->height_in_blocks; by+=comp ptr->v_samp_factor)
1065 » » » » {
1066 » » » » » JBLOCKARRAY barray=(dinfo->mem->access_v irt_barray)
1067 » » » » » » ((j_common_ptr)dinfo, dstcoefs[c i], by, compptr->v_samp_factor,
1068 » » » » » » TRUE);
1069 » » » » » for(y=0; y<compptr->v_samp_factor; y++)
1070 » » » » » {
1071 » » » » » » if(t[i].customFilter(barray[y][0 ], arrayRegion, planeRegion,
1072 » » » » » » » ci, i, &t[i])==-1)
1073 » » » » » » » _throw("tjTransform(): E rror in custom filter");
1074 » » » » » » arrayRegion.y+=DCTSIZE;
1075 » » » » » }
1076 » » » » }
1077 » » » }
1078 » » }
1079 » » if(!(t[i].options&TJXOPT_NOOUTPUT)) jpeg_finish_compress(cinfo);
1035 } 1080 }
1036 1081
1037 jpeg_finish_decompress(dinfo); 1082 jpeg_finish_decompress(dinfo);
1038 1083
1039 bailout: 1084 bailout:
1040 if(cinfo->global_state>CSTATE_START) jpeg_abort_compress(cinfo); 1085 if(cinfo->global_state>CSTATE_START) jpeg_abort_compress(cinfo);
1041 if(dinfo->global_state>DSTATE_START) jpeg_abort_decompress(dinfo); 1086 if(dinfo->global_state>DSTATE_START) jpeg_abort_decompress(dinfo);
1042 if(xinfo) free(xinfo); 1087 if(xinfo) free(xinfo);
1043 return retval; 1088 return retval;
1044 } 1089 }
OLDNEW
« no previous file with comments | « turbojpeg.h ('k') | turbojpeg-jni.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698