| OLD | NEW |
| 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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 | 201 |
| 202 switch (m_state) { | 202 switch (m_state) { |
| 203 case JPEG_HEADER: | 203 case JPEG_HEADER: |
| 204 // Read file parameters with jpeg_read_header(). | 204 // Read file parameters with jpeg_read_header(). |
| 205 if (jpeg_read_header(&m_info, true) == JPEG_SUSPENDED) | 205 if (jpeg_read_header(&m_info, true) == JPEG_SUSPENDED) |
| 206 return false; // I/O suspension. | 206 return false; // I/O suspension. |
| 207 | 207 |
| 208 // Let libjpeg take care of gray->RGB and YCbCr->RGB conversions. | 208 // Let libjpeg take care of gray->RGB and YCbCr->RGB conversions. |
| 209 switch (m_info.jpeg_color_space) { | 209 switch (m_info.jpeg_color_space) { |
| 210 case JCS_GRAYSCALE: | 210 case JCS_GRAYSCALE: |
| 211 case JCS_YCbCr: |
| 212 // Grayscale images get "upsampled" by libjpeg. If we use |
| 213 // their color profile, CoreGraphics will "upsample" them |
| 214 // again, resulting in horizontal distortions. |
| 215 m_decoder->setIgnoreGammaAndColorProfile(true); |
| 216 // Note fall-through! |
| 211 case JCS_RGB: | 217 case JCS_RGB: |
| 212 case JCS_YCbCr: | |
| 213 m_info.out_color_space = JCS_RGB; | 218 m_info.out_color_space = JCS_RGB; |
| 214 break; | 219 break; |
| 215 case JCS_CMYK: | 220 case JCS_CMYK: |
| 216 case JCS_YCCK: | 221 case JCS_YCCK: |
| 217 // jpeglib cannot convert these to rgb, but it can convert ycck | 222 // jpeglib cannot convert these to rgb, but it can convert ycck |
| 218 // to cmyk. | 223 // to cmyk. |
| 219 m_info.out_color_space = JCS_CMYK; | 224 m_info.out_color_space = JCS_CMYK; |
| 220 break; | 225 break; |
| 221 default: | 226 default: |
| 222 return m_decoder->setFailed(); | 227 return m_decoder->setFailed(); |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 // has failed. | 527 // has failed. |
| 523 if (!m_reader->decode(m_data->buffer(), onlySize) && isAllDataReceived()) | 528 if (!m_reader->decode(m_data->buffer(), onlySize) && isAllDataReceived()) |
| 524 setFailed(); | 529 setFailed(); |
| 525 // If we're done decoding the image, we don't need the JPEGImageReader | 530 // If we're done decoding the image, we don't need the JPEGImageReader |
| 526 // anymore. (If we failed, |m_reader| has already been cleared.) | 531 // anymore. (If we failed, |m_reader| has already been cleared.) |
| 527 else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() ==
RGBA32Buffer::FrameComplete)) | 532 else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() ==
RGBA32Buffer::FrameComplete)) |
| 528 m_reader.clear(); | 533 m_reader.clear(); |
| 529 } | 534 } |
| 530 | 535 |
| 531 } | 536 } |
| OLD | NEW |