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

Unified Diff: dm/DMSrcSink.cpp

Issue 1549473003: Add getYUV8Planes() API to SkCodec (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add a test to DM Created 4 years, 11 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: dm/DMSrcSink.cpp
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index bbfa5199e61f06bead0549fad66d11fa40313a23..9645cb0238a4878f11f810febb48e83ad844a0be 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -8,6 +8,7 @@
#include "DMSrcSink.h"
#include "SkAndroidCodec.h"
#include "SkCodec.h"
+#include "SkCodecImageGenerator.h"
#include "SkCommonFlags.h"
#include "SkData.h"
#include "SkDocument.h"
@@ -240,11 +241,9 @@ CodecSrc::CodecSrc(Path path, Mode mode, DstColorType dstColorType, float scale)
{}
bool CodecSrc::veto(SinkFlags flags) const {
- // No need to test decoding to non-raster or indirect backend.
- // TODO: Once we implement GPU paths (e.g. JPEG YUV), we should use a deferred decode to
- // let the GPU handle it.
- return flags.type != SinkFlags::kRaster
- || flags.approach != SinkFlags::kDirect;
+ // Test to direct raster backend. Also enable CodecImageGenerator tests on gpu.
scroggo 2016/01/19 18:37:48 Does this mean to test CodecImageGenerator on the
msarett 2016/01/19 22:35:27 I decided it would be interesting to test to 8888,
+ return (flags.type != SinkFlags::kRaster || flags.approach != SinkFlags::kDirect) &&
scroggo 2016/01/19 18:37:48 Nit: I think it would be easier to follow this wit
msarett 2016/01/19 22:35:27 Done. As side comment, I find the concept of a ve
scroggo 2016/01/21 17:27:28 Haha, agreed. It confuses me every time I look at
+ (kGen_Mode != fMode || flags.type != SinkFlags::kGPU);
}
bool get_decode_info(SkImageInfo* decodeInfo, const SkImageInfo& defaultInfo,
@@ -274,11 +273,38 @@ bool get_decode_info(SkImageInfo* decodeInfo, const SkImageInfo& defaultInfo,
return true;
}
+Error test_gen(SkCanvas* canvas, SkData* data) {
+ SkImageGenerator* gen = SkCodecImageGenerator::NewFromEncodedCodec(data);
+ if (!gen) {
+ return "Could not create image generator.";
+ }
+
+ // FIXME: The gpu backend does not draw kGray sources correctly.
scroggo 2016/01/19 18:37:48 Is there a bug filed for this?
msarett 2016/01/19 22:35:27 I'll file one and reference it here.
+ if (kGray_8_SkColorType == gen->getInfo().colorType()) {
scroggo 2016/01/19 18:37:48 Alternatively, we could skip before we ever get he
msarett 2016/01/19 22:35:27 Done.
+ return Error::Nonfatal("Disabling kGray decodes with CodecImageGenerator.");
+ }
+
+ SkBitmap bitmap;
+ if (!SkDEPRECATED_InstallDiscardablePixelRef(gen, &bitmap)) {
scroggo 2016/01/19 18:37:48 I see this is deprecated. Why not call SkImage::Ne
msarett 2016/01/19 22:35:27 Ah yes of course.
+ return "Could not install codec image generator.";
+ }
+
+ canvas->drawBitmap(bitmap, 0, 0);
+ return "";
+}
+
Error CodecSrc::draw(SkCanvas* canvas) const {
SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str()));
if (!encoded) {
return SkStringPrintf("Couldn't read %s.", fPath.c_str());
}
+
+ // The CodecImageGenerator test does not share much code with the other tests,
+ // so we will handle it in its own function.
+ if (kGen_Mode == fMode) {
+ return test_gen(canvas, encoded);
+ }
+
SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded));
if (nullptr == codec.get()) {
return SkStringPrintf("Couldn't create codec for %s.", fPath.c_str());
@@ -509,6 +535,9 @@ Error CodecSrc::draw(SkCanvas* canvas) const {
}
return "";
}
+ default:
+ SkASSERT(false);
+ return "Invalid fMode";
}
return "";
}
@@ -541,8 +570,6 @@ AndroidCodecSrc::AndroidCodecSrc(Path path, Mode mode, CodecSrc::DstColorType ds
bool AndroidCodecSrc::veto(SinkFlags flags) const {
// No need to test decoding to non-raster or indirect backend.
- // TODO: Once we implement GPU paths (e.g. JPEG YUV), we should use a deferred decode to
scroggo 2016/01/19 18:37:48 I assume the TODO has changed here? Or maybe it's
msarett 2016/01/19 22:35:27 Yes YUV does not support sampling or native scalin
- // let the GPU handle it.
return flags.type != SinkFlags::kRaster
|| flags.approach != SinkFlags::kDirect;
}
« no previous file with comments | « dm/DMSrcSink.h ('k') | include/codec/SkCodec.h » ('j') | src/codec/SkCodecImageGenerator.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698