| Index: src/images/SkImageDecoder.cpp
|
| diff --git a/src/images/SkImageDecoder.cpp b/src/images/SkImageDecoder.cpp
|
| index 5d94bb1c2db97efd618320213210ef91ee363329..a0d3f52c61fcb1db9b306901482c33841b316e0c 100644
|
| --- a/src/images/SkImageDecoder.cpp
|
| +++ b/src/images/SkImageDecoder.cpp
|
| @@ -145,31 +145,43 @@ void SkImageDecoder::setPrefConfigTable(const SkBitmap::Config pref[6]) {
|
| fUsePrefTable = false;
|
| } else {
|
| fUsePrefTable = true;
|
| - memcpy(fPrefTable, pref, sizeof(fPrefTable));
|
| + fPrefTable.f8Index_NoAlpha = pref[0];
|
| + fPrefTable.f8Index_YesAlpha = pref[1];
|
| + fPrefTable.f8Gray = SkBitmap::kNo_Config;
|
| + fPrefTable.f16bit_NoAlpha = pref[2];
|
| + fPrefTable.f16bit_YesAlpha = pref[3];
|
| + fPrefTable.f32_24bit_NoAlpha = pref[4];
|
| + fPrefTable.f32_24bit_YesAlpha = pref[5];
|
| }
|
| }
|
|
|
| +void SkImageDecoder::setPrefConfigTable(const PrefConfigTable& prefTable) {
|
| + fUsePrefTable = true;
|
| + fPrefTable = prefTable;
|
| +}
|
| +
|
| SkBitmap::Config SkImageDecoder::getPrefConfig(SrcDepth srcDepth,
|
| bool srcHasAlpha) const {
|
| SkBitmap::Config config;
|
|
|
| if (fUsePrefTable) {
|
| - int index = 0;
|
| switch (srcDepth) {
|
| case kIndex_SrcDepth:
|
| - index = 0;
|
| + config = srcHasAlpha ? fPrefTable.f8Index_YesAlpha
|
| + : fPrefTable.f8Index_NoAlpha;
|
| + break;
|
| + case k8BitGray_SrcDepth:
|
| + config = fPrefTable.f8Gray;
|
| break;
|
| case k16Bit_SrcDepth:
|
| - index = 2;
|
| + config = srcHasAlpha ? fPrefTable.f16bit_YesAlpha
|
| + : fPrefTable.f16bit_NoAlpha;
|
| break;
|
| case k32Bit_SrcDepth:
|
| - index = 4;
|
| + config = srcHasAlpha ? fPrefTable.f32_24bit_YesAlpha
|
| + : fPrefTable.f32_24bit_NoAlpha;
|
| break;
|
| }
|
| - if (srcHasAlpha) {
|
| - index += 1;
|
| - }
|
| - config = fPrefTable[index];
|
| } else {
|
| config = fDefaultPref;
|
| }
|
|
|