| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 componentWidthBytes[0] = decoder->decodedYUVWidthBytes(0); | 96 componentWidthBytes[0] = decoder->decodedYUVWidthBytes(0); |
| 97 size = decoder->decodedYUVSize(1); | 97 size = decoder->decodedYUVSize(1); |
| 98 componentSizes[1].set(size.width(), size.height()); | 98 componentSizes[1].set(size.width(), size.height()); |
| 99 componentWidthBytes[1] = decoder->decodedYUVWidthBytes(1); | 99 componentWidthBytes[1] = decoder->decodedYUVWidthBytes(1); |
| 100 size = decoder->decodedYUVSize(2); | 100 size = decoder->decodedYUVSize(2); |
| 101 componentSizes[2].set(size.width(), size.height()); | 101 componentSizes[2].set(size.width(), size.height()); |
| 102 componentWidthBytes[2] = decoder->decodedYUVWidthBytes(2); | 102 componentWidthBytes[2] = decoder->decodedYUVWidthBytes(2); |
| 103 return true; | 103 return true; |
| 104 } | 104 } |
| 105 | 105 |
| 106 ImageFrameGenerator::ImageFrameGenerator(const SkISize& fullSize, | 106 ImageFrameGenerator::ImageFrameGenerator( |
| 107 sk_sp<SkColorSpace> colorSpace, | 107 const SkISize& fullSize, |
| 108 bool isMultiFrame) | 108 bool isMultiFrame, |
| 109 ImageDecoder::ColorSpaceOption decoderColorSpaceOption, |
| 110 sk_sp<SkColorSpace> decoderTargetColorSpace) |
| 109 : m_fullSize(fullSize), | 111 : m_fullSize(fullSize), |
| 110 m_colorSpace(std::move(colorSpace)), | 112 m_decoderColorSpaceOption(decoderColorSpaceOption), |
| 113 m_decoderTargetColorSpace(std::move(decoderTargetColorSpace)), |
| 111 m_isMultiFrame(isMultiFrame), | 114 m_isMultiFrame(isMultiFrame), |
| 112 m_decodeFailed(false), | 115 m_decodeFailed(false), |
| 113 m_yuvDecodingFailed(false), | 116 m_yuvDecodingFailed(false), |
| 114 m_frameCount(0) {} | 117 m_frameCount(0) {} |
| 115 | 118 |
| 116 ImageFrameGenerator::~ImageFrameGenerator() { | 119 ImageFrameGenerator::~ImageFrameGenerator() { |
| 117 ImageDecodingStore::instance().removeCacheIndexedByGenerator(this); | 120 ImageDecodingStore::instance().removeCacheIndexedByGenerator(this); |
| 118 } | 121 } |
| 119 | 122 |
| 120 bool ImageFrameGenerator::decodeAndScale(SegmentReader* data, | 123 bool ImageFrameGenerator::decodeAndScale(SegmentReader* data, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 return false; | 170 return false; |
| 168 | 171 |
| 169 TRACE_EVENT1("blink", "ImageFrameGenerator::decodeToYUV", "frame index", | 172 TRACE_EVENT1("blink", "ImageFrameGenerator::decodeToYUV", "frame index", |
| 170 static_cast<int>(index)); | 173 static_cast<int>(index)); |
| 171 | 174 |
| 172 if (!planes || !planes[0] || !planes[1] || !planes[2] || !rowBytes || | 175 if (!planes || !planes[0] || !planes[1] || !planes[2] || !rowBytes || |
| 173 !rowBytes[0] || !rowBytes[1] || !rowBytes[2]) { | 176 !rowBytes[0] || !rowBytes[1] || !rowBytes[2]) { |
| 174 return false; | 177 return false; |
| 175 } | 178 } |
| 176 | 179 |
| 177 std::unique_ptr<ImageDecoder> decoder = | 180 std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create( |
| 178 ImageDecoder::create(data, true, ImageDecoder::AlphaPremultiplied, | 181 data, true, ImageDecoder::AlphaPremultiplied, m_decoderColorSpaceOption, |
| 179 ImageDecoder::ColorSpaceApplied); | 182 m_decoderTargetColorSpace); |
| 180 // getYUVComponentSizes was already called and was successful, so | 183 // getYUVComponentSizes was already called and was successful, so |
| 181 // ImageDecoder::create must succeed. | 184 // ImageDecoder::create must succeed. |
| 182 ASSERT(decoder); | 185 ASSERT(decoder); |
| 183 | 186 |
| 184 std::unique_ptr<ImagePlanes> imagePlanes = | 187 std::unique_ptr<ImagePlanes> imagePlanes = |
| 185 makeUnique<ImagePlanes>(planes, rowBytes); | 188 makeUnique<ImagePlanes>(planes, rowBytes); |
| 186 decoder->setImagePlanes(std::move(imagePlanes)); | 189 decoder->setImagePlanes(std::move(imagePlanes)); |
| 187 | 190 |
| 188 ASSERT(decoder->canDecodeToYUV()); | 191 ASSERT(decoder->canDecodeToYUV()); |
| 189 | 192 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 // Try to create an ImageDecoder if we are not given one. | 292 // Try to create an ImageDecoder if we are not given one. |
| 290 ASSERT(decoder); | 293 ASSERT(decoder); |
| 291 bool newDecoder = false; | 294 bool newDecoder = false; |
| 292 bool shouldCallSetData = true; | 295 bool shouldCallSetData = true; |
| 293 if (!*decoder) { | 296 if (!*decoder) { |
| 294 newDecoder = true; | 297 newDecoder = true; |
| 295 if (m_imageDecoderFactory) | 298 if (m_imageDecoderFactory) |
| 296 *decoder = m_imageDecoderFactory->create().release(); | 299 *decoder = m_imageDecoderFactory->create().release(); |
| 297 | 300 |
| 298 if (!*decoder) { | 301 if (!*decoder) { |
| 299 *decoder = ImageDecoder::create(data, allDataReceived, | 302 *decoder = ImageDecoder::create( |
| 300 ImageDecoder::AlphaPremultiplied, | 303 data, allDataReceived, ImageDecoder::AlphaPremultiplied, |
| 301 ImageDecoder::ColorSpaceApplied) | 304 m_decoderColorSpaceOption, m_decoderTargetColorSpace) |
| 302 .release(); | 305 .release(); |
| 303 // The newly created decoder just grabbed the data. No need to reset it. | 306 // The newly created decoder just grabbed the data. No need to reset it. |
| 304 shouldCallSetData = false; | 307 shouldCallSetData = false; |
| 305 } | 308 } |
| 306 | 309 |
| 307 if (!*decoder) | 310 if (!*decoder) |
| 308 return false; | 311 return false; |
| 309 } | 312 } |
| 310 | 313 |
| 311 if (!m_isMultiFrame && newDecoder && allDataReceived) { | 314 if (!m_isMultiFrame && newDecoder && allDataReceived) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 bool ImageFrameGenerator::getYUVComponentSizes(SegmentReader* data, | 364 bool ImageFrameGenerator::getYUVComponentSizes(SegmentReader* data, |
| 362 SkYUVSizeInfo* sizeInfo) { | 365 SkYUVSizeInfo* sizeInfo) { |
| 363 TRACE_EVENT2("blink", "ImageFrameGenerator::getYUVComponentSizes", "width", | 366 TRACE_EVENT2("blink", "ImageFrameGenerator::getYUVComponentSizes", "width", |
| 364 m_fullSize.width(), "height", m_fullSize.height()); | 367 m_fullSize.width(), "height", m_fullSize.height()); |
| 365 | 368 |
| 366 if (m_yuvDecodingFailed) | 369 if (m_yuvDecodingFailed) |
| 367 return false; | 370 return false; |
| 368 | 371 |
| 369 std::unique_ptr<ImageDecoder> decoder = | 372 std::unique_ptr<ImageDecoder> decoder = |
| 370 ImageDecoder::create(data, true, ImageDecoder::AlphaPremultiplied, | 373 ImageDecoder::create(data, true, ImageDecoder::AlphaPremultiplied, |
| 371 ImageDecoder::ColorSpaceApplied); | 374 ImageDecoder::ColorSpaceTransformed, |
| 375 ImageDecoder::globalTargetColorSpace()); |
| 372 if (!decoder) | 376 if (!decoder) |
| 373 return false; | 377 return false; |
| 374 | 378 |
| 375 // Setting a dummy ImagePlanes object signals to the decoder that we want to | 379 // Setting a dummy ImagePlanes object signals to the decoder that we want to |
| 376 // do YUV decoding. | 380 // do YUV decoding. |
| 377 std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes); | 381 std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes); |
| 378 decoder->setImagePlanes(std::move(dummyImagePlanes)); | 382 decoder->setImagePlanes(std::move(dummyImagePlanes)); |
| 379 | 383 |
| 380 return updateYUVComponentSizes(decoder.get(), sizeInfo->fSizes, | 384 return updateYUVComponentSizes(decoder.get(), sizeInfo->fSizes, |
| 381 sizeInfo->fWidthBytes); | 385 sizeInfo->fWidthBytes); |
| 382 } | 386 } |
| 383 | 387 |
| 384 } // namespace blink | 388 } // namespace blink |
| OLD | NEW |