| Index: tests/CodexTest.cpp
|
| diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp
|
| index f4ed0e8b02858bceb343fbe5092573c4643a9a83..6c4fe68e27dd6d6b60df109b9e933715e4e106c1 100644
|
| --- a/tests/CodexTest.cpp
|
| +++ b/tests/CodexTest.cpp
|
| @@ -30,25 +30,24 @@ static void md5(const SkBitmap& bm, SkMD5::Digest* digest) {
|
| static void check(skiatest::Reporter* r,
|
| const char path[],
|
| SkISize size,
|
| - bool canRewind) {
|
| + bool supportsScanlineDecoding) {
|
| SkAutoTDelete<SkStream> stream(resource(path));
|
| if (!stream) {
|
| SkDebugf("Missing resource '%s'\n", path);
|
| return;
|
| }
|
| - SkAutoTDelete<SkImageGenerator> gen(
|
| - SkCodec::NewFromStream(stream.detach()));
|
| - if (!gen) {
|
| + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach()));
|
| + if (!codec) {
|
| ERRORF(r, "Unable to decode '%s'", path);
|
| return;
|
| }
|
| - SkImageInfo info = gen->getInfo();
|
| + SkImageInfo info = codec->getInfo();
|
| REPORTER_ASSERT(r, info.dimensions() == size);
|
| SkBitmap bm;
|
| bm.allocPixels(info);
|
| SkAutoLockPixels autoLockPixels(bm);
|
| SkImageGenerator::Result result =
|
| - gen->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL);
|
| + codec->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL);
|
| REPORTER_ASSERT(r, result == SkImageGenerator::kSuccess);
|
|
|
| SkMD5::Digest digest1, digest2;
|
| @@ -57,27 +56,39 @@ static void check(skiatest::Reporter* r,
|
| bm.eraseColor(SK_ColorYELLOW);
|
|
|
| result =
|
| - gen->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL);
|
| + codec->getPixels(info, bm.getPixels(), bm.rowBytes(), NULL, NULL, NULL);
|
|
|
| - // All ImageGenerators should support re-decoding the pixels.
|
| - // It is a known bug that some can not.
|
| - if (canRewind) {
|
| - REPORTER_ASSERT(r, result == SkImageGenerator::kSuccess);
|
| - // verify that re-decoding gives the same result.
|
| - md5(bm, &digest2);
|
| - REPORTER_ASSERT(r, digest1 == digest2);
|
| + REPORTER_ASSERT(r, result == SkImageGenerator::kSuccess);
|
| + // verify that re-decoding gives the same result.
|
| + md5(bm, &digest2);
|
| + REPORTER_ASSERT(r, digest1 == digest2);
|
| +
|
| + SkScanlineDecoder* scanlineDecoder = codec->getScanlineDecoder(info);
|
| + if (supportsScanlineDecoding) {
|
| + bm.eraseColor(SK_ColorYELLOW);
|
| + REPORTER_ASSERT(r, scanlineDecoder);
|
| + for (int y = 0; y < info.height(); y++) {
|
| + result = scanlineDecoder->getScanlines(bm.getAddr(0, y), 1, 0);
|
| + REPORTER_ASSERT(r, result == SkImageGenerator::kSuccess);
|
| + }
|
| + // verify that scanline decoding gives the same result.
|
| + SkMD5::Digest digest3;
|
| + md5(bm, &digest3);
|
| + REPORTER_ASSERT(r, digest3 == digest1);
|
| + } else {
|
| + REPORTER_ASSERT(r, !scanlineDecoder);
|
| }
|
| }
|
|
|
| DEF_TEST(Codec, r) {
|
| // WBMP
|
| - check(r, "mandrill.wbmp", SkISize::Make(512, 512), true);
|
| + check(r, "mandrill.wbmp", SkISize::Make(512, 512), false);
|
|
|
| // BMP
|
| - check(r, "randPixels.bmp", SkISize::Make(8, 8), true);
|
| + check(r, "randPixels.bmp", SkISize::Make(8, 8), false);
|
|
|
| // ICO
|
| - check(r, "color_wheel.ico", SkISize::Make(128, 128), true);
|
| + check(r, "color_wheel.ico", SkISize::Make(128, 128), false);
|
|
|
| // PNG
|
| check(r, "arrow.png", SkISize::Make(187, 312), true);
|
|
|