Changeset 120613 in webkit
- Timestamp:
- Jun 18, 2012 11:52:35 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/platform/chromium/TestExpectations
r120591 r120613 1175 1175 BUGCR62433 WIN : fast/images/gif-loop-count.html = IMAGE 1176 1176 1177 // Implement color profile support.1178 BUGCR143 : fast/images/jpeg-with-color-profile.html = MISSING1179 BUGCR143 : fast/images/png-with-color-profile.html = MISSING1180 1181 1177 // ----------------------------------------------------------------- 1182 1178 // SVG TESTS -
trunk/Source/WTF/ChangeLog
r120591 r120613 1 2012-06-18 Tony Payne <tpayne@chromium.org> 2 3 [chromium] Add iccjpeg and qcms to chromium port. 4 https://bugs.webkit.org/show_bug.cgi?id=81974 5 6 * wtf/Platform.h: Add Chromium USE defines for ICCJPEG and QCMSLIB 7 to each Chromium platform, excluding Android. 8 9 Reviewed by Adam Barth. 10 1 11 2012-06-18 Sheriff Bot <webkit.review.bot@gmail.com> 2 12 -
trunk/Source/WTF/wtf/Platform.h
r120591 r120613 468 468 #if PLATFORM(CHROMIUM) 469 469 #if OS(DARWIN) 470 #if USE(SKIA_ON_MAC_CHROMIUM)471 470 #define WTF_USE_SKIA 1 472 #else473 #define WTF_USE_CG 1474 #endif475 471 #define WTF_USE_ATSUI 1 476 472 #define WTF_USE_CORE_TEXT 1 477 473 #define WTF_USE_ICCJPEG 1 474 #define WTF_USE_QCMSLIB 1 478 475 #elif OS(ANDROID) 479 476 #define WTF_USE_SKIA 1 … … 481 478 #define WTF_USE_SKIA 1 482 479 #define WTF_USE_CHROMIUM_NET 1 480 #define WTF_USE_ICCJPEG 1 481 #define WTF_USE_QCMSLIB 1 483 482 #endif 484 483 #endif -
trunk/Source/WebCore/ChangeLog
r120609 r120613 1 2012-06-18 Tony Payne <tpayne@chromium.org> 2 3 [chromium] Add iccjpeg and qcms to chromium port 4 https://bugs.webkit.org/show_bug.cgi?id=81974 5 6 Reviewed by Adam Barth. 7 8 Covered by existing layout tests which will be rebaselined. 9 10 * WebCore.gyp/WebCore.gyp: Add qcms to the build. 11 * platform/image-decoders/ImageDecoder.h: 12 (WebCore::ImageDecoder::qcmsOutputDeviceProfile): Return an sRGB profile. 13 On OSX, return the default RGB profile. Add FIXME to use the user's 14 monitor profile and verify that profile for other platforms. 15 16 * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: 17 (turboSwizzled): For libjpeg-turbo, JCS_EXT_BGRA and JCS_EXT_RGBA are the 18 two known output color spaces for which the decoder uses a data swizzle. 19 (colorSpaceHasAlpha): JPEG's have no alpha in the output color space. For 20 libjpeg-turbo, alpha may be present in the swizzled output color space. 21 22 (WebCore::JPEGImageReader::JPEGImageReader): 23 (WebCore::JPEGImageReader::close): 24 (WebCore::JPEGImageReader::decode): For QCMSLIB, create the color transform 25 to use during decoding, and ensure we switch to inputing RGBA data to qcms 26 even if the desired output data is BGRA: outputScanlines() sends BGRA data 27 to the frame buffer following color correction if needed. 28 (JPEGImageReader): 29 (WebCore::JPEGImageReader::colorTransform): qcms color transform getter. 30 (WebCore::JPEGImageReader::createColorTransform): Create color transform. 31 Release the existing transform (if any) and assign to the color transform 32 created from the color profile data. 33 (WebCore::JPEGImageDecoder::outputScanlines): Minor style fix. Apply color 34 transform to each decoded image row. 35 36 * platform/image-decoders/png/PNGImageDecoder.cpp: 37 (WebCore::PNGImageReader::PNGImageReader): 38 (WebCore::PNGImageReader::close): 39 (WebCore::PNGImageReader::currentBufferSize): Move this adjacent to other 40 setters and getters. 41 (WebCore::PNGImageReader::decodingSizeOnly): Ditto. 42 (WebCore::PNGImageReader::setHasAlpha): Ditto. 43 (WebCore::PNGImageReader::hasAlpha): Ditto. 44 (WebCore::PNGImageReader::interlaceBuffer): Ditto. 45 (WebCore::PNGImageReader::createRowBuffer): Creates a temporary row buffer, 46 used when a color transform is applied to the decoded image pixels. 47 (WebCore::PNGImageReader::rowBuffer): Return the temporary row buffer. 48 (WebCore::PNGImageReader::colorTransform): qcms color transform getter. 49 (WebCore::PNGImageReader::createColorTransform): Create color transform. 50 Release the existing transform (if any) and assign to the color transform 51 created from the color profile data. 52 (WebCore::PNGImageDecoder::headerAvailable): For QCMSLIB, create the color 53 transform to use for decoding. Clear m_colorProfile (not used anymore). 54 (WebCore::PNGImageDecoder::rowAvailable): Create temporary row buffer if 55 a color transform is needed for decoding. Apply color transform to each 56 decoded image row. 57 58 * platform/image-decoders/skia/ImageDecoderSkia.cpp: 59 (WebCore::ImageFrame::setColorProfile): Old method of colorProfiles is no 60 longer used. Add a FIXME to remove the old implementation. 61 (WebCore::ImageFrame::setStatus): Remove old color correction code. 62 1 63 2012-06-18 Dan Bernstein <mitz@apple.com> 2 64 -
trunk/Source/WebCore/WebCore.gyp/WebCore.gyp
r120591 r120613 1113 1113 '<(chromium_src_dir)/third_party/libwebp/libwebp.gyp:libwebp', 1114 1114 '<(chromium_src_dir)/third_party/npapi/npapi.gyp:npapi', 1115 '<(chromium_src_dir)/third_party/qcms/qcms.gyp:qcms', 1115 1116 '<(chromium_src_dir)/third_party/sqlite/sqlite.gyp:sqlite', 1116 1117 '<(chromium_src_dir)/v8/tools/gyp/v8.gyp:v8', … … 1241 1242 '<(chromium_src_dir)/third_party/npapi/npapi.gyp:npapi', 1242 1243 '<(chromium_src_dir)/third_party/ots/ots.gyp:ots', 1244 '<(chromium_src_dir)/third_party/qcms/qcms.gyp:qcms', 1243 1245 '<(chromium_src_dir)/third_party/sqlite/sqlite.gyp:sqlite', 1244 1246 '<(chromium_src_dir)/third_party/angle/src/build_angle.gyp:translator_glsl', … … 1260 1262 '<(chromium_src_dir)/third_party/npapi/npapi.gyp:npapi', 1261 1263 '<(chromium_src_dir)/third_party/ots/ots.gyp:ots', 1264 '<(chromium_src_dir)/third_party/qcms/qcms.gyp:qcms', 1262 1265 '<(chromium_src_dir)/third_party/sqlite/sqlite.gyp:sqlite', 1263 1266 '<(chromium_src_dir)/third_party/angle/src/build_angle.gyp:translator_glsl', … … 2012 2015 '<(chromium_src_dir)/skia/skia.gyp:skia', 2013 2016 '<(chromium_src_dir)/third_party/npapi/npapi.gyp:npapi', 2017 '<(chromium_src_dir)/third_party/qcms/qcms.gyp:qcms', 2014 2018 '<(chromium_src_dir)/v8/tools/gyp/v8.gyp:v8', 2015 2019 ], … … 2020 2024 '<(chromium_src_dir)/skia/skia.gyp:skia', 2021 2025 '<(chromium_src_dir)/third_party/npapi/npapi.gyp:npapi', 2026 '<(chromium_src_dir)/third_party/qcms/qcms.gyp:qcms', 2022 2027 '<(chromium_src_dir)/v8/tools/gyp/v8.gyp:v8', 2023 2028 ], -
trunk/Source/WebCore/platform/image-decoders/ImageDecoder.h
r120591 r120613 43 43 #endif 44 44 45 #if USE(QCMSLIB) 46 #include "qcms.h" 47 #include <wtf/MainThread.h> 48 #if OS(DARWIN) 49 #include "GraphicsContextCG.h" 50 #include <ApplicationServices/ApplicationServices.h> 51 #include <wtf/RetainPtr.h> 52 #endif 53 #endif 54 45 55 namespace WebCore { 46 56 … … 166 176 #if USE(SKIA) 167 177 NativeImageSkia m_bitmap; 168 #if PLATFORM(CHROMIUM) && OS(DARWIN)169 ColorProfile m_colorProfile;170 #endif171 178 #else 172 179 Vector<PixelData> m_backingStore; … … 174 181 IntSize m_size; 175 182 bool m_hasAlpha; 183 // FIXME: Do we need m_colorProfile anymore? 176 184 ColorProfile m_colorProfile; 177 185 #endif … … 290 298 } 291 299 300 #if USE(QCMSLIB) 301 static qcms_profile* qcmsOutputDeviceProfile() 302 { 303 static qcms_profile* outputDeviceProfile = 0; 304 305 static bool qcmsInitialized = false; 306 if (!qcmsInitialized) { 307 qcmsInitialized = true; 308 // FIXME: Add optional ICCv4 support. 309 #if OS(DARWIN) 310 RetainPtr<CGColorSpaceRef> monitorColorSpace(AdoptCF, CGDisplayCopyColorSpace(CGMainDisplayID())); 311 CFDataRef iccProfile(CGColorSpaceCopyICCProfile(monitorColorSpace.get())); 312 if (iccProfile) { 313 size_t length = CFDataGetLength(iccProfile); 314 const unsigned char* systemProfile = CFDataGetBytePtr(iccProfile); 315 outputDeviceProfile = qcms_profile_from_memory(systemProfile, length); 316 if (outputDeviceProfile && qcms_profile_is_bogus(outputDeviceProfile)) { 317 qcms_profile_release(outputDeviceProfile); 318 outputDeviceProfile = 0; 319 } 320 } 321 if (!outputDeviceProfile) 322 outputDeviceProfile = qcms_profile_sRGB(); 323 #else 324 // FIXME: sRGB profiles don't add much value. Use the user's monitor profile. 325 outputDeviceProfile = qcms_profile_sRGB(); 326 #endif 327 // FIXME: Check that the profile is valid. Fallback to sRGB if not? 328 if (outputDeviceProfile) 329 qcms_profile_precache_output_transform(outputDeviceProfile); 330 } 331 return outputDeviceProfile; 332 } 333 #endif 334 292 335 // Sets the "decode failure" flag. For caller convenience (since so 293 336 // many callers want to return false after calling this), returns false … … 321 364 RefPtr<SharedBuffer> m_data; // The encoded data. 322 365 Vector<ImageFrame> m_frameBufferCache; 366 // FIXME: Do we need m_colorProfile any more, for any port? 323 367 ColorProfile m_colorProfile; 324 368 bool m_scaled; -
trunk/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
r120591 r120613 61 61 #include "iccjpeg.h" 62 62 #endif 63 #if USE(QCMSLIB) 64 #include "qcms.h" 65 #endif 63 66 #include <setjmp.h> 64 67 } … … 77 80 inline J_COLOR_SPACE rgbOutputColorSpace() { return JCS_EXT_BGRA; } 78 81 #endif 79 inline bool turboSwizzled(J_COLOR_SPACE colorSpace) { return colorSpace == rgbOutputColorSpace(); } 82 inline bool turboSwizzled(J_COLOR_SPACE colorSpace) { return colorSpace == JCS_EXT_RGBA || colorSpace == JCS_EXT_BGRA; } 83 inline bool colorSpaceHasAlpha(J_COLOR_SPACE colorSpace) { return turboSwizzled(colorSpace); } 80 84 #else 81 85 inline J_COLOR_SPACE rgbOutputColorSpace() { return JCS_RGB; } 86 inline bool colorSpaceHasAlpha(J_COLOR_SPACE) { return false; } 82 87 #endif 83 88 … … 164 169 , m_state(JPEG_HEADER) 165 170 , m_samples(0) 171 #if USE(QCMSLIB) 172 , m_transform(0) 173 #endif 166 174 { 167 175 memset(&m_info, 0, sizeof(jpeg_decompress_struct)); … … 211 219 m_info.src = 0; 212 220 221 #if USE(QCMSLIB) 222 if (m_transform) 223 qcms_transform_release(m_transform); 224 m_transform = 0; 225 #endif 213 226 jpeg_destroy_decompress(&m_info); 214 227 } … … 299 312 if (!rgbInputDeviceColorProfile.isEmpty()) 300 313 m_decoder->setColorProfile(rgbInputDeviceColorProfile); 314 #if USE(QCMSLIB) 315 createColorTransform(rgbInputDeviceColorProfile, colorSpaceHasAlpha(m_info.out_color_space)); 316 #if defined(TURBO_JPEG_RGB_SWIZZLE) 317 // Input RGBA data to qcms. Note: restored to BGRA on output. 318 if (m_transform && m_info.out_color_space == JCS_EXT_BGRA) 319 m_info.out_color_space = JCS_EXT_RGBA; 320 #endif 321 #endif 301 322 } 302 323 … … 403 424 JSAMPARRAY samples() const { return m_samples; } 404 425 JPEGImageDecoder* decoder() { return m_decoder; } 426 #if USE(QCMSLIB) 427 qcms_transform* colorTransform() const { return m_transform; } 428 429 void createColorTransform(const ColorProfile& colorProfile, bool hasAlpha) 430 { 431 if (m_transform) 432 qcms_transform_release(m_transform); 433 m_transform = 0; 434 435 if (colorProfile.isEmpty()) 436 return; 437 qcms_profile* deviceProfile = ImageDecoder::qcmsOutputDeviceProfile(); 438 if (!deviceProfile) 439 return; 440 qcms_profile* inputProfile = qcms_profile_from_memory(colorProfile.data(), colorProfile.size()); 441 if (!inputProfile) 442 return; 443 // We currently only support color profiles for RGB profiled images. 444 ASSERT(icSigRgbData == qcms_profile_get_color_space(inputProfile)); 445 qcms_data_type dataFormat = hasAlpha ? QCMS_DATA_RGBA_8 : QCMS_DATA_RGB_8; 446 // FIXME: Don't force perceptual intent if the image profile contains an intent. 447 m_transform = qcms_transform_create(inputProfile, dataFormat, deviceProfile, dataFormat, QCMS_INTENT_PERCEPTUAL); 448 qcms_profile_release(inputProfile); 449 } 450 #endif 405 451 406 452 private: … … 415 461 416 462 JSAMPARRAY m_samples; 463 464 #if USE(QCMSLIB) 465 qcms_transform* m_transform; 466 #endif 417 467 }; 418 468 … … 522 572 #if !ENABLE(IMAGE_DECODER_DOWN_SAMPLING) && defined(TURBO_JPEG_RGB_SWIZZLE) 523 573 if (turboSwizzled(info->out_color_space)) { 524 ASSERT(!m_scaled); 525 while (info->output_scanline < info->output_height) { 526 unsigned char* row = reinterpret_cast<unsigned char*>(buffer.getAddr(0, info->output_scanline)); 527 if (jpeg_read_scanlines(info, &row, 1) != 1) 528 return false; 574 ASSERT(!m_scaled); 575 while (info->output_scanline < info->output_height) { 576 unsigned char* row = reinterpret_cast<unsigned char*>(buffer.getAddr(0, info->output_scanline)); 577 if (jpeg_read_scanlines(info, &row, 1) != 1) 578 return false; 579 #if USE(QCMSLIB) 580 if (qcms_transform* transform = m_reader->colorTransform()) 581 qcms_transform_data_type(transform, row, row, info->output_width, rgbOutputColorSpace() == JCS_EXT_BGRA ? QCMS_OUTPUT_BGRX : QCMS_OUTPUT_RGBX); 582 #endif 529 583 } 530 584 return true; … … 545 599 if (destY < 0) 546 600 continue; 601 #if USE(QCMSLIB) 602 if (m_reader->colorTransform() && info->out_color_space == JCS_RGB) 603 qcms_transform_data(m_reader->colorTransform(), *samples, *samples, info->output_width); 604 #endif 547 605 int width = m_scaled ? m_scaledColumns.size() : info->output_width; 548 606 for (int x = 0; x < width; ++x) { -
trunk/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
r120591 r120613 42 42 43 43 #include "png.h" 44 #include <wtf/OwnArrayPtr.h> 44 45 #include <wtf/PassOwnPtr.h> 45 46 46 47 #if PLATFORM(CHROMIUM) 47 48 #include "TraceEvent.h" 49 #endif 50 51 #if USE(QCMSLIB) 52 #include "qcms.h" 48 53 #endif 49 54 … … 108 113 PNGImageReader(PNGImageDecoder* decoder) 109 114 : m_readOffset(0) 115 , m_currentBufferSize(0) 110 116 , m_decodingSizeOnly(false) 117 , m_hasAlpha(false) 111 118 , m_interlaceBuffer(0) 112 , m_hasAlpha(false) 113 , m_currentBufferSize(0) 119 #if USE(QCMSLIB) 120 , m_transform(0) 121 , m_rowBuffer() 122 #endif 114 123 { 115 124 m_png = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, decodingFailed, decodingWarning); … … 128 137 // This will zero the pointers. 129 138 png_destroy_read_struct(&m_png, &m_info, 0); 139 #if USE(QCMSLIB) 140 if (m_transform) 141 qcms_transform_release(m_transform); 142 m_transform = 0; 143 #endif 130 144 delete[] m_interlaceBuffer; 131 145 m_interlaceBuffer = 0; 132 146 m_readOffset = 0; 133 147 } 134 135 unsigned currentBufferSize() const { return m_currentBufferSize; }136 148 137 149 bool decode(const SharedBuffer& data, bool sizeOnly) … … 158 170 } 159 171 160 bool decodingSizeOnly() const { return m_decodingSizeOnly; }161 172 png_structp pngPtr() const { return m_png; } 162 173 png_infop infoPtr() const { return m_info; } 174 175 void setReadOffset(unsigned offset) { m_readOffset = offset; } 176 unsigned currentBufferSize() const { return m_currentBufferSize; } 177 bool decodingSizeOnly() const { return m_decodingSizeOnly; } 178 void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; } 179 bool hasAlpha() const { return m_hasAlpha; } 180 163 181 png_bytep interlaceBuffer() const { return m_interlaceBuffer; } 164 bool hasAlpha() const { return m_hasAlpha; }165 166 void setReadOffset(unsigned offset) { m_readOffset = offset; }167 void setHasAlpha(bool b) { m_hasAlpha = b; }168 169 182 void createInterlaceBuffer(int size) { m_interlaceBuffer = new png_byte[size]; } 183 #if USE(QCMSLIB) 184 png_bytep rowBuffer() const { return m_rowBuffer.get(); } 185 void createRowBuffer(int size) { m_rowBuffer = adoptArrayPtr(new png_byte[size]); } 186 qcms_transform* colorTransform() const { return m_transform; } 187 188 void createColorTransform(const ColorProfile& colorProfile, bool hasAlpha) 189 { 190 if (m_transform) 191 qcms_transform_release(m_transform); 192 m_transform = 0; 193 194 if (colorProfile.isEmpty()) 195 return; 196 qcms_profile* deviceProfile = ImageDecoder::qcmsOutputDeviceProfile(); 197 if (!deviceProfile) 198 return; 199 qcms_profile* inputProfile = qcms_profile_from_memory(colorProfile.data(), colorProfile.size()); 200 if (!inputProfile) 201 return; 202 // We currently only support color profiles for RGB and RGBA images. 203 ASSERT(icSigRgbData == qcms_profile_get_color_space(inputProfile)); 204 qcms_data_type dataFormat = hasAlpha ? QCMS_DATA_RGBA_8 : QCMS_DATA_RGB_8; 205 // FIXME: Don't force perceptual intent if the image profile contains an intent. 206 m_transform = qcms_transform_create(inputProfile, dataFormat, deviceProfile, dataFormat, QCMS_INTENT_PERCEPTUAL); 207 qcms_profile_release(inputProfile); 208 } 209 #endif 170 210 171 211 private: 172 unsigned m_readOffset;173 bool m_decodingSizeOnly;174 212 png_structp m_png; 175 213 png_infop m_info; 214 unsigned m_readOffset; 215 unsigned m_currentBufferSize; 216 bool m_decodingSizeOnly; 217 bool m_hasAlpha; 176 218 png_bytep m_interlaceBuffer; 177 bool m_hasAlpha; 178 unsigned m_currentBufferSize; 219 #if USE(QCMSLIB) 220 qcms_transform* m_transform; 221 OwnArrayPtr<png_byte> m_rowBuffer; 222 #endif 179 223 }; 180 224 … … 299 343 // hand that to CoreGraphics. 300 344 readColorProfile(png, info, m_colorProfile); 345 #if USE(QCMSLIB) 346 m_reader->createColorTransform(m_colorProfile, colorType & PNG_COLOR_MASK_ALPHA); 347 m_colorProfile.clear(); 348 #endif 301 349 } 302 350 … … 368 416 } 369 417 418 unsigned colorChannels = m_reader->hasAlpha() ? 4 : 3; 370 419 if (PNG_INTERLACE_ADAM7 == png_get_interlace_type(png, m_reader->infoPtr())) { 371 unsigned colorChannels = m_reader->hasAlpha() ? 4 : 3;372 420 m_reader->createInterlaceBuffer(colorChannels * size().width() * size().height()); 373 421 if (!m_reader->interlaceBuffer()) { … … 377 425 } 378 426 427 #if USE(QCMSLIB) 428 if (m_reader->colorTransform()) { 429 m_reader->createRowBuffer(colorChannels * size().width()); 430 if (!m_reader->rowBuffer()) { 431 longjmp(JMPBUF(png), 1); 432 return; 433 } 434 } 435 #endif 379 436 buffer.setStatus(ImageFrame::FramePartial); 380 437 buffer.setHasAlpha(false); … … 434 491 } 435 492 493 #if USE(QCMSLIB) 494 if (qcms_transform* transform = m_reader->colorTransform()) { 495 qcms_transform_data(transform, row, m_reader->rowBuffer(), size().width()); 496 row = m_reader->rowBuffer(); 497 } 498 #endif 499 436 500 // Write the decoded row pixels to the frame buffer. 437 501 int width = scaledSize().width(); -
trunk/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp
r120591 r120613 27 27 #include "config.h" 28 28 #include "ImageDecoder.h" 29 30 #include "NotImplemented.h"31 32 #if PLATFORM(CHROMIUM) && OS(DARWIN)33 #include "GraphicsContextCG.h"34 #include "SkCGUtils.h"35 #endif36 29 37 30 namespace WebCore { … … 115 108 } 116 109 117 #if PLATFORM(CHROMIUM) && OS(DARWIN)118 static void resolveColorSpace(const SkBitmap& bitmap, CGColorSpaceRef colorSpace)119 {120 int width = bitmap.width();121 int height = bitmap.height();122 RetainPtr<CGImageRef> srcImage(AdoptCF, SkCreateCGImageRefWithColorspace(bitmap, colorSpace));123 SkAutoLockPixels lock(bitmap);124 void* pixels = bitmap.getPixels();125 RetainPtr<CGContextRef> cgBitmap(AdoptCF, CGBitmapContextCreate(pixels, width, height, 8, width * 4, deviceRGBColorSpaceRef(), kCGBitmapByteOrder32Host | kCGImageAlphaPremultipliedFirst));126 if (!cgBitmap)127 return;128 CGContextSetBlendMode(cgBitmap.get(), kCGBlendModeCopy);129 CGRect bounds = { {0, 0}, {width, height} };130 CGContextDrawImage(cgBitmap.get(), bounds, srcImage.get());131 }132 133 static CGColorSpaceRef createColorSpace(const ColorProfile& colorProfile)134 {135 RetainPtr<CFDataRef> data(AdoptCF, CFDataCreate(kCFAllocatorDefault, reinterpret_cast<const UInt8*>(colorProfile.data()), colorProfile.size()));136 #ifndef TARGETING_LEOPARD137 return CGColorSpaceCreateWithICCProfile(data.get());138 #else139 RetainPtr<CGDataProviderRef> profileDataProvider(AdoptCF, CGDataProviderCreateWithCFData(data.get()));140 CGFloat ranges[] = {0.0, 255.0, 0.0, 255.0, 0.0, 255.0};141 return CGColorSpaceCreateICCBased(3, ranges, profileDataProvider.get(), deviceRGBColorSpaceRef());142 #endif143 }144 #endif145 146 110 void ImageFrame::setColorProfile(const ColorProfile& colorProfile) 147 111 { 148 #if PLATFORM(CHROMIUM) && OS(DARWIN) 149 m_colorProfile = colorProfile; 150 #else 151 notImplemented(); 152 #endif 112 // FIXME: Do we need this ImageFrame function anymore, on any port? 113 UNUSED_PARAM(colorProfile); 153 114 } 154 115 … … 156 117 { 157 118 m_status = status; 158 if (m_status == FrameComplete) {119 if (m_status == FrameComplete) 159 120 m_bitmap.setDataComplete(); // Tell the bitmap it's done. 160 #if PLATFORM(CHROMIUM) && OS(DARWIN)161 // resolveColorSpace() and callees assume that the alpha channel is162 // premultiplied, so don't apply the color profile if it isn't.163 if (m_colorProfile.isEmpty() || (!m_premultiplyAlpha && hasAlpha()))164 return;165 RetainPtr<CGColorSpaceRef> cgColorSpace(AdoptCF, createColorSpace(m_colorProfile));166 resolveColorSpace(m_bitmap.bitmap(), cgColorSpace.get());167 #endif168 }169 121 } 170 122
Note: See TracChangeset
for help on using the changeset viewer.