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

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: 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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698