| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 } | 187 } |
| 188 | 188 |
| 189 ASSERT(width == size().width()); | 189 ASSERT(width == size().width()); |
| 190 ASSERT(decodedHeight <= size().height()); | 190 ASSERT(decodedHeight <= size().height()); |
| 191 | 191 |
| 192 for (int y = m_decodedHeight; y < decodedHeight; ++y) { | 192 for (int y = m_decodedHeight; y < decodedHeight; ++y) { |
| 193 uint8_t* row = reinterpret_cast<uint8_t*>(buffer.getAddr(0, y)); | 193 uint8_t* row = reinterpret_cast<uint8_t*>(buffer.getAddr(0, y)); |
| 194 if (qcms_transform* transform = colorTransform()) | 194 if (qcms_transform* transform = colorTransform()) |
| 195 qcms_transform_data_type(transform, row, row, width, QCMS_OUTPUT_RGB
X); | 195 qcms_transform_data_type(transform, row, row, width, QCMS_OUTPUT_RGB
X); |
| 196 uint8_t* pixel = row; | 196 uint8_t* pixel = row; |
| 197 for (int x = 0; x < width; ++x, pixel += 4) | 197 |
| 198 buffer.setRGBA(x, y, pixel[0], pixel[1], pixel[2], pixel[3]); | 198 // Do not merge the loops below. They are hand rolled for each case for
maximal peformace. |
| 199 ImageFrame::PixelData* dst = buffer.getAddr(0, y); |
| 200 if (buffer.premultiplyAlpha()) { |
| 201 for (int x = 0; x < width; ++x, pixel += 4) |
| 202 buffer.setRGBAPremultiply(dst + x, pixel[0], pixel[1], pixel[2],
pixel[3]); |
| 203 } else { |
| 204 for (int x = 0; x < width; ++x, pixel += 4) |
| 205 buffer.setRGBANoPremultiply(dst + x, pixel[0], pixel[1], pixel[2
], pixel[3]); |
| 206 } |
| 199 } | 207 } |
| 200 | 208 |
| 201 m_decodedHeight = decodedHeight; | 209 m_decodedHeight = decodedHeight; |
| 202 } | 210 } |
| 203 | 211 |
| 204 #endif // QCMS_WEBP_COLOR_CORRECTION | 212 #endif // QCMS_WEBP_COLOR_CORRECTION |
| 205 | 213 |
| 206 bool WEBPImageDecoder::decode(bool onlySize) | 214 bool WEBPImageDecoder::decode(bool onlySize) |
| 207 { | 215 { |
| 208 if (failed()) | 216 if (failed()) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 if ((m_formatFlags & ICCP_FLAG) && !ignoresGammaAndColorProfile()) | 300 if ((m_formatFlags & ICCP_FLAG) && !ignoresGammaAndColorProfile()) |
| 293 applyColorProfile(dataBytes, dataSize, buffer); | 301 applyColorProfile(dataBytes, dataSize, buffer); |
| 294 return false; | 302 return false; |
| 295 default: | 303 default: |
| 296 clear(); | 304 clear(); |
| 297 return setFailed(); | 305 return setFailed(); |
| 298 } | 306 } |
| 299 } | 307 } |
| 300 | 308 |
| 301 } // namespace WebCore | 309 } // namespace WebCore |
| OLD | NEW |