Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(680)

Unified Diff: src/images/SkImageDecoder_libgif.cpp

Issue 25353002: change SkColorTable to be immutable (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: update codecs Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/images/SkImageDecoder_libgif.cpp
diff --git a/src/images/SkImageDecoder_libgif.cpp b/src/images/SkImageDecoder_libgif.cpp
index 1d25120da9c7585abbd002a16d724932d57d1595..ffec30bc05f73ecb615fd4b3dba992253f6fe526 100644
--- a/src/images/SkImageDecoder_libgif.cpp
+++ b/src/images/SkImageDecoder_libgif.cpp
@@ -225,9 +225,9 @@ bool SkGIFImageDecoder::onDecode(SkStream* sk_stream, SkBitmap* bm, Mode mode) {
return error_return(gif, *bm, "null cmap");
}
+ SkPMColor colorPtr[256]; // storage for worse-case
scroggo 2013/10/07 21:58:42 worst*
reed1 2013/10/09 12:19:54 Done.
colorCount = cmap->ColorCount;
- SkColorTable* ctable = SkNEW_ARGS(SkColorTable, (colorCount));
- SkPMColor* colorPtr = ctable->lockColors();
+ SkAlphaType alphaType = kOpaque_SkAlphaType;
for (int index = 0; index < colorCount; index++)
colorPtr[index] = SkPackARGB32(0xFF,
cmap->Colors[index].Red,
@@ -235,13 +235,15 @@ bool SkGIFImageDecoder::onDecode(SkStream* sk_stream, SkBitmap* bm, Mode mode) {
cmap->Colors[index].Blue);
transpIndex = find_transpIndex(temp_save, colorCount);
- if (transpIndex < 0)
- ctable->setFlags(ctable->getFlags() | SkColorTable::kColorsAreOpaque_Flag);
- else
+ if (transpIndex >= 0) {
+ SkASSERT((unsigned)transpIndex < (unsigned)colorCount);
colorPtr[transpIndex] = 0; // ram in a transparent SkPMColor
- ctable->unlockColors(true);
+ alphaType = kPremul_SkAlphaType;
+ }
- SkAutoUnref aurts(ctable);
+ SkAutoTUnref<SkColorTable> ctable(SkNEW_ARGS(SkColorTable,
+ (colorPtr, colorCount,
+ alphaType)));
if (!this->allocPixelRef(bm, ctable)) {
return error_return(gif, *bm, "allocPixelRef");
}

Powered by Google App Engine
This is Rietveld 408576698