Chromium Code Reviews| 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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 509 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); // Default value before decode. | 509 EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount()); // Default value before decode. |
| 510 | 510 |
| 511 for (size_t i = 0; i < decoder->frameCount(); ++i) { | 511 for (size_t i = 0; i < decoder->frameCount(); ++i) { |
| 512 ImageFrame* frame = decoder->frameBufferAtIndex(i); | 512 ImageFrame* frame = decoder->frameBufferAtIndex(i); |
| 513 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); | 513 EXPECT_EQ(ImageFrame::FrameComplete, frame->getStatus()); |
| 514 } | 514 } |
| 515 | 515 |
| 516 EXPECT_EQ(expectedRepetitionCount, decoder->repetitionCount()); // Expected value after decode. | 516 EXPECT_EQ(expectedRepetitionCount, decoder->repetitionCount()); // Expected value after decode. |
| 517 } | 517 } |
| 518 | 518 |
| 519 TEST(GIFImageDecoderTest, bitmapAlphaType) | |
| 520 { | |
| 521 RefPtr<SharedBuffer> fullData = readFile(decodersTestingDir, "radient.gif"); | |
| 522 ASSERT_TRUE(fullData.get()); | |
| 523 | |
| 524 // Empirically chosen | |
|
Noel Gordon
2016/03/21 22:37:16
// Empirically chosen truncation size:
f(malita)
2016/03/21 22:46:24
Done.
| |
| 525 // a) large enough to produce a partial frame && | |
| 526 // b) small enough to not fully decode the frame | |
| 527 static size_t kTruncateSize = 800; | |
|
Noel Gordon
2016/03/21 22:37:16
static -> const ?
f(malita)
2016/03/21 22:46:24
doh, done.
| |
| 528 ASSERT_TRUE(kTruncateSize < fullData->size()); | |
| 529 RefPtr<SharedBuffer> partialData = SharedBuffer::create(fullData->data(), kT runcateSize); | |
| 530 | |
| 531 OwnPtr<ImageDecoder> premulDecoder = adoptPtr(new GIFImageDecoder( | |
| 532 ImageDecoder::AlphaPremultiplied, | |
| 533 ImageDecoder::GammaAndColorProfileApplied, | |
| 534 ImageDecoder::noDecodedImageByteLimit)); | |
| 535 OwnPtr<ImageDecoder> unpremulDecoder = adoptPtr(new GIFImageDecoder( | |
| 536 ImageDecoder::AlphaNotPremultiplied, | |
| 537 ImageDecoder::GammaAndColorProfileApplied, | |
| 538 ImageDecoder::noDecodedImageByteLimit)); | |
| 539 | |
| 540 // Partial frame => alpha type reflects the requested format. | |
|
Noel Gordon
2016/03/21 22:37:16
"Partial frame => alpha" -> "Partially decoded fra
f(malita)
2016/03/21 22:46:24
Done.
| |
| 541 premulDecoder->setData(partialData.get(), false); | |
| 542 ASSERT_TRUE(premulDecoder->frameCount()); | |
| 543 unpremulDecoder->setData(partialData.get(), false); | |
| 544 ASSERT_TRUE(unpremulDecoder->frameCount()); | |
| 545 ImageFrame* premulFrame = premulDecoder->frameBufferAtIndex(0); | |
| 546 EXPECT_TRUE(premulFrame && premulFrame->getStatus() != ImageFrame::FrameComp lete); | |
| 547 EXPECT_EQ(premulFrame->bitmap().alphaType(), kPremul_SkAlphaType); | |
| 548 ImageFrame* unpremulFrame = unpremulDecoder->frameBufferAtIndex(0); | |
| 549 EXPECT_TRUE(unpremulFrame && unpremulFrame->getStatus() != ImageFrame::Frame Complete); | |
| 550 EXPECT_EQ(unpremulFrame->bitmap().alphaType(), kUnpremul_SkAlphaType); | |
| 551 | |
| 552 // Full frame => alpha type is known to be opaque | |
|
Noel Gordon
2016/03/21 22:37:16
"Full frame =>" -> "Fully decoded frame => the fra
f(malita)
2016/03/21 22:46:24
Done.
| |
| 553 premulDecoder->setData(fullData.get(), false); | |
|
Noel Gordon
2016/03/21 22:37:16
false -> true
f(malita)
2016/03/21 22:46:24
Done.
| |
| 554 ASSERT_TRUE(premulDecoder->frameCount()); | |
| 555 unpremulDecoder->setData(fullData.get(), false); | |
|
Noel Gordon
2016/03/21 22:37:16
false -> true
f(malita)
2016/03/21 22:46:24
Done.
| |
| 556 ASSERT_TRUE(unpremulDecoder->frameCount()); | |
| 557 premulFrame = premulDecoder->frameBufferAtIndex(0); | |
| 558 EXPECT_TRUE(premulFrame && premulFrame->getStatus() == ImageFrame::FrameComp lete); | |
| 559 EXPECT_EQ(premulFrame->bitmap().alphaType(), kOpaque_SkAlphaType); | |
| 560 unpremulFrame = unpremulDecoder->frameBufferAtIndex(0); | |
| 561 EXPECT_TRUE(unpremulFrame && unpremulFrame->getStatus() == ImageFrame::Frame Complete); | |
| 562 EXPECT_EQ(unpremulFrame->bitmap().alphaType(), kOpaque_SkAlphaType); | |
| 563 } | |
| 564 | |
| 519 } // namespace blink | 565 } // namespace blink |
| OLD | NEW |