| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/graphics/skia/ImagePixelLocker.h" | 5 #include "platform/graphics/skia/ImagePixelLocker.h" |
| 6 | 6 |
| 7 #include "third_party/skia/include/core/SkImage.h" | 7 #include "third_party/skia/include/core/SkImage.h" |
| 8 #include "third_party/skia/include/core/SkImageInfo.h" | 8 #include "third_party/skia/include/core/SkImageInfo.h" |
| 9 | 9 |
| 10 namespace blink { | 10 namespace blink { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 info.alphaType() == kOpaque_SkAlphaType; | 24 info.alphaType() == kOpaque_SkAlphaType; |
| 25 } | 25 } |
| 26 | 26 |
| 27 } // anonymous namespace | 27 } // anonymous namespace |
| 28 | 28 |
| 29 ImagePixelLocker::ImagePixelLocker(sk_sp<const SkImage> image, | 29 ImagePixelLocker::ImagePixelLocker(sk_sp<const SkImage> image, |
| 30 SkAlphaType alphaType, | 30 SkAlphaType alphaType, |
| 31 SkColorType colorType) | 31 SkColorType colorType) |
| 32 : m_image(std::move(image)) { | 32 : m_image(std::move(image)) { |
| 33 // If the image has in-RAM pixels and their format matches, use them directly. | 33 // If the image has in-RAM pixels and their format matches, use them directly. |
| 34 // TODO(fmalita): All current clients expect packed pixel rows. Maybe we coul
d update them | 34 // TODO(fmalita): All current clients expect packed pixel rows. Maybe we |
| 35 // to support arbitrary rowBytes, and relax the check below. | 35 // could update them to support arbitrary rowBytes, and relax the check below. |
| 36 SkPixmap pixmap; | 36 SkPixmap pixmap; |
| 37 m_image->peekPixels(&pixmap); | 37 m_image->peekPixels(&pixmap); |
| 38 m_pixels = pixmap.addr(); | 38 m_pixels = pixmap.addr(); |
| 39 if (m_pixels && infoIsCompatible(pixmap.info(), alphaType, colorType) && | 39 if (m_pixels && infoIsCompatible(pixmap.info(), alphaType, colorType) && |
| 40 pixmap.rowBytes() == pixmap.info().minRowBytes()) { | 40 pixmap.rowBytes() == pixmap.info().minRowBytes()) { |
| 41 return; | 41 return; |
| 42 } | 42 } |
| 43 | 43 |
| 44 m_pixels = nullptr; | 44 m_pixels = nullptr; |
| 45 | 45 |
| 46 // No luck, we need to read the pixels into our local buffer. | 46 // No luck, we need to read the pixels into our local buffer. |
| 47 SkImageInfo info = SkImageInfo::Make(m_image->width(), m_image->height(), | 47 SkImageInfo info = SkImageInfo::Make(m_image->width(), m_image->height(), |
| 48 colorType, alphaType); | 48 colorType, alphaType); |
| 49 size_t rowBytes = info.minRowBytes(); | 49 size_t rowBytes = info.minRowBytes(); |
| 50 size_t size = info.getSafeSize(rowBytes); | 50 size_t size = info.getSafeSize(rowBytes); |
| 51 if (0 == size) | 51 if (0 == size) |
| 52 return; | 52 return; |
| 53 | 53 |
| 54 m_pixelStorage.reset(size); // this will throw on failure | 54 m_pixelStorage.reset(size); // this will throw on failure |
| 55 pixmap.reset(info, m_pixelStorage.get(), rowBytes); | 55 pixmap.reset(info, m_pixelStorage.get(), rowBytes); |
| 56 | 56 |
| 57 if (!m_image->readPixels(pixmap, 0, 0)) | 57 if (!m_image->readPixels(pixmap, 0, 0)) |
| 58 return; | 58 return; |
| 59 | 59 |
| 60 m_pixels = m_pixelStorage.get(); | 60 m_pixels = m_pixelStorage.get(); |
| 61 } | 61 } |
| 62 | 62 |
| 63 } // namespace blink | 63 } // namespace blink |
| OLD | NEW |