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

Side by Side Diff: tests/KtxTest.cpp

Issue 1733863003: Fix bug in SkGifCodec / Switch SkImageDec tests to use Codec (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Gif bug fix! Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « tests/InvalidIndexedPngTest.cpp ('k') | tests/PathOpsSkpClipTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "Resources.h"
9 #include "SkBitmap.h"
10 #include "SkData.h"
11 #include "SkImageGenerator.h"
12 #include "SkForceLinking.h"
13 #include "SkImageDecoder.h"
14 #include "SkOSFile.h"
15 #include "SkRandom.h"
16 #include "SkStream.h"
17 #include "Test.h"
18
19 __SK_FORCE_IMAGE_DECODER_LINKING;
20
21 /**
22 * First, make sure that writing an 8-bit RGBA KTX file and then
23 * reading it produces the same bitmap.
24 */
25 DEF_TEST(KtxReadWrite, reporter) {
26
27 // Random number generator with explicit seed for reproducibility
28 SkRandom rand(0x1005cbad);
29
30 SkBitmap bm8888;
31 bm8888.allocN32Pixels(128, 128);
32
33 uint8_t *pixels = reinterpret_cast<uint8_t*>(bm8888.getPixels());
34 REPORTER_ASSERT(reporter, pixels);
35
36 if (nullptr == pixels) {
37 return;
38 }
39
40 uint8_t *row = pixels;
41 for (int y = 0; y < bm8888.height(); ++y) {
42 for (int x = 0; x < bm8888.width(); ++x) {
43 uint8_t a = rand.nextRangeU(0, 255);
44 uint8_t r = rand.nextRangeU(0, 255);
45 uint8_t g = rand.nextRangeU(0, 255);
46 uint8_t b = rand.nextRangeU(0, 255);
47
48 SkPMColor &pixel = *(reinterpret_cast<SkPMColor*>(row + x*sizeof(SkP MColor)));
49 pixel = SkPreMultiplyARGB(a, r, g, b);
50 }
51 row += bm8888.rowBytes();
52 }
53 REPORTER_ASSERT(reporter, !(bm8888.empty()));
54
55 SkAutoDataUnref encodedData(SkImageEncoder::EncodeData(bm8888, SkImageEncode r::kKTX_Type, 0));
56 if (nullptr == encodedData.get()) {
57 ERRORF(reporter, "failed to encode the bitmap to KTX");
58 return;
59 }
60
61
62 SkAutoTDelete<SkMemoryStream> stream(new SkMemoryStream(encodedData));
63 REPORTER_ASSERT(reporter, stream);
64
65 SkBitmap decodedBitmap;
66 bool imageDecodeSuccess = SkImageDecoder::DecodeStream(stream, &decodedBitma p);
67 if (!imageDecodeSuccess) {
68 ERRORF(reporter, "failed to decode the KTX stream");
69 return;
70 }
71
72 REPORTER_ASSERT(reporter, decodedBitmap.colorType() == bm8888.colorType());
73 REPORTER_ASSERT(reporter, decodedBitmap.alphaType() == bm8888.alphaType());
74 REPORTER_ASSERT(reporter, decodedBitmap.width() == bm8888.width());
75 REPORTER_ASSERT(reporter, decodedBitmap.height() == bm8888.height());
76 REPORTER_ASSERT(reporter, !(decodedBitmap.empty()));
77
78 uint8_t *decodedPixels = reinterpret_cast<uint8_t*>(decodedBitmap.getPixels( ));
79 REPORTER_ASSERT(reporter, decodedPixels);
80 REPORTER_ASSERT(reporter, decodedBitmap.getSize() == bm8888.getSize());
81
82 if (nullptr == decodedPixels) {
83 return;
84 }
85
86 REPORTER_ASSERT(reporter, memcmp(decodedPixels, pixels, decodedBitmap.getSiz e()) == 0);
87 }
88
89 /**
90 * Next test is to see whether or not reading an unpremultiplied KTX file accura tely
91 * creates a premultiplied buffer...
92 */
93 DEF_TEST(KtxReadUnpremul, reporter) {
94
95 static const uint8_t kHalfWhiteKTX[] = {
96 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, // First twelve bytes is magic
97 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A, // KTX identifier string
98 0x01, 0x02, 0x03, 0x04, // Then magic endian specifier
99 0x01, 0x14, 0x00, 0x00, // uint32_t fGLType;
100 0x01, 0x00, 0x00, 0x00, // uint32_t fGLTypeSize;
101 0x08, 0x19, 0x00, 0x00, // uint32_t fGLFormat;
102 0x58, 0x80, 0x00, 0x00, // uint32_t fGLInternalFormat;
103 0x08, 0x19, 0x00, 0x00, // uint32_t fGLBaseInternalFormat;
104 0x02, 0x00, 0x00, 0x00, // uint32_t fPixelWidth;
105 0x02, 0x00, 0x00, 0x00, // uint32_t fPixelHeight;
106 0x00, 0x00, 0x00, 0x00, // uint32_t fPixelDepth;
107 0x00, 0x00, 0x00, 0x00, // uint32_t fNumberOfArrayElements;
108 0x01, 0x00, 0x00, 0x00, // uint32_t fNumberOfFaces;
109 0x01, 0x00, 0x00, 0x00, // uint32_t fNumberOfMipmapLevels;
110 0x00, 0x00, 0x00, 0x00, // uint32_t fBytesOfKeyValueData;
111 0x10, 0x00, 0x00, 0x00, // image size: 2x2 image of RGBA = 4 * 4 = 16 by tes
112 0xFF, 0xFF, 0xFF, 0x80, // Pixel 1
113 0xFF, 0xFF, 0xFF, 0x80, // Pixel 2
114 0xFF, 0xFF, 0xFF, 0x80, // Pixel 3
115 0xFF, 0xFF, 0xFF, 0x80};// Pixel 4
116
117 SkAutoTDelete<SkMemoryStream> stream(new SkMemoryStream(kHalfWhiteKTX, sizeo f(kHalfWhiteKTX)));
118 REPORTER_ASSERT(reporter, stream);
119
120 SkBitmap decodedBitmap;
121 bool imageDecodeSuccess = SkImageDecoder::DecodeStream(stream, &decodedBitma p);
122 if (!imageDecodeSuccess) {
123 ERRORF(reporter, "failed to decode the KTX stream");
124 return;
125 }
126
127 REPORTER_ASSERT(reporter, decodedBitmap.colorType() == kN32_SkColorType);
128 REPORTER_ASSERT(reporter, decodedBitmap.alphaType() == kPremul_SkAlphaType);
129 REPORTER_ASSERT(reporter, decodedBitmap.width() == 2);
130 REPORTER_ASSERT(reporter, decodedBitmap.height() == 2);
131 REPORTER_ASSERT(reporter, !(decodedBitmap.empty()));
132
133 uint8_t *decodedPixels = reinterpret_cast<uint8_t*>(decodedBitmap.getPixels( ));
134 REPORTER_ASSERT(reporter, decodedPixels);
135
136 uint8_t *row = decodedPixels;
137 for (int j = 0; j < decodedBitmap.height(); ++j) {
138 for (int i = 0; i < decodedBitmap.width(); ++i) {
139 SkPMColor pixel = *(reinterpret_cast<SkPMColor*>(row + i*sizeof(SkPM Color)));
140 REPORTER_ASSERT(reporter, SkPreMultiplyARGB(0x80, 0xFF, 0xFF, 0xFF) == pixel);
141 }
142 row += decodedBitmap.rowBytes();
143 }
144 }
OLDNEW
« no previous file with comments | « tests/InvalidIndexedPngTest.cpp ('k') | tests/PathOpsSkpClipTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698