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

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

Issue 15466004: Make image decoders faster by refactoring hot loops that fills the lines of ImageFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Make image decoders faster by refactoring hot loops that fills the lines of ImageFrame. Created 7 years, 6 months 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 * Copyright (C) 2007-2009 Torch Mobile, Inc. 9 * Copyright (C) 2007-2009 Torch Mobile, Inc.
10 * 10 *
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 639
640 template <J_COLOR_SPACE colorSpace> void setPixel(ImageFrame& buffer, ImageFrame ::PixelData* pixel, JSAMPARRAY samples, int column) 640 template <J_COLOR_SPACE colorSpace> void setPixel(ImageFrame& buffer, ImageFrame ::PixelData* pixel, JSAMPARRAY samples, int column)
641 { 641 {
642 JSAMPLE* jsample = *samples + column * (colorSpace == JCS_RGB ? 3 : 4); 642 JSAMPLE* jsample = *samples + column * (colorSpace == JCS_RGB ? 3 : 4);
643 643
644 switch (colorSpace) { 644 switch (colorSpace) {
645 case JCS_RGB: 645 case JCS_RGB:
646 buffer.setRGBA(pixel, jsample[0], jsample[1], jsample[2], 0xFF); 646 buffer.setRGBA(pixel, jsample[0], jsample[1], jsample[2], 0xFF);
647 break; 647 break;
648 case JCS_CMYK: 648 case JCS_CMYK:
649 // Source is 'Inverted CMYK', output is RGB. 649 buffer.setInvertedCMYK(pixel, jsample[0], jsample[1], jsample[2], jsampl e[3]);
650 // See: http://www.easyrgb.com/math.php?MATH=M12#text12
651 // Or: http://www.ilkeratalay.com/colorspacesfaq.php#rgb
652 // From CMYK to CMY:
653 // X = X * (1 - K ) + K [for X = C, M, or Y]
654 // Thus, from Inverted CMYK to CMY is:
655 // X = (1-iX) * (1 - (1-iK)) + (1-iK) => 1 - iX*iK
656 // From CMY (0..1) to RGB (0..1):
657 // R = 1 - C => 1 - (1 - iC*iK) => iC*iK [G and B similar]
658 unsigned k = jsample[3];
659 buffer.setRGBA(pixel, jsample[0] * k / 255, jsample[1] * k / 255, jsampl e[2] * k / 255, 0xFF);
660 break; 650 break;
661 } 651 }
662 } 652 }
663 653
664 template <J_COLOR_SPACE colorSpace> bool outputRows(JPEGImageReader* reader, Ima geFrame& buffer) 654 template <J_COLOR_SPACE colorSpace> bool outputRows(JPEGImageReader* reader, Ima geFrame& buffer)
665 { 655 {
666 JSAMPARRAY samples = reader->samples(); 656 JSAMPARRAY samples = reader->samples();
667 jpeg_decompress_struct* info = reader->info(); 657 jpeg_decompress_struct* info = reader->info();
668 int width = info->output_width; 658 int width = info->output_width;
669 659
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 // has failed. 748 // has failed.
759 if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) 749 if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived())
760 setFailed(); 750 setFailed();
761 // If we're done decoding the image, we don't need the JPEGImageReader 751 // If we're done decoding the image, we don't need the JPEGImageReader
762 // anymore. (If we failed, |m_reader| has already been cleared.) 752 // anymore. (If we failed, |m_reader| has already been cleared.)
763 else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() == ImageFrame::FrameComplete)) 753 else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() == ImageFrame::FrameComplete))
764 m_reader.clear(); 754 m_reader.clear();
765 } 755 }
766 756
767 } 757 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698