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

Unified Diff: tests/CodexTest.cpp

Issue 1385703002: SkScaledCodec should implement onRewind() (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 2 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 | « src/codec/SkScaledCodec.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/CodexTest.cpp
diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp
index f1c5bbaa128e1c989bf06af39f27f7a22e211864..63631822de45b16c3f3a31bd0406139a7d8b7343 100644
--- a/tests/CodexTest.cpp
+++ b/tests/CodexTest.cpp
@@ -74,39 +74,20 @@ SkIRect generate_random_subset(SkRandom* rand, int w, int h) {
return rect;
}
-static void check(skiatest::Reporter* r,
- const char path[],
- SkISize size,
- bool supportsScanlineDecoding,
- bool supportsSubsetDecoding,
- bool supports565 = true) {
- SkAutoTDelete<SkStream> stream(resource(path));
- if (!stream) {
- SkDebugf("Missing resource '%s'\n", path);
- return;
- }
- SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach()));
- if (!codec) {
- ERRORF(r, "Unable to decode '%s'", path);
- return;
- }
-
- // This test is used primarily to verify rewinding works properly. Using kN32 allows
- // us to test this without the added overhead of creating different bitmaps depending
- // on the color type (ex: building a color table for kIndex8). DM is where we test
- // decodes to all possible destination color types.
- SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType);
+static void test_codec(skiatest::Reporter* r, SkCodec* codec, SkBitmap& bm, const SkImageInfo& info,
+ const SkISize& size, bool supports565, SkMD5::Digest* digest,
+ const SkMD5::Digest* goodDigest) {
REPORTER_ASSERT(r, info.dimensions() == size);
-
- SkBitmap bm;
bm.allocPixels(info);
SkAutoLockPixels autoLockPixels(bm);
- SkCodec::Result result =
- codec->getPixels(info, bm.getPixels(), bm.rowBytes(), nullptr, nullptr, nullptr);
+
+ SkCodec::Result result = codec->getPixels(info, bm.getPixels(), bm.rowBytes());
REPORTER_ASSERT(r, result == SkCodec::kSuccess);
- SkMD5::Digest digest;
- md5(bm, &digest);
+ md5(bm, digest);
+ if (goodDigest) {
+ REPORTER_ASSERT(r, *digest == *goodDigest);
+ }
{
// Test decoding to 565
@@ -120,7 +101,7 @@ static void check(skiatest::Reporter* r,
// a decode to 565, since choosing to decode to 565 may result in some of the decode
// options being modified. These options should return to their defaults on another
// decode to kN32, so the new digest should match the old digest.
- test_info(r, codec, info, SkCodec::kSuccess, &digest);
+ test_info(r, codec, info, SkCodec::kSuccess, digest);
{
// Check alpha type conversions
@@ -143,10 +124,34 @@ static void check(skiatest::Reporter* r,
test_info(r, codec, info.makeAlphaType(otherAt), SkCodec::kSuccess, nullptr);
}
}
+}
- // Scanline decoding follows.
+static void check(skiatest::Reporter* r,
+ const char path[],
+ SkISize size,
+ bool supportsScanlineDecoding,
+ bool supportsSubsetDecoding,
+ bool supports565 = true) {
+
+ SkAutoTDelete<SkStream> stream(resource(path));
+ if (!stream) {
+ SkDebugf("Missing resource '%s'\n", path);
+ return;
+ }
+ SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach()));
+ if (!codec) {
+ ERRORF(r, "Unable to decode '%s'", path);
+ return;
+ }
- // Need to call start() first.
+ // Test full image decodes with SkCodec
+ SkMD5::Digest codecDigest;
+ SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType);
+ SkBitmap bm;
+ test_codec(r, codec, bm, info, size, supports565, &codecDigest, nullptr);
+
+ // Scanline decoding follows.
+ // Need to call startScanlineDecode() first.
REPORTER_ASSERT(r, codec->getScanlines(bm.getAddr(0, 0), 1, 0)
== SkCodec::kScanlineDecodingNotStarted);
REPORTER_ASSERT(r, codec->skipScanlines(1)
@@ -159,12 +164,12 @@ static void check(skiatest::Reporter* r,
REPORTER_ASSERT(r, startResult == SkCodec::kSuccess);
for (int y = 0; y < info.height(); y++) {
- result = codec->getScanlines(bm.getAddr(0, y), 1, 0);
+ SkCodec::Result result = codec->getScanlines(bm.getAddr(0, y), 1, 0);
REPORTER_ASSERT(r, result == SkCodec::kSuccess);
}
// verify that scanline decoding gives the same result.
if (SkCodec::kTopDown_SkScanlineOrder == codec->getScanlineOrder()) {
- compare_to_good_digest(r, digest, bm);
+ compare_to_good_digest(r, codecDigest, bm);
}
// Cannot continue to decode scanlines beyond the end
@@ -220,6 +225,24 @@ static void check(skiatest::Reporter* r,
REPORTER_ASSERT(r, result == SkCodec::kUnimplemented);
}
}
+
+ // SkScaledCodec tests
+ if (supportsScanlineDecoding || supportsSubsetDecoding){
+ SkAutoTDelete<SkStream> stream(resource(path));
+ if (!stream) {
+ SkDebugf("Missing resource '%s'\n", path);
+ return;
+ }
+ SkAutoTDelete<SkCodec> codec(SkScaledCodec::NewFromStream(stream.detach()));
+ if (!codec) {
+ ERRORF(r, "Unable to decode '%s'", path);
+ return;
+ }
+
+ SkBitmap bm;
+ SkMD5::Digest scaledCodecDigest;
+ test_codec(r, codec, bm, info, size, supports565, &scaledCodecDigest, &codecDigest);
+ }
}
DEF_TEST(Codec, r) {
« no previous file with comments | « src/codec/SkScaledCodec.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698