Index: src/images/SkImageDecoder_libjpeg.cpp |
diff --git a/src/images/SkImageDecoder_libjpeg.cpp b/src/images/SkImageDecoder_libjpeg.cpp |
index b08835b542303a41932ccb28cd434144c8cf8080..befe6dc580d949adad230f99e07599531229a5e8 100644 |
--- a/src/images/SkImageDecoder_libjpeg.cpp |
+++ b/src/images/SkImageDecoder_libjpeg.cpp |
@@ -248,12 +248,12 @@ private: |
#endif |
/** |
- * Determine the appropriate bitmap config and out_color_space based on |
+ * Determine the appropriate bitmap colortype and out_color_space based on |
* both the preference of the caller and the jpeg_color_space on the |
* jpeg_decompress_struct passed in. |
* Must be called after jpeg_read_header. |
*/ |
- SkBitmap::Config getBitmapConfig(jpeg_decompress_struct*); |
+ SkColorType getBitmapColorType(jpeg_decompress_struct*); |
typedef SkImageDecoder INHERITED; |
}; |
@@ -400,7 +400,7 @@ static void set_dct_method(const SkImageDecoder& decoder, jpeg_decompress_struct |
#endif |
} |
-SkBitmap::Config SkJPEGImageDecoder::getBitmapConfig(jpeg_decompress_struct* cinfo) { |
+SkColorType SkJPEGImageDecoder::getBitmapColorType(jpeg_decompress_struct* cinfo) { |
SkASSERT(cinfo != NULL); |
SrcDepth srcDepth = k32Bit_SrcDepth; |
@@ -408,26 +408,26 @@ SkBitmap::Config SkJPEGImageDecoder::getBitmapConfig(jpeg_decompress_struct* cin |
srcDepth = k8BitGray_SrcDepth; |
} |
- SkBitmap::Config config = this->getPrefConfig(srcDepth, /*hasAlpha*/ false); |
- switch (config) { |
- case SkBitmap::kA8_Config: |
- // Only respect A8 config if the original is grayscale, |
+ SkColorType colorType = this->getPrefColorType(srcDepth, /*hasAlpha*/ false); |
+ switch (colorType) { |
+ case kAlpha_8_SkColorType: |
+ // Only respect A8 colortype if the original is grayscale, |
// in which case we will treat the grayscale as alpha |
// values. |
if (cinfo->jpeg_color_space != JCS_GRAYSCALE) { |
- config = SkBitmap::kARGB_8888_Config; |
+ colorType = kN32_SkColorType; |
} |
break; |
- case SkBitmap::kARGB_8888_Config: |
+ case kN32_SkColorType: |
// Fall through. |
- case SkBitmap::kARGB_4444_Config: |
+ case kARGB_4444_SkColorType: |
// Fall through. |
- case SkBitmap::kRGB_565_Config: |
- // These are acceptable destination configs. |
+ case kRGB_565_SkColorType: |
+ // These are acceptable destination colortypes. |
break; |
default: |
- // Force all other configs to 8888. |
- config = SkBitmap::kARGB_8888_Config; |
+ // Force all other colortypes to 8888. |
+ colorType = kN32_SkColorType; |
break; |
} |
@@ -441,37 +441,37 @@ SkBitmap::Config SkJPEGImageDecoder::getBitmapConfig(jpeg_decompress_struct* cin |
cinfo->out_color_space = JCS_CMYK; |
break; |
case JCS_GRAYSCALE: |
- if (SkBitmap::kA8_Config == config) { |
+ if (kAlpha_8_SkColorType == colorType) { |
cinfo->out_color_space = JCS_GRAYSCALE; |
break; |
} |
// The data is JCS_GRAYSCALE, but the caller wants some sort of RGB |
- // config. Fall through to set to the default. |
+ // colortype. Fall through to set to the default. |
default: |
cinfo->out_color_space = JCS_RGB; |
break; |
} |
- return config; |
+ return colorType; |
} |
-#ifdef ANDROID_RGB |
/** |
- * Based on the config and dither mode, adjust out_color_space and |
- * dither_mode of cinfo. |
+ * Based on the colortype and dither mode, adjust out_color_space and |
+ * dither_mode of cinfo. Only does work in ANDROID_RGB |
*/ |
static void adjust_out_color_space_and_dither(jpeg_decompress_struct* cinfo, |
- SkBitmap::Config config, |
+ SkColorType colorType, |
const SkImageDecoder& decoder) { |
SkASSERT(cinfo != NULL); |
+#ifdef ANDROID_RGB |
cinfo->dither_mode = JDITHER_NONE; |
if (JCS_CMYK == cinfo->out_color_space) { |
return; |
} |
- switch(config) { |
- case SkBitmap::kARGB_8888_Config: |
+ switch (colorType) { |
+ case kN32_SkColorType: |
cinfo->out_color_space = JCS_RGBA_8888; |
break; |
- case SkBitmap::kRGB_565_Config: |
+ case kRGB_565_SkColorType: |
cinfo->out_color_space = JCS_RGB_565; |
if (decoder.getDitherImage()) { |
cinfo->dither_mode = JDITHER_ORDERED; |
@@ -480,8 +480,8 @@ static void adjust_out_color_space_and_dither(jpeg_decompress_struct* cinfo, |
default: |
break; |
} |
-} |
#endif |
+} |
/** |
@@ -569,20 +569,19 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
turn_off_visual_optimizations(&cinfo); |
- const SkBitmap::Config config = this->getBitmapConfig(&cinfo); |
+ const SkColorType colorType = this->getBitmapColorType(&cinfo); |
+ const SkAlphaType alphaType = kAlpha_8_SkColorType == colorType ? |
+ kPremul_SkAlphaType : kOpaque_SkAlphaType; |
-#ifdef ANDROID_RGB |
- adjust_out_color_space_and_dither(&cinfo, config, *this); |
-#endif |
+ adjust_out_color_space_and_dither(&cinfo, colorType, *this); |
if (1 == sampleSize && SkImageDecoder::kDecodeBounds_Mode == mode) { |
// Assume an A8 bitmap is not opaque to avoid the check of each |
// individual pixel. It is very unlikely to be opaque, since |
// an opaque A8 bitmap would not be very interesting. |
// Otherwise, a jpeg image is opaque. |
- return bm->setConfig(config, cinfo.image_width, cinfo.image_height, 0, |
- SkBitmap::kA8_Config == config ? |
- kPremul_SkAlphaType : kOpaque_SkAlphaType); |
+ return bm->setInfo(SkImageInfo::Make(cinfo.image_width, cinfo.image_height, |
+ colorType, alphaType)); |
} |
/* image_width and image_height are the original dimensions, available |
@@ -606,17 +605,16 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
// individual pixel. It is very unlikely to be opaque, since |
// an opaque A8 bitmap would not be very interesting. |
// Otherwise, a jpeg image is opaque. |
- return bm->setConfig(config, smpl.scaledWidth(), smpl.scaledHeight(), |
- 0, SkBitmap::kA8_Config == config ? |
- kPremul_SkAlphaType : kOpaque_SkAlphaType); |
+ return bm->setInfo(SkImageInfo::Make(smpl.scaledWidth(), smpl.scaledHeight(), |
+ colorType, alphaType)); |
} else { |
return return_false(cinfo, *bm, "start_decompress"); |
} |
} |
sampleSize = recompute_sampleSize(sampleSize, cinfo); |
- // should we allow the Chooser (if present) to pick a config for us??? |
- if (!this->chooseFromOneChoice(config, cinfo.output_width, cinfo.output_height)) { |
+ // should we allow the Chooser (if present) to pick a colortype for us??? |
+ if (!this->chooseFromOneChoice(colorType, cinfo.output_width, cinfo.output_height)) { |
return return_false(cinfo, *bm, "chooseFromOneChoice"); |
} |
@@ -625,8 +623,8 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
// individual pixel. It is very unlikely to be opaque, since |
// an opaque A8 bitmap would not be very interesting. |
// Otherwise, a jpeg image is opaque. |
- bm->setConfig(config, sampler.scaledWidth(), sampler.scaledHeight(), 0, |
- SkBitmap::kA8_Config != config ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
+ bm->setInfo(SkImageInfo::Make(sampler.scaledWidth(), sampler.scaledHeight(), |
+ colorType, alphaType)); |
if (SkImageDecoder::kDecodeBounds_Mode == mode) { |
return true; |
} |
@@ -641,10 +639,8 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
a significant performance boost. |
*/ |
if (sampleSize == 1 && |
- ((config == SkBitmap::kARGB_8888_Config && |
- cinfo.out_color_space == JCS_RGBA_8888) || |
- (config == SkBitmap::kRGB_565_Config && |
- cinfo.out_color_space == JCS_RGB_565))) |
+ ((kN32_SkColorType == colorType && cinfo.out_color_space == JCS_RGBA_8888) || |
+ (kRGB_565_SkColorType == colorType && cinfo.out_color_space == JCS_RGB_565))) |
{ |
JSAMPLE* rowptr = (JSAMPLE*)bm->getPixels(); |
INT32 const bpr = bm->rowBytes(); |
@@ -764,7 +760,7 @@ bool SkJPEGImageDecoder::onBuildTileIndex(SkStreamRewindable* stream, int *width |
// based on the config in onDecodeSubset. This should be fine, since |
// jpeg_init_read_tile_scanline will check out_color_space again after |
// that change (when it calls jinit_color_deconverter). |
- (void) this->getBitmapConfig(cinfo); |
+ (void) this->getBitmapColorType(cinfo); |
turn_off_visual_optimizations(cinfo); |
@@ -815,10 +811,8 @@ bool SkJPEGImageDecoder::onDecodeSubset(SkBitmap* bm, const SkIRect& region) { |
set_dct_method(*this, cinfo); |
- const SkBitmap::Config config = this->getBitmapConfig(cinfo); |
-#ifdef ANDROID_RGB |
- adjust_out_color_space_and_dither(cinfo, config, *this); |
-#endif |
+ const SkColorType colorType = this->getBitmapColorType(cinfo); |
+ adjust_out_color_space_and_dither(cinfo, colorType, *this); |
int startX = rect.fLeft; |
int startY = rect.fTop; |
@@ -833,14 +827,13 @@ bool SkJPEGImageDecoder::onDecodeSubset(SkBitmap* bm, const SkIRect& region) { |
SkScaledBitmapSampler sampler(width, height, skiaSampleSize); |
SkBitmap bitmap; |
- bitmap.setConfig(config, sampler.scaledWidth(), sampler.scaledHeight()); |
// Assume an A8 bitmap is not opaque to avoid the check of each |
// individual pixel. It is very unlikely to be opaque, since |
// an opaque A8 bitmap would not be very interesting. |
// Otherwise, a jpeg image is opaque. |
- bitmap.setConfig(config, sampler.scaledWidth(), sampler.scaledHeight(), 0, |
- config == SkBitmap::kA8_Config ? kPremul_SkAlphaType : |
- kOpaque_SkAlphaType); |
+ bitmap.setInfo(SkImageInfo::Make(sampler.scaledWidth(), sampler.scaledHeight(), colorType, |
+ kAlpha_8_SkColorType == colorType ? |
+ kPremul_SkAlphaType : kOpaque_SkAlphaType)); |
// Check ahead of time if the swap(dest, src) is possible or not. |
// If yes, then we will stick to AllocPixelRef since it's cheaper with the |
@@ -869,10 +862,8 @@ bool SkJPEGImageDecoder::onDecodeSubset(SkBitmap* bm, const SkIRect& region) { |
a significant performance boost. |
*/ |
if (skiaSampleSize == 1 && |
- ((config == SkBitmap::kARGB_8888_Config && |
- cinfo->out_color_space == JCS_RGBA_8888) || |
- (config == SkBitmap::kRGB_565_Config && |
- cinfo->out_color_space == JCS_RGB_565))) |
+ ((kN32_SkColorType == colorType && cinfo->out_color_space == JCS_RGBA_8888) || |
+ (kRGB_565_SkColorType == colorType && cinfo->out_color_space == JCS_RGB_565))) |
{ |
JSAMPLE* rowptr = (JSAMPLE*)bitmap.getPixels(); |
INT32 const bpr = bitmap.rowBytes(); |
@@ -1116,14 +1107,14 @@ static void Write_Index_YUV(uint8_t* SK_RESTRICT dst, |
} |
static WriteScanline ChooseWriter(const SkBitmap& bm) { |
- switch (bm.config()) { |
- case SkBitmap::kARGB_8888_Config: |
+ switch (bm.colorType()) { |
+ case kN32_SkColorType: |
return Write_32_YUV; |
- case SkBitmap::kRGB_565_Config: |
+ case kRGB_565_SkColorType: |
return Write_16_YUV; |
- case SkBitmap::kARGB_4444_Config: |
+ case kARGB_4444_SkColorType: |
return Write_4444_YUV; |
- case SkBitmap::kIndex8_Config: |
+ case kIndex_8_SkColorType: |
return Write_Index_YUV; |
default: |
return NULL; |