| OLD | NEW |
| 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 unsigned* outputYHeight, | 80 unsigned* outputYHeight, |
| 81 unsigned* outputUVWidth, | 81 unsigned* outputUVWidth, |
| 82 unsigned* outputUVHeight, | 82 unsigned* outputUVHeight, |
| 83 const char* imageFilePath) { | 83 const char* imageFilePath) { |
| 84 RefPtr<SharedBuffer> data = readFile(imageFilePath); | 84 RefPtr<SharedBuffer> data = readFile(imageFilePath); |
| 85 ASSERT_TRUE(data); | 85 ASSERT_TRUE(data); |
| 86 | 86 |
| 87 std::unique_ptr<ImageDecoder> decoder = createDecoder(maxDecodedBytes); | 87 std::unique_ptr<ImageDecoder> decoder = createDecoder(maxDecodedBytes); |
| 88 decoder->setData(data.get(), true); | 88 decoder->setData(data.get(), true); |
| 89 | 89 |
| 90 // Setting a dummy ImagePlanes object signals to the decoder that we want to d
o YUV decoding. | 90 // Setting a dummy ImagePlanes object signals to the decoder that we want to |
| 91 // do YUV decoding. |
| 91 std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes()); | 92 std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes()); |
| 92 decoder->setImagePlanes(std::move(dummyImagePlanes)); | 93 decoder->setImagePlanes(std::move(dummyImagePlanes)); |
| 93 | 94 |
| 94 bool sizeIsAvailable = decoder->isSizeAvailable(); | 95 bool sizeIsAvailable = decoder->isSizeAvailable(); |
| 95 ASSERT_TRUE(sizeIsAvailable); | 96 ASSERT_TRUE(sizeIsAvailable); |
| 96 | 97 |
| 97 IntSize size = decoder->decodedSize(); | 98 IntSize size = decoder->decodedSize(); |
| 98 IntSize ySize = decoder->decodedYUVSize(0); | 99 IntSize ySize = decoder->decodedYUVSize(0); |
| 99 IntSize uSize = decoder->decodedYUVSize(1); | 100 IntSize uSize = decoder->decodedYUVSize(1); |
| 100 IntSize vSize = decoder->decodedYUVSize(2); | 101 IntSize vSize = decoder->decodedYUVSize(2); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 130 ASSERT_TRUE(decoder->decodeToYUV()); | 131 ASSERT_TRUE(decoder->decodeToYUV()); |
| 131 } | 132 } |
| 132 | 133 |
| 133 // Tests failure on a too big image. | 134 // Tests failure on a too big image. |
| 134 TEST(JPEGImageDecoderTest, tooBig) { | 135 TEST(JPEGImageDecoderTest, tooBig) { |
| 135 std::unique_ptr<ImageDecoder> decoder = createDecoder(100); | 136 std::unique_ptr<ImageDecoder> decoder = createDecoder(100); |
| 136 EXPECT_FALSE(decoder->setSize(10000, 10000)); | 137 EXPECT_FALSE(decoder->setSize(10000, 10000)); |
| 137 EXPECT_TRUE(decoder->failed()); | 138 EXPECT_TRUE(decoder->failed()); |
| 138 } | 139 } |
| 139 | 140 |
| 140 // Tests that JPEG decoder can downsample image whose width and height are multi
ple of 8, | 141 // Tests that the JPEG decoder can downsample image whose width and height are |
| 141 // to ensure we compute the correct decodedSize and pass correct parameters to l
ibjpeg to | 142 // multiples of 8, to ensure we compute the correct decodedSize and pass correct |
| 142 // output image with the expected size. | 143 // parameters to libjpeg to output the image with the expected size. |
| 143 TEST(JPEGImageDecoderTest, downsampleImageSizeMultipleOf8) { | 144 TEST(JPEGImageDecoderTest, downsampleImageSizeMultipleOf8) { |
| 144 const char* jpegFile = | 145 const char* jpegFile = |
| 145 "/LayoutTests/fast/images/resources/lenna.jpg"; // 256x256 | 146 "/LayoutTests/fast/images/resources/lenna.jpg"; // 256x256 |
| 146 unsigned outputWidth, outputHeight; | 147 unsigned outputWidth, outputHeight; |
| 147 | 148 |
| 148 // 1/8 downsample. | 149 // 1/8 downsample. |
| 149 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile); | 150 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile); |
| 150 EXPECT_EQ(32u, outputWidth); | 151 EXPECT_EQ(32u, outputWidth); |
| 151 EXPECT_EQ(32u, outputHeight); | 152 EXPECT_EQ(32u, outputHeight); |
| 152 | 153 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 174 downsample(200 * 200 * 4, &outputWidth, &outputHeight, jpegFile); | 175 downsample(200 * 200 * 4, &outputWidth, &outputHeight, jpegFile); |
| 175 EXPECT_EQ(192u, outputWidth); | 176 EXPECT_EQ(192u, outputWidth); |
| 176 EXPECT_EQ(192u, outputHeight); | 177 EXPECT_EQ(192u, outputHeight); |
| 177 | 178 |
| 178 // 7/8 downsample. | 179 // 7/8 downsample. |
| 179 downsample(230 * 230 * 4, &outputWidth, &outputHeight, jpegFile); | 180 downsample(230 * 230 * 4, &outputWidth, &outputHeight, jpegFile); |
| 180 EXPECT_EQ(224u, outputWidth); | 181 EXPECT_EQ(224u, outputWidth); |
| 181 EXPECT_EQ(224u, outputHeight); | 182 EXPECT_EQ(224u, outputHeight); |
| 182 } | 183 } |
| 183 | 184 |
| 184 // Tests that JPEG decoder can downsample image whose width and height are not m
ultiple of 8. | 185 // Tests that JPEG decoder can downsample image whose width and height are not |
| 185 // Ensures that we round decodedSize and scale_num using the same algorithm as t
hat of libjpeg. | 186 // multiple of 8. Ensures that we round using the same algorithm as libjpeg. |
| 186 TEST(JPEGImageDecoderTest, downsampleImageSizeNotMultipleOf8) { | 187 TEST(JPEGImageDecoderTest, downsampleImageSizeNotMultipleOf8) { |
| 187 const char* jpegFile = | 188 const char* jpegFile = |
| 188 "/LayoutTests/fast/images/resources/icc-v2-gbr.jpg"; // 275x207 | 189 "/LayoutTests/fast/images/resources/icc-v2-gbr.jpg"; // 275x207 |
| 189 unsigned outputWidth, outputHeight; | 190 unsigned outputWidth, outputHeight; |
| 190 | 191 |
| 191 // 1/8 downsample. | 192 // 1/8 downsample. |
| 192 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile); | 193 downsample(40 * 40 * 4, &outputWidth, &outputHeight, jpegFile); |
| 193 EXPECT_EQ(35u, outputWidth); | 194 EXPECT_EQ(35u, outputWidth); |
| 194 EXPECT_EQ(26u, outputHeight); | 195 EXPECT_EQ(26u, outputHeight); |
| 195 | 196 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 // This test verifies that calling SharedBuffer::mergeSegmentsIntoBuffer() does | 293 // This test verifies that calling SharedBuffer::mergeSegmentsIntoBuffer() does |
| 293 // not break JPEG decoding at a critical point: in between a call to decode the | 294 // not break JPEG decoding at a critical point: in between a call to decode the |
| 294 // size (when JPEGImageDecoder stops while it may still have input data to | 295 // size (when JPEGImageDecoder stops while it may still have input data to |
| 295 // read) and a call to do a full decode. | 296 // read) and a call to do a full decode. |
| 296 TEST(JPEGImageDecoderTest, mergeBuffer) { | 297 TEST(JPEGImageDecoderTest, mergeBuffer) { |
| 297 const char* jpegFile = "/LayoutTests/fast/images/resources/lenna.jpg"; | 298 const char* jpegFile = "/LayoutTests/fast/images/resources/lenna.jpg"; |
| 298 testMergeBuffer(&createDecoder, jpegFile); | 299 testMergeBuffer(&createDecoder, jpegFile); |
| 299 } | 300 } |
| 300 | 301 |
| 301 } // namespace blink | 302 } // namespace blink |
| OLD | NEW |