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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoderTest.cpp

Issue 2496663002: Merge css3/image/ and fast/images/ to images/ (Closed)
Patch Set: Address failing tests (3 of them) Created 4 years, 1 month 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 TEST(JPEGImageDecoderTest, tooBig) { 135 TEST(JPEGImageDecoderTest, tooBig) {
136 std::unique_ptr<ImageDecoder> decoder = createDecoder(100); 136 std::unique_ptr<ImageDecoder> decoder = createDecoder(100);
137 EXPECT_FALSE(decoder->setSize(10000, 10000)); 137 EXPECT_FALSE(decoder->setSize(10000, 10000));
138 EXPECT_TRUE(decoder->failed()); 138 EXPECT_TRUE(decoder->failed());
139 } 139 }
140 140
141 // Tests that the JPEG decoder can downsample image whose width and height are 141 // Tests that the JPEG decoder can downsample image whose width and height are
142 // multiples of 8, to ensure we compute the correct decodedSize and pass correct 142 // multiples of 8, to ensure we compute the correct decodedSize and pass correct
143 // parameters to libjpeg to output the image with the expected size. 143 // parameters to libjpeg to output the image with the expected size.
144 TEST(JPEGImageDecoderTest, downsampleImageSizeMultipleOf8) { 144 TEST(JPEGImageDecoderTest, downsampleImageSizeMultipleOf8) {
145 const char* jpegFile = 145 const char* jpegFile = "/LayoutTests/images/resources/lenna.jpg"; // 256x256
146 "/LayoutTests/fast/images/resources/lenna.jpg"; // 256x256
147 unsigned outputWidth, outputHeight; 146 unsigned outputWidth, outputHeight;
148 147
149 // 1/8 downsample. 148 // 1/8 downsample.
150 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile); 149 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile);
151 EXPECT_EQ(32u, outputWidth); 150 EXPECT_EQ(32u, outputWidth);
152 EXPECT_EQ(32u, outputHeight); 151 EXPECT_EQ(32u, outputHeight);
153 152
154 // 2/8 downsample. 153 // 2/8 downsample.
155 downsample(70 * 70 * 4, &outputWidth, &outputHeight, jpegFile); 154 downsample(70 * 70 * 4, &outputWidth, &outputHeight, jpegFile);
156 EXPECT_EQ(64u, outputWidth); 155 EXPECT_EQ(64u, outputWidth);
(...skipping 22 matching lines...) Expand all
179 // 7/8 downsample. 178 // 7/8 downsample.
180 downsample(230 * 230 * 4, &outputWidth, &outputHeight, jpegFile); 179 downsample(230 * 230 * 4, &outputWidth, &outputHeight, jpegFile);
181 EXPECT_EQ(224u, outputWidth); 180 EXPECT_EQ(224u, outputWidth);
182 EXPECT_EQ(224u, outputHeight); 181 EXPECT_EQ(224u, outputHeight);
183 } 182 }
184 183
185 // Tests that JPEG decoder can downsample image whose width and height are not 184 // Tests that JPEG decoder can downsample image whose width and height are not
186 // multiple of 8. Ensures that we round using the same algorithm as libjpeg. 185 // multiple of 8. Ensures that we round using the same algorithm as libjpeg.
187 TEST(JPEGImageDecoderTest, downsampleImageSizeNotMultipleOf8) { 186 TEST(JPEGImageDecoderTest, downsampleImageSizeNotMultipleOf8) {
188 const char* jpegFile = 187 const char* jpegFile =
189 "/LayoutTests/fast/images/resources/icc-v2-gbr.jpg"; // 275x207 188 "/LayoutTests/images/resources/icc-v2-gbr.jpg"; // 275x207
190 unsigned outputWidth, outputHeight; 189 unsigned outputWidth, outputHeight;
191 190
192 // 1/8 downsample. 191 // 1/8 downsample.
193 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile); 192 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile);
194 EXPECT_EQ(35u, outputWidth); 193 EXPECT_EQ(35u, outputWidth);
195 EXPECT_EQ(26u, outputHeight); 194 EXPECT_EQ(26u, outputHeight);
196 195
197 // 2/8 downsample. 196 // 2/8 downsample.
198 downsample(70 * 70 * 4, &outputWidth, &outputHeight, jpegFile); 197 downsample(70 * 70 * 4, &outputWidth, &outputHeight, jpegFile);
199 EXPECT_EQ(69u, outputWidth); 198 EXPECT_EQ(69u, outputWidth);
(...skipping 20 matching lines...) Expand all
220 EXPECT_EQ(156u, outputHeight); 219 EXPECT_EQ(156u, outputHeight);
221 220
222 // 7/8 downsample. 221 // 7/8 downsample.
223 downsample(230 * 230 * 4, &outputWidth, &outputHeight, jpegFile); 222 downsample(230 * 230 * 4, &outputWidth, &outputHeight, jpegFile);
224 EXPECT_EQ(241u, outputWidth); 223 EXPECT_EQ(241u, outputWidth);
225 EXPECT_EQ(182u, outputHeight); 224 EXPECT_EQ(182u, outputHeight);
226 } 225 }
227 226
228 // Tests that upsampling is not allowed. 227 // Tests that upsampling is not allowed.
229 TEST(JPEGImageDecoderTest, upsample) { 228 TEST(JPEGImageDecoderTest, upsample) {
230 const char* jpegFile = 229 const char* jpegFile = "/LayoutTests/images/resources/lenna.jpg"; // 256x256
231 "/LayoutTests/fast/images/resources/lenna.jpg"; // 256x256
232 unsigned outputWidth, outputHeight; 230 unsigned outputWidth, outputHeight;
233 downsample(LargeEnoughSize, &outputWidth, &outputHeight, jpegFile); 231 downsample(LargeEnoughSize, &outputWidth, &outputHeight, jpegFile);
234 EXPECT_EQ(256u, outputWidth); 232 EXPECT_EQ(256u, outputWidth);
235 EXPECT_EQ(256u, outputHeight); 233 EXPECT_EQ(256u, outputHeight);
236 } 234 }
237 235
238 TEST(JPEGImageDecoderTest, yuv) { 236 TEST(JPEGImageDecoderTest, yuv) {
239 const char* jpegFile = 237 const char* jpegFile =
240 "/LayoutTests/fast/images/resources/lenna.jpg"; // 256x256, YUV 4:2:0 238 "/LayoutTests/images/resources/lenna.jpg"; // 256x256, YUV 4:2:0
241 unsigned outputYWidth, outputYHeight, outputUVWidth, outputUVHeight; 239 unsigned outputYWidth, outputYHeight, outputUVWidth, outputUVHeight;
242 readYUV(LargeEnoughSize, &outputYWidth, &outputYHeight, &outputUVWidth, 240 readYUV(LargeEnoughSize, &outputYWidth, &outputYHeight, &outputUVWidth,
243 &outputUVHeight, jpegFile); 241 &outputUVHeight, jpegFile);
244 EXPECT_EQ(256u, outputYWidth); 242 EXPECT_EQ(256u, outputYWidth);
245 EXPECT_EQ(256u, outputYHeight); 243 EXPECT_EQ(256u, outputYHeight);
246 EXPECT_EQ(128u, outputUVWidth); 244 EXPECT_EQ(128u, outputUVWidth);
247 EXPECT_EQ(128u, outputUVHeight); 245 EXPECT_EQ(128u, outputUVHeight);
248 246
249 const char* jpegFileImageSizeNotMultipleOf8 = 247 const char* jpegFileImageSizeNotMultipleOf8 =
250 "/LayoutTests/fast/images/resources/cropped_mandrill.jpg"; // 439x154 248 "/LayoutTests/images/resources/cropped_mandrill.jpg"; // 439x154
251 readYUV(LargeEnoughSize, &outputYWidth, &outputYHeight, &outputUVWidth, 249 readYUV(LargeEnoughSize, &outputYWidth, &outputYHeight, &outputUVWidth,
252 &outputUVHeight, jpegFileImageSizeNotMultipleOf8); 250 &outputUVHeight, jpegFileImageSizeNotMultipleOf8);
253 EXPECT_EQ(439u, outputYWidth); 251 EXPECT_EQ(439u, outputYWidth);
254 EXPECT_EQ(154u, outputYHeight); 252 EXPECT_EQ(154u, outputYHeight);
255 EXPECT_EQ(220u, outputUVWidth); 253 EXPECT_EQ(220u, outputUVWidth);
256 EXPECT_EQ(77u, outputUVHeight); 254 EXPECT_EQ(77u, outputUVHeight);
257 255
258 // Make sure we revert to RGBA decoding when we're about to downscale, 256 // Make sure we revert to RGBA decoding when we're about to downscale,
259 // which can occur on memory-constrained android devices. 257 // which can occur on memory-constrained android devices.
260 RefPtr<SharedBuffer> data = readFile(jpegFile); 258 RefPtr<SharedBuffer> data = readFile(jpegFile);
261 ASSERT_TRUE(data); 259 ASSERT_TRUE(data);
262 260
263 std::unique_ptr<ImageDecoder> decoder = createDecoder(230 * 230 * 4); 261 std::unique_ptr<ImageDecoder> decoder = createDecoder(230 * 230 * 4);
264 decoder->setData(data.get(), true); 262 decoder->setData(data.get(), true);
265 263
266 std::unique_ptr<ImagePlanes> imagePlanes = wrapUnique(new ImagePlanes()); 264 std::unique_ptr<ImagePlanes> imagePlanes = wrapUnique(new ImagePlanes());
267 decoder->setImagePlanes(std::move(imagePlanes)); 265 decoder->setImagePlanes(std::move(imagePlanes));
268 ASSERT_TRUE(decoder->isSizeAvailable()); 266 ASSERT_TRUE(decoder->isSizeAvailable());
269 ASSERT_FALSE(decoder->canDecodeToYUV()); 267 ASSERT_FALSE(decoder->canDecodeToYUV());
270 } 268 }
271 269
272 TEST(JPEGImageDecoderTest, 270 TEST(JPEGImageDecoderTest,
273 byteByByteBaselineJPEGWithColorProfileAndRestartMarkers) { 271 byteByByteBaselineJPEGWithColorProfileAndRestartMarkers) {
274 testByteByByteDecode(&createDecoder, 272 testByteByByteDecode(&createDecoder,
275 "/LayoutTests/fast/images/resources/" 273 "/LayoutTests/images/resources/"
276 "small-square-with-colorspin-profile.jpg", 274 "small-square-with-colorspin-profile.jpg",
277 1u, cAnimationNone); 275 1u, cAnimationNone);
278 } 276 }
279 277
280 TEST(JPEGImageDecoderTest, byteByByteProgressiveJPEG) { 278 TEST(JPEGImageDecoderTest, byteByByteProgressiveJPEG) {
281 testByteByByteDecode(&createDecoder, 279 testByteByByteDecode(&createDecoder,
282 "/LayoutTests/fast/images/resources/bug106024.jpg", 1u, 280 "/LayoutTests/images/resources/bug106024.jpg", 1u,
283 cAnimationNone); 281 cAnimationNone);
284 } 282 }
285 283
286 TEST(JPEGImageDecoderTest, byteByByteRGBJPEGWithAdobeMarkers) { 284 TEST(JPEGImageDecoderTest, byteByByteRGBJPEGWithAdobeMarkers) {
287 testByteByByteDecode( 285 testByteByByteDecode(
288 &createDecoder, 286 &createDecoder,
289 "/LayoutTests/fast/images/resources/rgb-jpeg-with-adobe-marker-only.jpg", 287 "/LayoutTests/images/resources/rgb-jpeg-with-adobe-marker-only.jpg", 1u,
290 1u, cAnimationNone); 288 cAnimationNone);
291 } 289 }
292 290
293 // This test verifies that calling SharedBuffer::mergeSegmentsIntoBuffer() does 291 // This test verifies that calling SharedBuffer::mergeSegmentsIntoBuffer() does
294 // not break JPEG decoding at a critical point: in between a call to decode the 292 // not break JPEG decoding at a critical point: in between a call to decode the
295 // size (when JPEGImageDecoder stops while it may still have input data to 293 // size (when JPEGImageDecoder stops while it may still have input data to
296 // read) and a call to do a full decode. 294 // read) and a call to do a full decode.
297 TEST(JPEGImageDecoderTest, mergeBuffer) { 295 TEST(JPEGImageDecoderTest, mergeBuffer) {
298 const char* jpegFile = "/LayoutTests/fast/images/resources/lenna.jpg"; 296 const char* jpegFile = "/LayoutTests/images/resources/lenna.jpg";
299 testMergeBuffer(&createDecoder, jpegFile); 297 testMergeBuffer(&createDecoder, jpegFile);
300 } 298 }
301 299
302 // This tests decoding a JPEG with many progressive scans. Decoding should 300 // This tests decoding a JPEG with many progressive scans. Decoding should
303 // fail, but not hang (crbug.com/642462). 301 // fail, but not hang (crbug.com/642462).
304 TEST(JPEGImageDecoderTest, manyProgressiveScans) { 302 TEST(JPEGImageDecoderTest, manyProgressiveScans) {
305 RefPtr<SharedBuffer> testData = 303 RefPtr<SharedBuffer> testData =
306 readFile(decodersTestingDir, "many-progressive-scans.jpg"); 304 readFile(decodersTestingDir, "many-progressive-scans.jpg");
307 ASSERT_TRUE(testData.get()); 305 ASSERT_TRUE(testData.get());
308 306
309 std::unique_ptr<ImageDecoder> testDecoder = createDecoder(); 307 std::unique_ptr<ImageDecoder> testDecoder = createDecoder();
310 testDecoder->setData(testData.get(), true); 308 testDecoder->setData(testData.get(), true);
311 EXPECT_EQ(1u, testDecoder->frameCount()); 309 EXPECT_EQ(1u, testDecoder->frameCount());
312 ASSERT_TRUE(testDecoder->frameBufferAtIndex(0)); 310 ASSERT_TRUE(testDecoder->frameBufferAtIndex(0));
313 EXPECT_TRUE(testDecoder->failed()); 311 EXPECT_TRUE(testDecoder->failed());
314 } 312 }
315 313
316 } // namespace blink 314 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698