Index: src/core/SkBitmap.cpp |
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp |
index 900a3abcd0519eae9ffadf966e334085abc65538..d2a308b03ab950fe536980ea0a84a8d6122f62f9 100644 |
--- a/src/core/SkBitmap.cpp |
+++ b/src/core/SkBitmap.cpp |
@@ -361,47 +361,6 @@ void SkBitmap::updatePixelsFromRef() const { |
} |
} |
-static bool config_to_colorType(SkBitmap::Config config, SkColorType* ctOut) { |
- SkColorType ct; |
- switch (config) { |
- case SkBitmap::kNo_Config: |
- return false; |
- case SkBitmap::kA8_Config: |
- ct = kAlpha_8_SkColorType; |
- break; |
- case SkBitmap::kIndex8_Config: |
- ct = kIndex8_SkColorType; |
- break; |
- case SkBitmap::kRGB_565_Config: |
- ct = kRGB_565_SkColorType; |
- break; |
- case SkBitmap::kARGB_4444_Config: |
- ct = kARGB_4444_SkColorType; |
- break; |
- case SkBitmap::kARGB_8888_Config: |
- ct = kPMColor_SkColorType; |
- break; |
- } |
- if (ctOut) { |
- *ctOut = ct; |
- } |
- return true; |
-} |
- |
-bool SkBitmap::asImageInfo(SkImageInfo* info) const { |
- SkColorType ct; |
- if (!config_to_colorType(this->config(), &ct)) { |
- return false; |
- } |
- if (info) { |
- info->fWidth = fWidth; |
- info->fHeight = fHeight; |
- info->fAlphaType = this->alphaType(); |
- info->fColorType = ct; |
- } |
- return true; |
-} |
- |
SkPixelRef* SkBitmap::setPixelRef(SkPixelRef* pr, size_t offset) { |
// do this first, we that we never have a non-zero offset with a null ref |
if (NULL == pr) { |
@@ -452,20 +411,10 @@ void SkBitmap::setPixels(void* p, SkColorTable* ctable) { |
return; |
} |
- SkImageInfo info; |
- if (!this->asImageInfo(&info)) { |
- this->setPixelRef(NULL, 0); |
- return; |
- } |
- |
- SkPixelRef* pr = SkMallocPixelRef::NewDirect(info, p, fRowBytes, ctable); |
- if (NULL == pr) { |
- this->setPixelRef(NULL, 0); |
- return; |
- } |
- |
- this->setPixelRef(pr)->unref(); |
+ Sk64 size = this->getSize64(); |
+ SkASSERT(!size.isNeg() && size.is32()); |
+ this->setPixelRef(new SkMallocPixelRef(p, size.get32(), ctable, false))->unref(); |
// since we're already allocated, we lockPixels right away |
this->lockPixels(); |
SkDEBUGCODE(this->validate();) |
@@ -530,19 +479,17 @@ GrTexture* SkBitmap::getTexture() const { |
*/ |
bool SkBitmap::HeapAllocator::allocPixelRef(SkBitmap* dst, |
SkColorTable* ctable) { |
- SkImageInfo info; |
- if (!dst->asImageInfo(&info)) { |
-// SkDebugf("unsupported config for info %d\n", dst->config()); |
+ Sk64 size = dst->getSize64(); |
+ if (size.isNeg() || !size.is32()) { |
return false; |
} |
- |
- SkPixelRef* pr = SkMallocPixelRef::NewAllocate(info, dst->rowBytes(), |
- ctable); |
- if (NULL == pr) { |
+ |
+ void* addr = sk_malloc_flags(size.get32(), 0); // returns NULL on failure |
+ if (NULL == addr) { |
return false; |
} |
- dst->setPixelRef(pr, 0)->unref(); |
+ dst->setPixelRef(new SkMallocPixelRef(addr, size.get32(), ctable))->unref(); |
// since we're already allocated, we lockPixels right away |
dst->lockPixels(); |
return true; |
@@ -1649,28 +1596,6 @@ SkBitmap::RLEPixels::~RLEPixels() { |
/////////////////////////////////////////////////////////////////////////////// |
-void SkImageInfo::unflatten(SkFlattenableReadBuffer& buffer) { |
- fWidth = buffer.read32(); |
- fHeight = buffer.read32(); |
- |
- uint32_t packed = buffer.read32(); |
- SkASSERT(0 == (packed >> 16)); |
- fAlphaType = (SkAlphaType)((packed >> 8) & 0xFF); |
- fColorType = (SkColorType)((packed >> 0) & 0xFF); |
-} |
- |
-void SkImageInfo::flatten(SkFlattenableWriteBuffer& buffer) const { |
- buffer.write32(fWidth); |
- buffer.write32(fHeight); |
- |
- SkASSERT(0 == (fAlphaType & ~0xFF)); |
- SkASSERT(0 == (fColorType & ~0xFF)); |
- uint32_t packed = (fAlphaType << 8) | fColorType; |
- buffer.write32(packed); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
#ifdef SK_DEBUG |
void SkBitmap::validate() const { |
SkASSERT(fConfig < kConfigCount); |