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

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp

Issue 1820733004: Propagate the decoder frame premul info to SkBitmap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments Created 4 years, 9 months 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
« no previous file with comments | « third_party/WebKit/Source/platform/image-decoders/ImageFrame.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 truncation size:
525 // a) large enough to produce a partial frame &&
526 // b) small enough to not fully decode the frame
527 const size_t kTruncateSize = 800;
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 // Partially decoded frame => the frame alpha type is unknown and should ref lect the requested format.
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 // Fully decoded frame => the frame alpha type is known (opaque).
553 premulDecoder->setData(fullData.get(), true);
554 ASSERT_TRUE(premulDecoder->frameCount());
555 unpremulDecoder->setData(fullData.get(), true);
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/image-decoders/ImageFrame.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698