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

Unified Diff: src/codec/SkCodec_libpng.cpp

Issue 1055743003: Swizzler changes Index8 and 565 (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 9 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/codec/SkCodec_libpng.cpp
diff --git a/src/codec/SkCodec_libpng.cpp b/src/codec/SkCodec_libpng.cpp
index 33111cee67841938335fd6f7b0862d5f9ec0a9c6..7c5dd914517bdcdc09efbb3fb8289706fd03dc6c 100644
--- a/src/codec/SkCodec_libpng.cpp
+++ b/src/codec/SkCodec_libpng.cpp
@@ -128,16 +128,8 @@ bool SkPngCodec::decodePalette(bool premultiply) {
return false;
}
- /* BUGGY IMAGE WORKAROUND
-
- We hit some images (e.g. fruit_.png) who contain bytes that are == colortable_count
- which is a problem since we use the byte as an index. To work around this we grow
- the colortable by 1 (if its < 256) and duplicate the last color into that slot.
- */
- const int colorCount = numPalette + (numPalette < 256);
scroggo 2015/04/02 19:20:31 Part of the contract of onGetPixels is that we wil
msarett 2015/04/03 18:01:32 Didn't know this. I think I now handle this prope
// Note: These are not necessarily SkPMColors.
- SkPMColor colorStorage[256]; // worst-case storage
- SkPMColor* colorPtr = colorStorage;
+ SkPMColor* colorPtr = fColorTable;
int numTrans;
if (png_get_valid(fPng_ptr, fInfo_ptr, PNG_INFO_tRNS)) {
@@ -175,12 +167,16 @@ bool SkPngCodec::decodePalette(bool premultiply) {
palette++;
}
- // see BUGGY IMAGE WORKAROUND comment above
+ /* BUGGY IMAGE WORKAROUND
scroggo 2015/04/02 19:20:31 As long as you're touching this code, you might as
msarett 2015/04/03 18:01:32 Done.
+
+ We hit some images (e.g. fruit_.png) who contain bytes that are == colortable_count
+ which is a problem since we use the byte as an index. To work around this we grow
+ the colortable by 1 (if its < 256) and duplicate the last color into that slot.
+ */
if (numPalette < 256) {
*colorPtr = colorPtr[-1];
}
- fColorTable.reset(SkNEW_ARGS(SkColorTable, (colorStorage, colorCount)));
return true;
}
@@ -276,10 +272,7 @@ static bool read_header(SkStream* stream, png_structp* png_ptrp,
SkAlphaType skAlphaType;
switch (colorType) {
case PNG_COLOR_TYPE_PALETTE:
- // Technically, this is true of the data, but I don't think we want
- // to support it.
- // skColorType = kIndex8_SkColorType;
- skColorType = kN32_SkColorType;
+ skColorType = kIndex_8_SkColorType;
skAlphaType = has_transparency_in_palette(png_ptr, info_ptr) ?
kUnpremul_SkAlphaType : kOpaque_SkAlphaType;
break;
@@ -435,8 +428,7 @@ SkCodec::Result SkPngCodec::initializeSwizzler(const SkImageInfo& requestedInfo,
} else {
fSrcConfig = SkSwizzler::kRGBA;
}
- const SkPMColor* colors = fColorTable ? fColorTable->readColors() : NULL;
- fSwizzler.reset(SkSwizzler::CreateSwizzler(fSrcConfig, colors, requestedInfo,
+ fSwizzler.reset(SkSwizzler::CreateSwizzler(fSrcConfig, fColorTable, requestedInfo,
dst, rowBytes, options.fZeroInitialized));
if (!fSwizzler) {
// FIXME: CreateSwizzler could fail for another reason.
@@ -491,6 +483,11 @@ SkCodec::Result SkPngCodec::onGetPixels(const SkImageInfo& requestedInfo, void*
return kInvalidConversion;
}
+ // Get a valid color table pointer
+ SkPMColor ctableAlternate[256];
+ fColorTable = get_color_table_ptr(requestedInfo.colorType(), ctable, ctableCount,
scroggo 2015/04/02 19:20:31 Once again, we're potentially setting the member p
msarett 2015/04/03 18:01:32 This has been fixed.
+ ctableAlternate);
+
const Result result = this->initializeSwizzler(requestedInfo, dst, rowBytes,
options);
if (result != kSuccess) {

Powered by Google App Engine
This is Rietveld 408576698