| 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 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); | 175 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
| 176 | 176 |
| 177 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-animated.webp"); | 177 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-animated.webp"); |
| 178 ASSERT_TRUE(data.get()); | 178 ASSERT_TRUE(data.get()); |
| 179 decoder->setData(data.get(), true); | 179 decoder->setData(data.get(), true); |
| 180 | 180 |
| 181 const int canvasWidth = 11; | 181 const int canvasWidth = 11; |
| 182 const int canvasHeight = 29; | 182 const int canvasHeight = 29; |
| 183 const struct AnimParam { | 183 const struct AnimParam { |
| 184 int xOffset, yOffset, width, height; | 184 int xOffset, yOffset, width, height; |
| 185 ImageFrame::FrameDisposalMethod dispose; | 185 ImageFrame::DisposalMethod disposalMethod; |
| 186 ImageFrame::AlphaBlendSource alphaBlendSource; |
| 186 unsigned duration; | 187 unsigned duration; |
| 187 bool hasAlpha; | 188 bool hasAlpha; |
| 188 } frameParameters[] = { | 189 } frameParameters[] = { |
| 189 { 0, 0, 11, 29, ImageFrame::DisposeKeep, 1000u, true }, | 190 { 0, 0, 11, 29, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFr
ame, 1000u, true }, |
| 190 { 2, 10, 7, 17, ImageFrame::DisposeKeep, 500u, true }, | 191 { 2, 10, 7, 17, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFr
ame, 500u, true }, |
| 191 { 2, 2, 7, 16, ImageFrame::DisposeKeep, 1000u, true }, | 192 { 2, 2, 7, 16, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFra
me, 1000u, true }, |
| 192 }; | 193 }; |
| 193 | 194 |
| 194 for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) { | 195 for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) { |
| 195 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); | 196 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 196 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 197 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
| 197 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); | 198 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
| 198 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); | 199 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
| 199 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); | 200 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); |
| 200 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); | 201 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); |
| 201 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); | 202 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); |
| 202 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); | 203 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); |
| 203 EXPECT_EQ(frameParameters[i].dispose, frame->disposalMethod()); | 204 EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod()); |
| 205 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource()
); |
| 204 EXPECT_EQ(frameParameters[i].duration, frame->duration()); | 206 EXPECT_EQ(frameParameters[i].duration, frame->duration()); |
| 205 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); | 207 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); |
| 206 } | 208 } |
| 207 | 209 |
| 208 EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount()); | 210 EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount()); |
| 209 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); | 211 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
| 210 } | 212 } |
| 211 | 213 |
| 212 TEST_F(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgr
ound) | 214 TEST_F(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgr
ound) |
| 213 { | 215 { |
| 214 OwnPtr<WEBPImageDecoder> decoder = createDecoder(); | 216 OwnPtr<WEBPImageDecoder> decoder = createDecoder(); |
| 215 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); | 217 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
| 216 | 218 |
| 217 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-animated-opaque.webp"); | 219 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-animated-opaque.webp"); |
| 218 ASSERT_TRUE(data.get()); | 220 ASSERT_TRUE(data.get()); |
| 219 decoder->setData(data.get(), true); | 221 decoder->setData(data.get(), true); |
| 220 | 222 |
| 221 const int canvasWidth = 94; | 223 const int canvasWidth = 94; |
| 222 const int canvasHeight = 87; | 224 const int canvasHeight = 87; |
| 223 const struct AnimParam { | 225 const struct AnimParam { |
| 224 int xOffset, yOffset, width, height; | 226 int xOffset, yOffset, width, height; |
| 225 ImageFrame::FrameDisposalMethod dispose; | 227 ImageFrame::DisposalMethod disposalMethod; |
| 228 ImageFrame::AlphaBlendSource alphaBlendSource; |
| 226 unsigned duration; | 229 unsigned duration; |
| 227 bool hasAlpha; | 230 bool hasAlpha; |
| 228 } frameParameters[] = { | 231 } frameParameters[] = { |
| 229 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true }, | 232 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendA
topPreviousFrame, 1000u, true }, |
| 230 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true }, | 233 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, |
| 231 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, 1000u, true }, | 234 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, |
| 232 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, 1000u, true }, | 235 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, |
| 233 }; | 236 }; |
| 234 | 237 |
| 235 for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) { | 238 for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) { |
| 236 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); | 239 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 237 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 240 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
| 238 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); | 241 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
| 239 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); | 242 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
| 240 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); | 243 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); |
| 241 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); | 244 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); |
| 242 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); | 245 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); |
| 243 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); | 246 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); |
| 244 EXPECT_EQ(frameParameters[i].dispose, frame->disposalMethod()); | 247 EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod()); |
| 248 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource()
); |
| 245 EXPECT_EQ(frameParameters[i].duration, frame->duration()); | 249 EXPECT_EQ(frameParameters[i].duration, frame->duration()); |
| 246 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); | 250 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); |
| 247 } | 251 } |
| 252 |
| 253 EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount()); |
| 254 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
| 255 } |
| 256 |
| 257 TEST_F(AnimatedWebPTests, verifyAnimationParametersBlendOverwrite) |
| 258 { |
| 259 OwnPtr<WEBPImageDecoder> decoder = createDecoder(); |
| 260 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
| 261 |
| 262 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-animated-no-blend.webp"); |
| 263 ASSERT_TRUE(data.get()); |
| 264 decoder->setData(data.get(), true); |
| 265 |
| 266 const int canvasWidth = 94; |
| 267 const int canvasHeight = 87; |
| 268 const struct AnimParam { |
| 269 int xOffset, yOffset, width, height; |
| 270 ImageFrame::DisposalMethod disposalMethod; |
| 271 ImageFrame::AlphaBlendSource alphaBlendSource; |
| 272 unsigned duration; |
| 273 bool hasAlpha; |
| 274 } frameParameters[] = { |
| 275 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendA
topBgcolor, 1000u, true }, |
| 276 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, |
| 277 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, |
| 278 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, |
| 279 }; |
| 280 |
| 281 for (size_t i = 0; i < ARRAY_SIZE(frameParameters); ++i) { |
| 282 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 283 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); |
| 284 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
| 285 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
| 286 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); |
| 287 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); |
| 288 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); |
| 289 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); |
| 290 EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod()); |
| 291 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource()
); |
| 292 EXPECT_EQ(frameParameters[i].duration, frame->duration()); |
| 293 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); |
| 294 } |
| 248 | 295 |
| 249 EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount()); | 296 EXPECT_EQ(ARRAY_SIZE(frameParameters), decoder->frameCount()); |
| 250 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); | 297 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
| 251 } | 298 } |
| 252 | 299 |
| 253 TEST_F(AnimatedWebPTests, parseAndDecodeByteByByte) | 300 TEST_F(AnimatedWebPTests, parseAndDecodeByteByByte) |
| 254 { | 301 { |
| 255 const struct TestImage { | 302 const struct TestImage { |
| 256 const char* filename; | 303 const char* filename; |
| 257 unsigned frameCount; | 304 unsigned frameCount; |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 ImageFrame* firstFrame = decoder->frameBufferAtIndex(0); | 497 ImageFrame* firstFrame = decoder->frameBufferAtIndex(0); |
| 451 EXPECT_EQ(ImageFrame::FrameComplete, firstFrame->status()); | 498 EXPECT_EQ(ImageFrame::FrameComplete, firstFrame->status()); |
| 452 EXPECT_EQ(baselineHashes[0], hashSkBitmap(firstFrame->getSkBitmap())); | 499 EXPECT_EQ(baselineHashes[0], hashSkBitmap(firstFrame->getSkBitmap())); |
| 453 } | 500 } |
| 454 | 501 |
| 455 TEST_F(AnimatedWebPTests, decodeAfterReallocatingData) | 502 TEST_F(AnimatedWebPTests, decodeAfterReallocatingData) |
| 456 { | 503 { |
| 457 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated.webp"); | 504 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated.webp"); |
| 458 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated-icc-xmp.webp"); | 505 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated-icc-xmp.webp"); |
| 459 } | 506 } |
| OLD | NEW |