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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp

Issue 1331533002: [poc] curve-filter Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Draw layered images with a recording GraphicContext Created 5 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006 Apple Computer, Inc. 2 * Copyright (C) 2006 Apple Computer, Inc.
3 * 3 *
4 * Portions are Copyright (C) 2001-6 mozilla.org 4 * Portions are Copyright (C) 2001-6 mozilla.org
5 * 5 *
6 * Other contributors: 6 * Other contributors:
7 * Stuart Parmenter <stuart@mozilla.com> 7 * Stuart Parmenter <stuart@mozilla.com>
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public 10 * modify it under the terms of the GNU Lesser General Public
(...skipping 21 matching lines...) Expand all
32 * deletingthe provisions above and replace them with the notice and 32 * deletingthe provisions above and replace them with the notice and
33 * other provisions required by the MPL or the GPL, as the case may be. 33 * other provisions required by the MPL or the GPL, as the case may be.
34 * If you do not delete the provisions above, a recipient may use your 34 * If you do not delete the provisions above, a recipient may use your
35 * version of this file under any of the LGPL, the MPL or the GPL. 35 * version of this file under any of the LGPL, the MPL or the GPL.
36 */ 36 */
37 37
38 #include "config.h" 38 #include "config.h"
39 #include "platform/image-decoders/jpeg/JPEGImageDecoder.h" 39 #include "platform/image-decoders/jpeg/JPEGImageDecoder.h"
40 40
41 #include "platform/PlatformInstrumentation.h" 41 #include "platform/PlatformInstrumentation.h"
42 #include "platform/graphics/GraphicsScreen.h"
42 43
43 extern "C" { 44 extern "C" {
44 #include <stdio.h> // jpeglib.h needs stdio FILE. 45 #include <stdio.h> // jpeglib.h needs stdio FILE.
45 #include "jpeglib.h" 46 #include "jpeglib.h"
46 #if USE(ICCJPEG) 47 #if USE(ICCJPEG)
47 #include "iccjpeg.h" 48 #include "iccjpeg.h"
48 #endif 49 #endif
49 #if USE(QCMSLIB) 50 #if USE(QCMSLIB)
50 #include "qcms.h" 51 #include "qcms.h"
51 #endif 52 #endif
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 jpeg_calc_output_dimensions(&m_info); 471 jpeg_calc_output_dimensions(&m_info);
471 m_decoder->setDecodedSize(m_info.output_width, m_info.output_height) ; 472 m_decoder->setDecodedSize(m_info.output_width, m_info.output_height) ;
472 473
473 m_decoder->setOrientation(readImageOrientation(info())); 474 m_decoder->setOrientation(readImageOrientation(info()));
474 475
475 #if USE(QCMSLIB) 476 #if USE(QCMSLIB)
476 // Allow color management of the decoded RGBA pixels if possible. 477 // Allow color management of the decoded RGBA pixels if possible.
477 if (!m_decoder->ignoresGammaAndColorProfile()) { 478 if (!m_decoder->ignoresGammaAndColorProfile()) {
478 ColorProfile colorProfile; 479 ColorProfile colorProfile;
479 readColorProfile(info(), colorProfile); 480 readColorProfile(info(), colorProfile);
480 createColorTransform(colorProfile, colorSpaceHasAlpha(m_info.out _color_space)); 481 bool imageHasAlpha = colorSpaceHasAlpha(m_info.out_color_space);
481 if (m_transform) { 482 RefPtr<ColorSpaceProfile> imageColorProfile = createColorTransfo rm(colorProfile, imageHasAlpha);
483 m_decoder->setHasColorProfile(!!imageColorProfile.get());
484
485 if (m_decoder->hasColorProfile() && imageColorProfilesEnabled()) {
486 // FIXME: allow YUV decoding of color profiled images.
487 overrideColorSpace = JCS_UNKNOWN;
488 RELEASE_ASSERT(imageColorProfile->profile());
489 m_decoder->setColorProfile(imageColorProfile);
490 // Do not color correct decoded frames during decoding.
491 clearColorTransform();
492 RELEASE_ASSERT(!m_transform);
493 }
494
495 if (m_decoder->hasColorProfile() && !imageColorProfilesEnabled() ) {
496 // FIXME: allow YUV decoding of color profiled images.
482 overrideColorSpace = JCS_UNKNOWN; 497 overrideColorSpace = JCS_UNKNOWN;
483 #if defined(TURBO_JPEG_RGB_SWIZZLE) 498 #if defined(TURBO_JPEG_RGB_SWIZZLE)
484 // Input RGBA data to qcms. Note: restored to BGRA on output . 499 // Input RGBA data to qcms. Note: restored to BGRA on output .
485 if (m_info.out_color_space == JCS_EXT_BGRA) 500 if (m_info.out_color_space == JCS_EXT_BGRA)
486 m_info.out_color_space = JCS_EXT_RGBA; 501 m_info.out_color_space = JCS_EXT_RGBA;
487 #endif 502 #endif
488 } 503 }
489 m_decoder->setHasColorProfile(!!m_transform);
490 } 504 }
491 #endif 505 #endif
492 if (overrideColorSpace == JCS_YCbCr) { 506 if (overrideColorSpace == JCS_YCbCr) {
493 m_info.out_color_space = JCS_YCbCr; 507 m_info.out_color_space = JCS_YCbCr;
494 m_info.raw_data_out = TRUE; 508 m_info.raw_data_out = TRUE;
495 m_uvSize = computeYUVSize(&m_info, 1, ImageDecoder::SizeForMemor yAllocation); // U size and V size have to be the same if we got here 509 m_uvSize = computeYUVSize(&m_info, 1, ImageDecoder::SizeForMemor yAllocation); // U size and V size have to be the same if we got here
496 } 510 }
497 511
498 // Don't allocate a giant and superfluous memory buffer when the 512 // Don't allocate a giant and superfluous memory buffer when the
499 // image is a sequential JPEG. 513 // image is a sequential JPEG.
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 #if USE(QCMSLIB) 642 #if USE(QCMSLIB)
629 qcms_transform* colorTransform() const { return m_transform; } 643 qcms_transform* colorTransform() const { return m_transform; }
630 644
631 void clearColorTransform() 645 void clearColorTransform()
632 { 646 {
633 if (m_transform) 647 if (m_transform)
634 qcms_transform_release(m_transform); 648 qcms_transform_release(m_transform);
635 m_transform = 0; 649 m_transform = 0;
636 } 650 }
637 651
638 void createColorTransform(const ColorProfile& colorProfile, bool hasAlpha) 652 PassRefPtr<ColorSpaceProfile> createColorTransform(const ColorProfile& color Profile, bool hasAlpha)
639 { 653 {
640 clearColorTransform(); 654 clearColorTransform();
641 655
642 if (colorProfile.isEmpty()) 656 if (colorProfile.isEmpty())
643 return; 657 return nullptr;
658
644 qcms_profile* deviceProfile = ImageDecoder::qcmsOutputDeviceProfile(); 659 qcms_profile* deviceProfile = ImageDecoder::qcmsOutputDeviceProfile();
645 if (!deviceProfile) 660 if (!deviceProfile)
646 return; 661 return nullptr;
662
647 qcms_profile* inputProfile = qcms_profile_from_memory(colorProfile.data( ), colorProfile.size()); 663 qcms_profile* inputProfile = qcms_profile_from_memory(colorProfile.data( ), colorProfile.size());
648 if (!inputProfile) 664 if (!inputProfile)
649 return; 665 return nullptr;
666
650 // We currently only support color profiles for RGB profiled images. 667 // We currently only support color profiles for RGB profiled images.
651 ASSERT(rgbData == qcms_profile_get_color_space(inputProfile)); 668 ASSERT(rgbData == qcms_profile_get_color_space(inputProfile));
652 qcms_data_type dataFormat = hasAlpha ? QCMS_DATA_RGBA_8 : QCMS_DATA_RGB_ 8; 669 qcms_data_type dataFormat = hasAlpha ? QCMS_DATA_RGBA_8 : QCMS_DATA_RGB_ 8;
653 // FIXME: Don't force perceptual intent if the image profile contains an intent. 670 // FIXME: Don't force perceptual intent if the image profile contains an intent.
654 m_transform = qcms_transform_create(inputProfile, dataFormat, deviceProf ile, dataFormat, QCMS_INTENT_PERCEPTUAL); 671 m_transform = qcms_transform_create(inputProfile, dataFormat, deviceProf ile, dataFormat, QCMS_INTENT_PERCEPTUAL);
672 if (m_transform)
673 return ColorSpaceProfile::create(inputProfile);
674
655 qcms_profile_release(inputProfile); 675 qcms_profile_release(inputProfile);
676 return nullptr;
656 } 677 }
657 #endif 678 #endif
658 679
659 private: 680 private:
660 JSAMPARRAY allocateSampleArray() 681 JSAMPARRAY allocateSampleArray()
661 { 682 {
662 // Some output color spaces don't need the sample array: don't allocate in that case. 683 // Some output color spaces don't need the sample array: don't allocate in that case.
663 #if defined(TURBO_JPEG_RGB_SWIZZLE) 684 #if defined(TURBO_JPEG_RGB_SWIZZLE)
664 if (turboSwizzled(m_info.out_color_space)) 685 if (turboSwizzled(m_info.out_color_space))
665 return nullptr; 686 return nullptr;
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 // has failed. 1081 // has failed.
1061 if (!m_reader->decode(onlySize) && isAllDataReceived()) 1082 if (!m_reader->decode(onlySize) && isAllDataReceived())
1062 setFailed(); 1083 setFailed();
1063 1084
1064 // If decoding is done or failed, we don't need the JPEGImageReader anymore. 1085 // If decoding is done or failed, we don't need the JPEGImageReader anymore.
1065 if (isComplete(this, onlySize) || failed()) 1086 if (isComplete(this, onlySize) || failed())
1066 m_reader.clear(); 1087 m_reader.clear();
1067 } 1088 }
1068 1089
1069 } 1090 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698