OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../../include/fxcodec/fx_codec.h" | 7 #include "../../../include/fxcodec/fx_codec.h" |
8 #include "codec_int.h" | 8 #include "codec_int.h" |
9 #include "../fx_libopenjpeg/libopenjpeg20/openjpeg.h" | 9 #include "../fx_libopenjpeg/libopenjpeg20/openjpeg.h" |
10 #include "../lcms2/include/fx_lcms2.h" | 10 #include "../lcms2/include/fx_lcms2.h" |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 sycc444_to_rgb(img); | 307 sycc444_to_rgb(img); |
308 } else { | 308 } else { |
309 return; | 309 return; |
310 } | 310 } |
311 img->color_space = OPJ_CLRSPC_SRGB; | 311 img->color_space = OPJ_CLRSPC_SRGB; |
312 } | 312 } |
313 void color_apply_icc_profile(opj_image_t *image) | 313 void color_apply_icc_profile(opj_image_t *image) |
314 { | 314 { |
315 cmsHPROFILE in_prof, out_prof; | 315 cmsHPROFILE in_prof, out_prof; |
316 cmsHTRANSFORM transform; | 316 cmsHTRANSFORM transform; |
| 317 // TODO(tsepez): unused in_space seems suspicious. |
317 cmsColorSpaceSignature in_space, out_space; | 318 cmsColorSpaceSignature in_space, out_space; |
318 cmsUInt32Number intent, in_type, out_type, nr_samples; | 319 cmsUInt32Number intent, in_type, out_type, nr_samples; |
319 int *r, *g, *b; | 320 int *r, *g, *b; |
320 int prec, i, max, max_w, max_h; | 321 int prec, i, max, max_w, max_h; |
321 OPJ_COLOR_SPACE oldspace; | 322 OPJ_COLOR_SPACE oldspace; |
322 in_prof = | 323 in_prof = |
323 cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len); | 324 cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len); |
324 if(in_prof == NULL) { | 325 if(in_prof == NULL) { |
325 return; | 326 return; |
326 } | 327 } |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 numcomps = image->numcomps; | 463 numcomps = image->numcomps; |
463 if(numcomps < 3) { | 464 if(numcomps < 3) { |
464 return; | 465 return; |
465 } | 466 } |
466 row = (int*)image->icc_profile_buf; | 467 row = (int*)image->icc_profile_buf; |
467 enumcs = row[0]; | 468 enumcs = row[0]; |
468 if(enumcs == 14) { | 469 if(enumcs == 14) { |
469 int *L, *a, *b, *red, *green, *blue, *src0, *src1, *src2; | 470 int *L, *a, *b, *red, *green, *blue, *src0, *src1, *src2; |
470 double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2; | 471 double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2; |
471 double minL, maxL, mina, maxa, minb, maxb; | 472 double minL, maxL, mina, maxa, minb, maxb; |
472 unsigned int default_type, il; | 473 unsigned int default_type; |
473 unsigned int i, max, illu; | 474 unsigned int i, max; |
474 cmsHPROFILE in, out; | 475 cmsHPROFILE in, out; |
475 cmsHTRANSFORM transform; | 476 cmsHTRANSFORM transform; |
476 cmsUInt16Number RGB[3]; | 477 cmsUInt16Number RGB[3]; |
477 cmsCIELab Lab; | 478 cmsCIELab Lab; |
478 illu = 0; | |
479 il = 0; | |
480 in = cmsCreateLab4Profile(NULL); | 479 in = cmsCreateLab4Profile(NULL); |
481 out = cmsCreate_sRGBProfile(); | 480 out = cmsCreate_sRGBProfile(); |
482 transform = | 481 transform = |
483 cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16, | 482 cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16, |
484 INTENT_PERCEPTUAL, 0); | 483 INTENT_PERCEPTUAL, 0); |
485 cmsCloseProfile(in); | 484 cmsCloseProfile(in); |
486 cmsCloseProfile(out); | 485 cmsCloseProfile(out); |
487 if(transform == NULL) { | 486 if(transform == NULL) { |
488 return; | 487 return; |
489 } | 488 } |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 { | 665 { |
667 width = (FX_DWORD)image->x1; | 666 width = (FX_DWORD)image->x1; |
668 height = (FX_DWORD)image->y1; | 667 height = (FX_DWORD)image->y1; |
669 output_nComps = codestream_nComps = (FX_DWORD)image->numcomps; | 668 output_nComps = codestream_nComps = (FX_DWORD)image->numcomps; |
670 } | 669 } |
671 FX_BOOL CJPX_Decoder::Decode(FX_LPBYTE dest_buf, int pitch, FX_BOOL bTranslateCo
lor, FX_LPBYTE offsets) | 670 FX_BOOL CJPX_Decoder::Decode(FX_LPBYTE dest_buf, int pitch, FX_BOOL bTranslateCo
lor, FX_LPBYTE offsets) |
672 { | 671 { |
673 FX_BYTE** channel_bufs; | 672 FX_BYTE** channel_bufs; |
674 int* adjust_comps; | 673 int* adjust_comps; |
675 int i, wid, hei, row, col, channel, src; | 674 int i, wid, hei, row, col, channel, src; |
676 FX_BOOL flag; | |
677 FX_LPBYTE pChannel, pScanline, pPixel; | 675 FX_LPBYTE pChannel, pScanline, pPixel; |
678 | 676 |
679 if(image->comps[0].w != image->x1 || image->comps[0].h != image->y1) { | 677 if(image->comps[0].w != image->x1 || image->comps[0].h != image->y1) { |
680 return FALSE; | 678 return FALSE; |
681 } | 679 } |
682 if(pitch < (int)(image->comps[0].w * 8 * image->numcomps + 31) >> 5 << 2) { | 680 if(pitch < (int)(image->comps[0].w * 8 * image->numcomps + 31) >> 5 << 2) { |
683 return FALSE; | 681 return FALSE; |
684 } | 682 } |
685 FXSYS_memset8(dest_buf, 0xff, image->y1 * pitch); | 683 FXSYS_memset8(dest_buf, 0xff, image->y1 * pitch); |
686 channel_bufs = FX_Alloc(FX_BYTE*, image->numcomps); | 684 channel_bufs = FX_Alloc(FX_BYTE*, image->numcomps); |
687 if (channel_bufs == NULL) { | 685 if (channel_bufs == NULL) { |
688 return FALSE; | 686 return FALSE; |
689 } | 687 } |
690 adjust_comps = FX_Alloc(int, image->numcomps); | 688 adjust_comps = FX_Alloc(int, image->numcomps); |
691 if (adjust_comps == NULL) { | 689 if (adjust_comps == NULL) { |
692 FX_Free(channel_bufs); | 690 FX_Free(channel_bufs); |
693 return FALSE; | 691 return FALSE; |
694 } | 692 } |
695 flag = TRUE; | |
696 for (i = 0; i < (int)image->numcomps; i ++) { | 693 for (i = 0; i < (int)image->numcomps; i ++) { |
697 channel_bufs[i] = dest_buf + offsets[i]; | 694 channel_bufs[i] = dest_buf + offsets[i]; |
698 adjust_comps[i] = image->comps[i].prec - 8; | 695 adjust_comps[i] = image->comps[i].prec - 8; |
699 if(i > 0) { | 696 if(i > 0) { |
700 if(image->comps[i].dx != image->comps[i - 1].dx | 697 if(image->comps[i].dx != image->comps[i - 1].dx |
701 || image->comps[i].dy != image->comps[i - 1].dy | 698 || image->comps[i].dy != image->comps[i - 1].dy |
702 || image->comps[i].prec != image->comps[i - 1].prec) { | 699 || image->comps[i].prec != image->comps[i - 1].prec) { |
703 flag = FALSE; | |
704 goto failed; | 700 goto failed; |
705 } | 701 } |
706 } | 702 } |
707 } | 703 } |
708 wid = image->comps[0].w; | 704 wid = image->comps[0].w; |
709 hei = image->comps[0].h; | 705 hei = image->comps[0].h; |
710 for (channel = 0; channel < (int)image->numcomps; channel++) { | 706 for (channel = 0; channel < (int)image->numcomps; channel++) { |
711 pChannel = channel_bufs[channel]; | 707 pChannel = channel_bufs[channel]; |
712 if(adjust_comps[channel] < 0) { | 708 if(adjust_comps[channel] < 0) { |
713 for(row = 0; row < hei; row++) { | 709 for(row = 0; row < hei; row++) { |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
785 FX_BOOL CCodec_JpxModule::Decode(void* ctx, FX_LPBYTE dest_data, int pitch, FX_B
OOL bTranslateColor, FX_LPBYTE offsets) | 781 FX_BOOL CCodec_JpxModule::Decode(void* ctx, FX_LPBYTE dest_data, int pitch, FX_B
OOL bTranslateColor, FX_LPBYTE offsets) |
786 { | 782 { |
787 CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx; | 783 CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx; |
788 return pDecoder->Decode(dest_data, pitch, bTranslateColor, offsets); | 784 return pDecoder->Decode(dest_data, pitch, bTranslateColor, offsets); |
789 } | 785 } |
790 void CCodec_JpxModule::DestroyDecoder(void* ctx) | 786 void CCodec_JpxModule::DestroyDecoder(void* ctx) |
791 { | 787 { |
792 CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx; | 788 CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx; |
793 delete pDecoder; | 789 delete pDecoder; |
794 } | 790 } |
OLD | NEW |