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

Unified Diff: dm/DM.cpp

Issue 1055743003: Swizzler changes Index8 and 565 (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Create codec before pushing srcs Created 5 years, 8 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
« no previous file with comments | « no previous file | dm/DMSrcSink.h » ('j') | dm/DMSrcSink.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dm/DM.cpp
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 5d85e22b3a8e989d30ff358ead3f1098df882c37..4f7fe682d34246e1eebdde0cac110b57ee51cf8e 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -13,6 +13,7 @@
#include "ProcStats.h"
#include "SkBBHFactory.h"
#include "SkChecksum.h"
+#include "SkCodecPriv.h"
#include "SkCommonFlags.h"
#include "SkForceLinking.h"
#include "SkGraphics.h"
@@ -178,6 +179,46 @@ static void push_src(const char* tag, const char* options, Src* s) {
}
}
+static SkCodec* create_codec(Path path) {
+ SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str()));
+ if (!encoded) {
+ SkCodecPrintf(return SkStringPrintf("Couldn't read %s.", path.c_str()));
scroggo 2015/04/08 17:21:27 SkCodecPrintf (which I think is defined in src/cod
msarett 2015/04/08 19:35:40 Yeah that is what I meant.
+ return NULL;
+ }
+
+ return SkCodec::NewFromData(encoded);
+}
+
+static void push_codec_srcs(Path path) {
+ // Create a codec
+ SkCodec* codec = create_codec(path);
+ if (NULL == codec) {
+ SkCodecPrintf(return SkStringPrintf("Couldn't create codec for %s.", path.c_str()));
+ return;
+ }
+
+ // Build additional test cases for images that decode natively to non-canvas types
+ switch(codec->getInfo().colorType()) {
+ case kIndex_8_SkColorType:
+ push_src("image", "codec kIndex8", new CodecSrc(path, CodecSrc::kNormal_Mode,
scroggo 2015/04/08 17:21:27 We should probably add a src for kScanline_Mode as
msarett 2015/04/08 19:35:40 Done.
+ CodecSrc::kIndex8_Always_DstColorType, create_codec(path)));
msarett 2015/04/08 13:59:10 Can we assume that if create_codec succeeds once,
scroggo 2015/04/08 17:21:27 If it does not, that is a bug (or a disk read erro
msarett 2015/04/08 19:35:40 Acknowledged.
+ break;
+ case kGray_8_SkColorType:
+ push_src("image", "codec kGray8", new CodecSrc(path, CodecSrc::kNormal_Mode,
+ CodecSrc::kGrayscale_Always_DstColorType, create_codec(path)));
+ break;
+ default:
+ // Do nothing
+ break;
+ }
+
+ // Decode all images to the canvas color type
+ push_src("image", "codec", new CodecSrc(path, CodecSrc::kNormal_Mode,
+ CodecSrc::kGetFromCanvas_DstColorType, create_codec(path)));
+ push_src("image", "scanline", new CodecSrc(
+ path, CodecSrc::kScanline_Mode, CodecSrc::kGetFromCanvas_DstColorType, codec));
+}
+
static bool codec_supported(const char* ext) {
// FIXME: Once other versions of SkCodec are available, we can add them to this
// list (and eventually we can remove this check once they are all supported).
@@ -223,8 +264,7 @@ static void gather_srcs() {
push_src("image", "decode", new ImageSrc(path)); // Decode entire image
push_src("image", "subset", new ImageSrc(path, 2)); // Decode into 2x2 subsets
if (codec_supported(exts[j])) {
- push_src("image", "codec", new CodecSrc(path, CodecSrc::kNormal_Mode));
- push_src("image", "scanline", new CodecSrc(path, CodecSrc::kScanline_Mode));
+ push_codec_srcs(path);
}
}
}
@@ -232,8 +272,7 @@ static void gather_srcs() {
// assume that FLAGS_images[i] is a valid image if it is a file.
push_src("image", "decode", new ImageSrc(flag)); // Decode entire image.
push_src("image", "subset", new ImageSrc(flag, 2)); // Decode into 2 x 2 subsets
- push_src("image", "codec", new CodecSrc(flag, CodecSrc::kNormal_Mode));
- push_src("image", "scanline", new CodecSrc(flag, CodecSrc::kScanline_Mode));
+ push_codec_srcs(flag);
}
}
}
« no previous file with comments | « no previous file | dm/DMSrcSink.h » ('j') | dm/DMSrcSink.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698