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

Unified Diff: src/images/SkImageDecoder_libpng.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_libpng.cpp
diff --git a/src/images/SkImageDecoder_libpng.cpp b/src/images/SkImageDecoder_libpng.cpp
index 4e4106aede85f8266c3b9ffd234e025f9f6a0e02..baab8946c7fa5cd3380556eb84e546e20eddaf3a 100644
--- a/src/images/SkImageDecoder_libpng.cpp
+++ b/src/images/SkImageDecoder_libpng.cpp
@@ -648,8 +648,6 @@ bool SkPNGImageDecoder::decodePalette(png_structp png_ptr, png_infop info_ptr,
png_colorp palette;
png_bytep trans;
int numTrans;
- bool reallyHasAlpha = false;
- SkColorTable* colorTable = NULL;
png_get_PLTE(png_ptr, info_ptr, &palette, &numPalette);
@@ -660,21 +658,20 @@ bool SkPNGImageDecoder::decodePalette(png_structp png_ptr, png_infop info_ptr,
the colortable by 1 (if its < 256) and duplicate the last color into that slot.
*/
int colorCount = numPalette + (numPalette < 256);
+ SkPMColor colorStorage[256]; // worse-case storage
scroggo 2013/10/07 21:58:42 worst*
reed1 2013/10/09 12:19:54 Done.
+ SkPMColor* colorPtr = colorStorage;
- colorTable = SkNEW_ARGS(SkColorTable, (colorCount));
-
- SkPMColor* colorPtr = colorTable->lockColors();
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
png_get_tRNS(png_ptr, info_ptr, &trans, &numTrans, NULL);
*hasAlphap = (numTrans > 0);
} else {
numTrans = 0;
- colorTable->setFlags(colorTable->getFlags() | SkColorTable::kColorsAreOpaque_Flag);
}
// check for bad images that might make us crash
if (numTrans > numPalette) {
numTrans = numPalette;
}
+ bool reallyHasAlpha = numTrans > 0;
scroggo 2013/10/07 21:58:42 This is going to change the behavior. Previously,
reed1 2013/10/09 12:19:54 Fixed
scroggo 2013/10/09 16:05:23 Still not fixed. Counterexample: - numTrans > 0 -
reed1 2013/10/09 16:16:36 Done.
int index = 0;
int transLessThanFF = 0;
@@ -703,8 +700,10 @@ bool SkPNGImageDecoder::decodePalette(png_structp png_ptr, png_infop info_ptr,
if (numPalette < 256) {
*colorPtr = colorPtr[-1];
}
- colorTable->unlockColors(true);
- *colorTablep = colorTable;
+
+ SkAlphaType alphaType = reallyHasAlpha ? kPremul_SkAlphaType : kOpaque_SkAlphaType;
scroggo 2013/10/07 21:58:42 You need to check getRequireUnpremultipliedColors
reed1 2013/10/09 12:19:54 Fixed
+ *colorTablep = SkNEW_ARGS(SkColorTable,
+ (colorStorage, colorCount, alphaType));
*reallyHasAlphap = reallyHasAlpha;
return true;
}

Powered by Google App Engine
This is Rietveld 408576698