diff options
-rw-r--r-- | tools/android/SkBitmapRegionCanvas.cpp | 11 | ||||
-rw-r--r-- | tools/android/SkBitmapRegionCanvas.h | 2 | ||||
-rw-r--r-- | tools/android/SkBitmapRegionCodec.cpp | 11 | ||||
-rw-r--r-- | tools/android/SkBitmapRegionCodec.h | 2 | ||||
-rw-r--r-- | tools/android/SkBitmapRegionDecoder.h | 3 |
5 files changed, 16 insertions, 13 deletions
diff --git a/tools/android/SkBitmapRegionCanvas.cpp b/tools/android/SkBitmapRegionCanvas.cpp index ffcab9596a..bac5dc1ffc 100644 --- a/tools/android/SkBitmapRegionCanvas.cpp +++ b/tools/android/SkBitmapRegionCanvas.cpp @@ -15,7 +15,7 @@ SkBitmapRegionCanvas::SkBitmapRegionCanvas(SkCodec* decoder) , fDecoder(decoder) {} -bool SkBitmapRegionCanvas::decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* allocator, +bool SkBitmapRegionCanvas::decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator, const SkIRect& desiredSubset, int sampleSize, SkColorType dstColorType, bool requireUnpremul) { // Reject color types not supported by this method @@ -102,11 +102,12 @@ bool SkBitmapRegionCanvas::decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* a // TODO (msarett): Can we make this faster by implementing it to only // zero parts of the image that we won't overwrite with // pixels? - // TODO (msarett): This could be skipped if memory is zero initialized. - // This would matter if this code is moved to Android and - // uses Android bitmaps. if (SubsetType::kPartiallyInside_SubsetType == type) { - bitmap->eraseColor(0); + SkCodec::ZeroInitialized zeroInit = allocator ? allocator->zeroInit() : + SkCodec::kNo_ZeroInitialized; + if (SkCodec::kNo_ZeroInitialized == zeroInit) { + bitmap->eraseColor(0); + } } // Use a canvas to crop and scale to the destination bitmap diff --git a/tools/android/SkBitmapRegionCanvas.h b/tools/android/SkBitmapRegionCanvas.h index f41d5b9484..2edbf1ff3b 100644 --- a/tools/android/SkBitmapRegionCanvas.h +++ b/tools/android/SkBitmapRegionCanvas.h @@ -24,7 +24,7 @@ public: */ SkBitmapRegionCanvas(SkCodec* decoder); - bool decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* allocator, + bool decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator, const SkIRect& desiredSubset, int sampleSize, SkColorType colorType, bool requireUnpremul) override; diff --git a/tools/android/SkBitmapRegionCodec.cpp b/tools/android/SkBitmapRegionCodec.cpp index 93ece4a59f..7c3c2471b0 100644 --- a/tools/android/SkBitmapRegionCodec.cpp +++ b/tools/android/SkBitmapRegionCodec.cpp @@ -16,7 +16,7 @@ SkBitmapRegionCodec::SkBitmapRegionCodec(SkAndroidCodec* codec) , fCodec(codec) {} -bool SkBitmapRegionCodec::decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* allocator, +bool SkBitmapRegionCodec::decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator, const SkIRect& desiredSubset, int sampleSize, SkColorType dstColorType, bool requireUnpremul) { @@ -104,10 +104,10 @@ bool SkBitmapRegionCodec::decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* al // TODO (msarett): Can we make this faster by implementing it to only // zero parts of the image that we won't overwrite with // pixels? - // TODO (msarett): This could be skipped if memory is zero initialized. - // This would matter if this code is moved to Android and - // uses Android bitmaps. - if (SubsetType::kPartiallyInside_SubsetType == type) { + SkCodec::ZeroInitialized zeroInit = allocator ? allocator->zeroInit() : + SkCodec::kNo_ZeroInitialized; + if (SubsetType::kPartiallyInside_SubsetType == type && + SkCodec::kNo_ZeroInitialized == zeroInit) { void* pixels = bitmap->getPixels(); size_t bytes = outInfo.getSafeSize(bitmap->rowBytes()); memset(pixels, 0, bytes); @@ -119,6 +119,7 @@ bool SkBitmapRegionCodec::decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* al options.fSubset = ⊂ options.fColorPtr = colorPtr; options.fColorCount = colorCountPtr; + options.fZeroInitialized = zeroInit; void* dst = bitmap->getAddr(scaledOutX, scaledOutY); // FIXME: skbug.com/4538 diff --git a/tools/android/SkBitmapRegionCodec.h b/tools/android/SkBitmapRegionCodec.h index 1739a04378..79774173b0 100644 --- a/tools/android/SkBitmapRegionCodec.h +++ b/tools/android/SkBitmapRegionCodec.h @@ -20,7 +20,7 @@ public: */ SkBitmapRegionCodec(SkAndroidCodec* codec); - bool decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* allocator, + bool decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator, const SkIRect& desiredSubset, int sampleSize, SkColorType colorType, bool requireUnpremul) override; diff --git a/tools/android/SkBitmapRegionDecoder.h b/tools/android/SkBitmapRegionDecoder.h index 294adc3df1..575ad9dc01 100644 --- a/tools/android/SkBitmapRegionDecoder.h +++ b/tools/android/SkBitmapRegionDecoder.h @@ -9,6 +9,7 @@ #define SkBitmapRegionDecoder_DEFINED #include "SkBitmap.h" +#include "SkBRDAllocator.h" #include "SkEncodedFormat.h" #include "SkStream.h" @@ -58,7 +59,7 @@ public: * alpha type to use. * */ - virtual bool decodeRegion(SkBitmap* bitmap, SkBitmap::Allocator* allocator, + virtual bool decodeRegion(SkBitmap* bitmap, SkBRDAllocator* allocator, const SkIRect& desiredSubset, int sampleSize, SkColorType colorType, bool requireUnpremul) = 0; /* |