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

Unified Diff: src/codec/SkBmpCodec.cpp

Issue 1287423002: Scanline decoding for bmp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Scanline decoding for bmp without reordering Created 5 years, 4 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/SkBmpCodec.cpp
diff --git a/src/codec/SkBmpCodec.cpp b/src/codec/SkBmpCodec.cpp
index fa4608ffeec513cacd753fc3efc721497d1eff3c..2b70cb415891d95cf5b2a8f81258e65e5b36b635 100644
--- a/src/codec/SkBmpCodec.cpp
+++ b/src/codec/SkBmpCodec.cpp
@@ -44,16 +44,6 @@ enum BmpCompressionMethod {
};
/*
- * Used to define the input format of the bmp
- */
-enum BmpInputFormat {
- kStandard_BmpInputFormat,
- kRLE_BmpInputFormat,
- kBitMask_BmpInputFormat,
- kUnknown_BmpInputFormat
-};
-
-/*
* Checks the start of the stream to see if the image is a bitmap
*/
bool SkBmpCodec::IsBmp(SkStream* stream) {
@@ -472,7 +462,7 @@ bool SkBmpCodec::ReadHeader(SkStream* stream, bool inIco, SkCodec** codecOut) {
switch (inputFormat) {
case kStandard_BmpInputFormat:
*codecOut = SkNEW_ARGS(SkBmpStandardCodec, (imageInfo, stream,
- bitsPerPixel, numColors, bytesPerColor,
+ inputFormat, bitsPerPixel, numColors, bytesPerColor,
offset - bytesRead, rowOrder, inIco));
return true;
case kBitMask_BmpInputFormat:
@@ -490,7 +480,7 @@ bool SkBmpCodec::ReadHeader(SkStream* stream, bool inIco, SkCodec** codecOut) {
}
*codecOut = SkNEW_ARGS(SkBmpMaskCodec, (imageInfo, stream,
- bitsPerPixel, masks.detach(), rowOrder));
+ inputFormat, bitsPerPixel, masks.detach(), rowOrder));
return true;
case kRLE_BmpInputFormat:
// Bmp-in-Ico must be standard mode
@@ -499,7 +489,7 @@ bool SkBmpCodec::ReadHeader(SkStream* stream, bool inIco, SkCodec** codecOut) {
// Icos skip the header that contains totalBytes.
SkASSERT(!inIco);
*codecOut = SkNEW_ARGS(SkBmpRLECodec, (
- imageInfo, stream, bitsPerPixel, numColors,
+ imageInfo, stream, inputFormat, bitsPerPixel, numColors,
bytesPerColor, offset - bytesRead, rowOrder, RLEBytes));
return true;
default:
@@ -529,8 +519,9 @@ SkCodec* SkBmpCodec::NewFromStream(SkStream* stream, bool inIco) {
}
SkBmpCodec::SkBmpCodec(const SkImageInfo& info, SkStream* stream,
- uint16_t bitsPerPixel, RowOrder rowOrder)
+ BmpInputFormat inputFormat, uint16_t bitsPerPixel, RowOrder rowOrder)
: INHERITED(info, stream)
+ , fInputFormat(inputFormat)
, fBitsPerPixel(bitsPerPixel)
, fRowOrder(rowOrder)
{}
@@ -562,3 +553,21 @@ uint32_t SkBmpCodec::computeNumColors(uint32_t numColors) {
}
return numColors;
}
+
+SkScanlineDecoder* SkBmpCodec::NewSDFromStream(SkStream* stream) {
+ SkAutoTDelete<SkBmpCodec> codec(static_cast<SkBmpCodec*>(SkBmpCodec::NewFromStream(stream)));
+ if (!codec) {
+ return NULL;
+ }
+
+ switch(codec->fInputFormat) {
+ case kStandard_BmpInputFormat:
+ return SkNEW_ARGS(SkBmpStandardScanlineDecoder, ((SkBmpStandardCodec*) codec.detach()));
+ case kBitMask_BmpInputFormat:
+ return SkNEW_ARGS(SkBmpMaskScanlineDecoder, ((SkBmpMaskCodec*) codec.detach()));
+ case kRLE_BmpInputFormat:
+ return SkNEW_ARGS(SkBmpRLEScanlineDecoder, ((SkBmpRLECodec*) codec.detach()));
+ default:
+ return NULL;
scroggo 2015/08/13 21:25:35 Can this case be reached?
msarett 2015/08/14 15:44:48 No. Adding an SkASSERT(false).
+ }
+}
« no previous file with comments | « src/codec/SkBmpCodec.h ('k') | src/codec/SkBmpMaskCodec.h » ('j') | src/codec/SkBmpMaskCodec.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698