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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkImageDecoder.h" 10 #include "SkImageDecoder.h"
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 218 }
219 219
220 // now we decode the colortable 220 // now we decode the colortable
221 int colorCount = 0; 221 int colorCount = 0;
222 { 222 {
223 const ColorMapObject* cmap = find_colormap(gif); 223 const ColorMapObject* cmap = find_colormap(gif);
224 if (NULL == cmap) { 224 if (NULL == cmap) {
225 return error_return(gif, *bm, "null cmap"); 225 return error_return(gif, *bm, "null cmap");
226 } 226 }
227 227
228 SkPMColor colorPtr[256]; // storage for worse-case
scroggo 2013/10/07 21:58:42 worst*
reed1 2013/10/09 12:19:54 Done.
228 colorCount = cmap->ColorCount; 229 colorCount = cmap->ColorCount;
229 SkColorTable* ctable = SkNEW_ARGS(SkColorTable, (colorCount)); 230 SkAlphaType alphaType = kOpaque_SkAlphaType;
230 SkPMColor* colorPtr = ctable->lockColors();
231 for (int index = 0; index < colorCount; index++) 231 for (int index = 0; index < colorCount; index++)
232 colorPtr[index] = SkPackARGB32(0xFF, 232 colorPtr[index] = SkPackARGB32(0xFF,
233 cmap->Colors[index].Red, 233 cmap->Colors[index].Red,
234 cmap->Colors[index].Green, 234 cmap->Colors[index].Green,
235 cmap->Colors[index].Blue); 235 cmap->Colors[index].Blue);
236 236
237 transpIndex = find_transpIndex(temp_save, colorCount); 237 transpIndex = find_transpIndex(temp_save, colorCount);
238 if (transpIndex < 0) 238 if (transpIndex >= 0) {
239 ctable->setFlags(ctable->getFlags() | SkColorTable::kColorsA reOpaque_Flag); 239 SkASSERT((unsigned)transpIndex < (unsigned)colorCount);
240 else
241 colorPtr[transpIndex] = 0; // ram in a transparent SkPMColor 240 colorPtr[transpIndex] = 0; // ram in a transparent SkPMColor
242 ctable->unlockColors(true); 241 alphaType = kPremul_SkAlphaType;
242 }
243 243
244 SkAutoUnref aurts(ctable); 244 SkAutoTUnref<SkColorTable> ctable(SkNEW_ARGS(SkColorTable,
245 (colorPtr, colorCount,
246 alphaType)));
245 if (!this->allocPixelRef(bm, ctable)) { 247 if (!this->allocPixelRef(bm, ctable)) {
246 return error_return(gif, *bm, "allocPixelRef"); 248 return error_return(gif, *bm, "allocPixelRef");
247 } 249 }
248 } 250 }
249 251
250 SkAutoLockPixels alp(*bm); 252 SkAutoLockPixels alp(*bm);
251 253
252 // time to decode the scanlines 254 // time to decode the scanlines
253 // 255 //
254 uint8_t* scanline = bm->getAddr8(0, 0); 256 uint8_t* scanline = bm->getAddr8(0, 0);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 static SkImageDecoder_DecodeReg gReg(sk_libgif_dfactory); 380 static SkImageDecoder_DecodeReg gReg(sk_libgif_dfactory);
379 381
380 static SkImageDecoder::Format get_format_gif(SkStreamRewindable* stream) { 382 static SkImageDecoder::Format get_format_gif(SkStreamRewindable* stream) {
381 if (is_gif(stream)) { 383 if (is_gif(stream)) {
382 return SkImageDecoder::kGIF_Format; 384 return SkImageDecoder::kGIF_Format;
383 } 385 }
384 return SkImageDecoder::kUnknown_Format; 386 return SkImageDecoder::kUnknown_Format;
385 } 387 }
386 388
387 static SkImageDecoder_FormatReg gFormatReg(get_format_gif); 389 static SkImageDecoder_FormatReg gFormatReg(get_format_gif);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698