| 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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 size_t frameCount = decoder->frameCount(); | 123 size_t frameCount = decoder->frameCount(); |
| 124 | 124 |
| 125 // ... and then decode frames from 'reallocatedData'. | 125 // ... and then decode frames from 'reallocatedData'. |
| 126 RefPtr<SharedBuffer> reallocatedData = data.get()->copy(); | 126 RefPtr<SharedBuffer> reallocatedData = data.get()->copy(); |
| 127 ASSERT_TRUE(reallocatedData.get()); | 127 ASSERT_TRUE(reallocatedData.get()); |
| 128 data.clear(); | 128 data.clear(); |
| 129 decoder->setData(reallocatedData.get(), true); | 129 decoder->setData(reallocatedData.get(), true); |
| 130 | 130 |
| 131 for (size_t i = 0; i < frameCount; ++i) { | 131 for (size_t i = 0; i < frameCount; ++i) { |
| 132 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); | 132 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 133 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 133 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 134 } | 134 } |
| 135 } | 135 } |
| 136 | 136 |
| 137 void testByteByByteSizeAvailable(const char* webpFile, size_t frameOffset, bool
hasColorProfile, int expectedRepetitionCount) | 137 void testByteByByteSizeAvailable(const char* webpFile, size_t frameOffset, bool
hasColorProfile, int expectedRepetitionCount) |
| 138 { | 138 { |
| 139 OwnPtr<ImageDecoder> decoder = createDecoder(); | 139 OwnPtr<ImageDecoder> decoder = createDecoder(); |
| 140 RefPtr<SharedBuffer> data = readFile(webpFile); | 140 RefPtr<SharedBuffer> data = readFile(webpFile); |
| 141 ASSERT_TRUE(data.get()); | 141 ASSERT_TRUE(data.get()); |
| 142 EXPECT_LT(frameOffset, data->size()); | 142 EXPECT_LT(frameOffset, data->size()); |
| 143 | 143 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 ASSERT_TRUE(data.get()); | 187 ASSERT_TRUE(data.get()); |
| 188 decoder->setData(data.get(), true); | 188 decoder->setData(data.get(), true); |
| 189 | 189 |
| 190 if (parseErrorExpected) { | 190 if (parseErrorExpected) { |
| 191 EXPECT_EQ(0u, decoder->frameCount()); | 191 EXPECT_EQ(0u, decoder->frameCount()); |
| 192 EXPECT_FALSE(decoder->frameBufferAtIndex(0)); | 192 EXPECT_FALSE(decoder->frameBufferAtIndex(0)); |
| 193 } else { | 193 } else { |
| 194 EXPECT_GT(decoder->frameCount(), 0u); | 194 EXPECT_GT(decoder->frameCount(), 0u); |
| 195 ImageFrame* frame = decoder->frameBufferAtIndex(0); | 195 ImageFrame* frame = decoder->frameBufferAtIndex(0); |
| 196 ASSERT_TRUE(frame); | 196 ASSERT_TRUE(frame); |
| 197 EXPECT_EQ(ImageFrame::FramePartial, frame->status()); | 197 EXPECT_EQ(ImageFrame::FramePartial, frame->getStatus()); |
| 198 } | 198 } |
| 199 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); | 199 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
| 200 EXPECT_TRUE(decoder->failed()); | 200 EXPECT_TRUE(decoder->failed()); |
| 201 } | 201 } |
| 202 | 202 |
| 203 uint32_t premultiplyColor(uint32_t c) | 203 uint32_t premultiplyColor(uint32_t c) |
| 204 { | 204 { |
| 205 return SkPremultiplyARGBInline(SkGetPackedA32(c), SkGetPackedR32(c), SkGetPa
ckedG32(c), SkGetPackedB32(c)); | 205 return SkPremultiplyARGBInline(SkGetPackedA32(c), SkGetPackedR32(c), SkGetPa
ckedG32(c), SkGetPackedB32(c)); |
| 206 } | 206 } |
| 207 | 207 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 unsigned duration; | 291 unsigned duration; |
| 292 bool hasAlpha; | 292 bool hasAlpha; |
| 293 } frameParameters[] = { | 293 } frameParameters[] = { |
| 294 { 0, 0, 11, 29, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFr
ame, 1000u, true }, | 294 { 0, 0, 11, 29, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFr
ame, 1000u, true }, |
| 295 { 2, 10, 7, 17, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFr
ame, 500u, true }, | 295 { 2, 10, 7, 17, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFr
ame, 500u, true }, |
| 296 { 2, 2, 7, 16, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFra
me, 1000u, true }, | 296 { 2, 2, 7, 16, ImageFrame::DisposeKeep, ImageFrame::BlendAtopPreviousFra
me, 1000u, true }, |
| 297 }; | 297 }; |
| 298 | 298 |
| 299 for (size_t i = 0; i < WTF_ARRAY_LENGTH(frameParameters); ++i) { | 299 for (size_t i = 0; i < WTF_ARRAY_LENGTH(frameParameters); ++i) { |
| 300 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); | 300 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 301 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 301 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 302 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); | 302 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
| 303 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); | 303 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
| 304 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); | 304 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); |
| 305 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); | 305 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); |
| 306 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); | 306 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); |
| 307 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); | 307 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); |
| 308 EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod()); | 308 EXPECT_EQ(frameParameters[i].disposalMethod, frame->getDisposalMethod())
; |
| 309 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource()
); | 309 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->getAlphaBlendSourc
e()); |
| 310 EXPECT_EQ(frameParameters[i].duration, frame->duration()); | 310 EXPECT_EQ(frameParameters[i].duration, frame->duration()); |
| 311 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); | 311 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); |
| 312 } | 312 } |
| 313 | 313 |
| 314 EXPECT_EQ(WTF_ARRAY_LENGTH(frameParameters), decoder->frameCount()); | 314 EXPECT_EQ(WTF_ARRAY_LENGTH(frameParameters), decoder->frameCount()); |
| 315 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); | 315 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
| 316 } | 316 } |
| 317 | 317 |
| 318 TEST(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgrou
nd) | 318 TEST(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackgrou
nd) |
| 319 { | 319 { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 334 bool hasAlpha; | 334 bool hasAlpha; |
| 335 } frameParameters[] = { | 335 } frameParameters[] = { |
| 336 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendA
topPreviousFrame, 1000u, true }, | 336 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendA
topPreviousFrame, 1000u, true }, |
| 337 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, | 337 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, |
| 338 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, | 338 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, |
| 339 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, | 339 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopPreviousFrame, 1000u, true }, |
| 340 }; | 340 }; |
| 341 | 341 |
| 342 for (size_t i = 0; i < WTF_ARRAY_LENGTH(frameParameters); ++i) { | 342 for (size_t i = 0; i < WTF_ARRAY_LENGTH(frameParameters); ++i) { |
| 343 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); | 343 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 344 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 344 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 345 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); | 345 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
| 346 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); | 346 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
| 347 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); | 347 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); |
| 348 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); | 348 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); |
| 349 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); | 349 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); |
| 350 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); | 350 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); |
| 351 EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod()); | 351 EXPECT_EQ(frameParameters[i].disposalMethod, frame->getDisposalMethod())
; |
| 352 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource()
); | 352 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->getAlphaBlendSourc
e()); |
| 353 EXPECT_EQ(frameParameters[i].duration, frame->duration()); | 353 EXPECT_EQ(frameParameters[i].duration, frame->duration()); |
| 354 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); | 354 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); |
| 355 } | 355 } |
| 356 | 356 |
| 357 EXPECT_EQ(WTF_ARRAY_LENGTH(frameParameters), decoder->frameCount()); | 357 EXPECT_EQ(WTF_ARRAY_LENGTH(frameParameters), decoder->frameCount()); |
| 358 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); | 358 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
| 359 } | 359 } |
| 360 | 360 |
| 361 TEST(AnimatedWebPTests, verifyAnimationParametersBlendOverwrite) | 361 TEST(AnimatedWebPTests, verifyAnimationParametersBlendOverwrite) |
| 362 { | 362 { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 377 bool hasAlpha; | 377 bool hasAlpha; |
| 378 } frameParameters[] = { | 378 } frameParameters[] = { |
| 379 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendA
topBgcolor, 1000u, true }, | 379 { 4, 10, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::BlendA
topBgcolor, 1000u, true }, |
| 380 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, | 380 { 34, 30, 33, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, |
| 381 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, | 381 { 62, 50, 32, 32, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, |
| 382 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, | 382 { 10, 54, 32, 33, ImageFrame::DisposeOverwriteBgcolor, ImageFrame::Blend
AtopBgcolor, 1000u, true }, |
| 383 }; | 383 }; |
| 384 | 384 |
| 385 for (size_t i = 0; i < WTF_ARRAY_LENGTH(frameParameters); ++i) { | 385 for (size_t i = 0; i < WTF_ARRAY_LENGTH(frameParameters); ++i) { |
| 386 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); | 386 const ImageFrame* const frame = decoder->frameBufferAtIndex(i); |
| 387 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 387 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 388 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); | 388 EXPECT_EQ(canvasWidth, frame->getSkBitmap().width()); |
| 389 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); | 389 EXPECT_EQ(canvasHeight, frame->getSkBitmap().height()); |
| 390 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); | 390 EXPECT_EQ(frameParameters[i].xOffset, frame->originalFrameRect().x()); |
| 391 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); | 391 EXPECT_EQ(frameParameters[i].yOffset, frame->originalFrameRect().y()); |
| 392 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); | 392 EXPECT_EQ(frameParameters[i].width, frame->originalFrameRect().width()); |
| 393 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); | 393 EXPECT_EQ(frameParameters[i].height, frame->originalFrameRect().height()
); |
| 394 EXPECT_EQ(frameParameters[i].disposalMethod, frame->disposalMethod()); | 394 EXPECT_EQ(frameParameters[i].disposalMethod, frame->getDisposalMethod())
; |
| 395 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->alphaBlendSource()
); | 395 EXPECT_EQ(frameParameters[i].alphaBlendSource, frame->getAlphaBlendSourc
e()); |
| 396 EXPECT_EQ(frameParameters[i].duration, frame->duration()); | 396 EXPECT_EQ(frameParameters[i].duration, frame->duration()); |
| 397 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); | 397 EXPECT_EQ(frameParameters[i].hasAlpha, frame->hasAlpha()); |
| 398 } | 398 } |
| 399 | 399 |
| 400 EXPECT_EQ(WTF_ARRAY_LENGTH(frameParameters), decoder->frameCount()); | 400 EXPECT_EQ(WTF_ARRAY_LENGTH(frameParameters), decoder->frameCount()); |
| 401 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); | 401 EXPECT_EQ(cAnimationLoopInfinite, decoder->repetitionCount()); |
| 402 } | 402 } |
| 403 | 403 |
| 404 TEST(AnimatedWebPTests, parseAndDecodeByteByByte) | 404 TEST(AnimatedWebPTests, parseAndDecodeByteByByte) |
| 405 { | 405 { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 420 OwnPtr<ImageDecoder> decoder = createDecoder(); | 420 OwnPtr<ImageDecoder> decoder = createDecoder(); |
| 421 | 421 |
| 422 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/inv
alid-animated-webp2.webp"); | 422 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/inv
alid-animated-webp2.webp"); |
| 423 ASSERT_TRUE(data.get()); | 423 ASSERT_TRUE(data.get()); |
| 424 decoder->setData(data.get(), true); | 424 decoder->setData(data.get(), true); |
| 425 | 425 |
| 426 size_t frameCount = 8; | 426 size_t frameCount = 8; |
| 427 EXPECT_EQ(frameCount, decoder->frameCount()); | 427 EXPECT_EQ(frameCount, decoder->frameCount()); |
| 428 ImageFrame* frame = decoder->frameBufferAtIndex(0); | 428 ImageFrame* frame = decoder->frameBufferAtIndex(0); |
| 429 ASSERT_TRUE(frame); | 429 ASSERT_TRUE(frame); |
| 430 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 430 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 431 EXPECT_FALSE(decoder->failed()); | 431 EXPECT_FALSE(decoder->failed()); |
| 432 frame = decoder->frameBufferAtIndex(frameCount - 1); | 432 frame = decoder->frameBufferAtIndex(frameCount - 1); |
| 433 ASSERT_TRUE(frame); | 433 ASSERT_TRUE(frame); |
| 434 EXPECT_EQ(ImageFrame::FramePartial, frame->status()); | 434 EXPECT_EQ(ImageFrame::FramePartial, frame->getStatus()); |
| 435 EXPECT_TRUE(decoder->failed()); | 435 EXPECT_TRUE(decoder->failed()); |
| 436 frame = decoder->frameBufferAtIndex(0); | 436 frame = decoder->frameBufferAtIndex(0); |
| 437 ASSERT_TRUE(frame); | 437 ASSERT_TRUE(frame); |
| 438 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 438 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 439 } | 439 } |
| 440 | 440 |
| 441 TEST(AnimatedWebPTests, truncatedInBetweenFrame) | 441 TEST(AnimatedWebPTests, truncatedInBetweenFrame) |
| 442 { | 442 { |
| 443 OwnPtr<ImageDecoder> decoder = createDecoder(); | 443 OwnPtr<ImageDecoder> decoder = createDecoder(); |
| 444 | 444 |
| 445 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/invalid-animated-webp4.webp"); | 445 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/invalid-animated-webp4.webp"); |
| 446 ASSERT_TRUE(fullData.get()); | 446 ASSERT_TRUE(fullData.get()); |
| 447 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), fullData-
>size() - 1); | 447 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), fullData-
>size() - 1); |
| 448 decoder->setData(data.get(), false); | 448 decoder->setData(data.get(), false); |
| 449 | 449 |
| 450 ImageFrame* frame = decoder->frameBufferAtIndex(1); | 450 ImageFrame* frame = decoder->frameBufferAtIndex(1); |
| 451 ASSERT_TRUE(frame); | 451 ASSERT_TRUE(frame); |
| 452 EXPECT_EQ(ImageFrame::FrameComplete, frame->status()); | 452 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 453 frame = decoder->frameBufferAtIndex(2); | 453 frame = decoder->frameBufferAtIndex(2); |
| 454 ASSERT_TRUE(frame); | 454 ASSERT_TRUE(frame); |
| 455 EXPECT_EQ(ImageFrame::FramePartial, frame->status()); | 455 EXPECT_EQ(ImageFrame::FramePartial, frame->getStatus()); |
| 456 EXPECT_TRUE(decoder->failed()); | 456 EXPECT_TRUE(decoder->failed()); |
| 457 } | 457 } |
| 458 | 458 |
| 459 // Reproduce a crash that used to happen for a specific file with specific seque
nce of method calls. | 459 // Reproduce a crash that used to happen for a specific file with specific seque
nce of method calls. |
| 460 TEST(AnimatedWebPTests, reproCrash) | 460 TEST(AnimatedWebPTests, reproCrash) |
| 461 { | 461 { |
| 462 OwnPtr<ImageDecoder> decoder = createDecoder(); | 462 OwnPtr<ImageDecoder> decoder = createDecoder(); |
| 463 | 463 |
| 464 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/invalid_vp8_vp8x.webp"); | 464 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/invalid_vp8_vp8x.webp"); |
| 465 ASSERT_TRUE(fullData.get()); | 465 ASSERT_TRUE(fullData.get()); |
| 466 | 466 |
| 467 // Parse partial data up to which error in bitstream is not detected. | 467 // Parse partial data up to which error in bitstream is not detected. |
| 468 const size_t partialSize = 32768; | 468 const size_t partialSize = 32768; |
| 469 ASSERT_GT(fullData->size(), partialSize); | 469 ASSERT_GT(fullData->size(), partialSize); |
| 470 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), partialSi
ze); | 470 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), partialSi
ze); |
| 471 decoder->setData(data.get(), false); | 471 decoder->setData(data.get(), false); |
| 472 EXPECT_EQ(1u, decoder->frameCount()); | 472 EXPECT_EQ(1u, decoder->frameCount()); |
| 473 ImageFrame* frame = decoder->frameBufferAtIndex(0); | 473 ImageFrame* frame = decoder->frameBufferAtIndex(0); |
| 474 ASSERT_TRUE(frame); | 474 ASSERT_TRUE(frame); |
| 475 EXPECT_EQ(ImageFrame::FramePartial, frame->status()); | 475 EXPECT_EQ(ImageFrame::FramePartial, frame->getStatus()); |
| 476 EXPECT_FALSE(decoder->failed()); | 476 EXPECT_FALSE(decoder->failed()); |
| 477 | 477 |
| 478 // Parse full data now. The error in bitstream should now be detected. | 478 // Parse full data now. The error in bitstream should now be detected. |
| 479 decoder->setData(fullData.get(), true); | 479 decoder->setData(fullData.get(), true); |
| 480 EXPECT_EQ(1u, decoder->frameCount()); | 480 EXPECT_EQ(1u, decoder->frameCount()); |
| 481 frame = decoder->frameBufferAtIndex(0); | 481 frame = decoder->frameBufferAtIndex(0); |
| 482 ASSERT_TRUE(frame); | 482 ASSERT_TRUE(frame); |
| 483 EXPECT_EQ(ImageFrame::FramePartial, frame->status()); | 483 EXPECT_EQ(ImageFrame::FramePartial, frame->getStatus()); |
| 484 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); | 484 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); |
| 485 EXPECT_TRUE(decoder->failed()); | 485 EXPECT_TRUE(decoder->failed()); |
| 486 } | 486 } |
| 487 | 487 |
| 488 TEST(AnimatedWebPTests, progressiveDecode) | 488 TEST(AnimatedWebPTests, progressiveDecode) |
| 489 { | 489 { |
| 490 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/webp-animated.webp"); | 490 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/webp-animated.webp"); |
| 491 ASSERT_TRUE(fullData.get()); | 491 ASSERT_TRUE(fullData.get()); |
| 492 const size_t fullLength = fullData->size(); | 492 const size_t fullLength = fullData->size(); |
| 493 | 493 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/webp-animated.webp"); | 569 RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources
/webp-animated.webp"); |
| 570 ASSERT_TRUE(fullData.get()); | 570 ASSERT_TRUE(fullData.get()); |
| 571 | 571 |
| 572 // Give it data that is enough to parse but not decode in order to check the
status | 572 // Give it data that is enough to parse but not decode in order to check the
status |
| 573 // of requiredPreviousFrameIndex before decoding. | 573 // of requiredPreviousFrameIndex before decoding. |
| 574 size_t partialSize = 1; | 574 size_t partialSize = 1; |
| 575 do { | 575 do { |
| 576 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), parti
alSize); | 576 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), parti
alSize); |
| 577 decoder->setData(data.get(), false); | 577 decoder->setData(data.get(), false); |
| 578 ++partialSize; | 578 ++partialSize; |
| 579 } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->status()
== ImageFrame::FrameEmpty); | 579 } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->getStatus
() == ImageFrame::FrameEmpty); |
| 580 | 580 |
| 581 EXPECT_EQ(kNotFound, decoder->frameBufferAtIndex(0)->requiredPreviousFrameIn
dex()); | 581 EXPECT_EQ(kNotFound, decoder->frameBufferAtIndex(0)->requiredPreviousFrameIn
dex()); |
| 582 size_t frameCount = decoder->frameCount(); | 582 size_t frameCount = decoder->frameCount(); |
| 583 for (size_t i = 1; i < frameCount; ++i) | 583 for (size_t i = 1; i < frameCount; ++i) |
| 584 EXPECT_EQ(i - 1, decoder->frameBufferAtIndex(i)->requiredPreviousFrameIn
dex()); | 584 EXPECT_EQ(i - 1, decoder->frameBufferAtIndex(i)->requiredPreviousFrameIn
dex()); |
| 585 | 585 |
| 586 decoder->setData(fullData.get(), true); | 586 decoder->setData(fullData.get(), true); |
| 587 for (size_t i = 0; i < frameCount; ++i) | 587 for (size_t i = 0; i < frameCount; ++i) |
| 588 EXPECT_EQ(kNotFound, decoder->frameBufferAtIndex(i)->requiredPreviousFra
meIndex()); | 588 EXPECT_EQ(kNotFound, decoder->frameBufferAtIndex(i)->requiredPreviousFra
meIndex()); |
| 589 } | 589 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 613 size_t frameCount = baselineHashes.size(); | 613 size_t frameCount = baselineHashes.size(); |
| 614 | 614 |
| 615 OwnPtr<ImageDecoder> decoder = createDecoder(); | 615 OwnPtr<ImageDecoder> decoder = createDecoder(); |
| 616 | 616 |
| 617 // Let frame 0 be partially decoded. | 617 // Let frame 0 be partially decoded. |
| 618 size_t partialSize = 1; | 618 size_t partialSize = 1; |
| 619 do { | 619 do { |
| 620 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), parti
alSize); | 620 RefPtr<SharedBuffer> data = SharedBuffer::create(fullData->data(), parti
alSize); |
| 621 decoder->setData(data.get(), false); | 621 decoder->setData(data.get(), false); |
| 622 ++partialSize; | 622 ++partialSize; |
| 623 } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->status()
== ImageFrame::FrameEmpty); | 623 } while (!decoder->frameCount() || decoder->frameBufferAtIndex(0)->getStatus
() == ImageFrame::FrameEmpty); |
| 624 | 624 |
| 625 // Skip to the last frame and clear. | 625 // Skip to the last frame and clear. |
| 626 decoder->setData(fullData.get(), true); | 626 decoder->setData(fullData.get(), true); |
| 627 EXPECT_EQ(frameCount, decoder->frameCount()); | 627 EXPECT_EQ(frameCount, decoder->frameCount()); |
| 628 ImageFrame* lastFrame = decoder->frameBufferAtIndex(frameCount - 1); | 628 ImageFrame* lastFrame = decoder->frameBufferAtIndex(frameCount - 1); |
| 629 EXPECT_EQ(baselineHashes[frameCount - 1], hashBitmap(lastFrame->getSkBitmap(
))); | 629 EXPECT_EQ(baselineHashes[frameCount - 1], hashBitmap(lastFrame->getSkBitmap(
))); |
| 630 decoder->clearCacheExceptFrame(kNotFound); | 630 decoder->clearCacheExceptFrame(kNotFound); |
| 631 | 631 |
| 632 // Resume decoding of the first frame. | 632 // Resume decoding of the first frame. |
| 633 ImageFrame* firstFrame = decoder->frameBufferAtIndex(0); | 633 ImageFrame* firstFrame = decoder->frameBufferAtIndex(0); |
| 634 EXPECT_EQ(ImageFrame::FrameComplete, firstFrame->status()); | 634 EXPECT_EQ(ImageFrame::FrameComplete, firstFrame->getStatus()); |
| 635 EXPECT_EQ(baselineHashes[0], hashBitmap(firstFrame->getSkBitmap())); | 635 EXPECT_EQ(baselineHashes[0], hashBitmap(firstFrame->getSkBitmap())); |
| 636 } | 636 } |
| 637 | 637 |
| 638 TEST(AnimatedWebPTests, decodeAfterReallocatingData) | 638 TEST(AnimatedWebPTests, decodeAfterReallocatingData) |
| 639 { | 639 { |
| 640 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated.webp"); | 640 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated.webp"); |
| 641 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated-icc-xmp.webp"); | 641 testDecodeAfterReallocatingData("/LayoutTests/fast/images/resources/webp-ani
mated-icc-xmp.webp"); |
| 642 } | 642 } |
| 643 | 643 |
| 644 TEST(AnimatedWebPTests, alphaBlending) | 644 TEST(AnimatedWebPTests, alphaBlending) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 { | 681 { |
| 682 OwnPtr<ImageDecoder> decoder = createDecoder(); | 682 OwnPtr<ImageDecoder> decoder = createDecoder(); |
| 683 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-color-profile-lossy.webp"); | 683 RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/web
p-color-profile-lossy.webp"); |
| 684 ASSERT_TRUE(data.get()); | 684 ASSERT_TRUE(data.get()); |
| 685 decoder->setData(data.get(), true); | 685 decoder->setData(data.get(), true); |
| 686 EXPECT_EQ(1u, decoder->frameCount()); | 686 EXPECT_EQ(1u, decoder->frameCount()); |
| 687 EXPECT_EQ(cAnimationNone, decoder->repetitionCount()); | 687 EXPECT_EQ(cAnimationNone, decoder->repetitionCount()); |
| 688 } | 688 } |
| 689 | 689 |
| 690 } // namespace blink | 690 } // namespace blink |
| OLD | NEW |