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

Side by Side Diff: dm/DMSrcSink.cpp

Issue 2447863002: Report repetition count in SkCodec (Closed)
Patch Set: Return a bool, with multiple out parameters Created 4 years, 1 month 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 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "DMSrcSink.h" 8 #include "DMSrcSink.h"
9 #include "Resources.h" 9 #include "Resources.h"
10 #include "SkAndroidCodec.h" 10 #include "SkAndroidCodec.h"
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 } 423 }
424 424
425 SkImageInfo bitmapInfo = decodeInfo; 425 SkImageInfo bitmapInfo = decodeInfo;
426 if (kRGBA_8888_SkColorType == decodeInfo.colorType() || 426 if (kRGBA_8888_SkColorType == decodeInfo.colorType() ||
427 kBGRA_8888_SkColorType == decodeInfo.colorType()) { 427 kBGRA_8888_SkColorType == decodeInfo.colorType()) {
428 bitmapInfo = bitmapInfo.makeColorType(kN32_SkColorType); 428 bitmapInfo = bitmapInfo.makeColorType(kN32_SkColorType);
429 } 429 }
430 430
431 switch (fMode) { 431 switch (fMode) {
432 case kAnimated_Mode: { 432 case kAnimated_Mode: {
433 std::vector<SkCodec::FrameInfo> frameInfos = codec->getFrameInfo(); 433 std::vector<SkCodec::FrameInfo> frameInfos;
434 if (frameInfos.size() <= 1) { 434 const bool animated = codec->getFrameInfo(&frameInfos, nullptr);
435 if (!animated || frameInfos.size() <= 1) {
435 return SkStringPrintf("%s is not an animated image.", fPath.c_st r()); 436 return SkStringPrintf("%s is not an animated image.", fPath.c_st r());
436 } 437 }
437 438
438 // As in CodecSrc::size(), compute a roughly square grid to draw the frames 439 // As in CodecSrc::size(), compute a roughly square grid to draw the frames
439 // into. "factor" is the number of frames to draw on one row. There will be 440 // into. "factor" is the number of frames to draw on one row. There will be
440 // up to "factor" rows as well. 441 // up to "factor" rows as well.
441 const float root = sqrt((float) frameInfos.size()); 442 const float root = sqrt((float) frameInfos.size());
442 const int factor = sk_float_ceil2int(root); 443 const int factor = sk_float_ceil2int(root);
443 444
444 // Used to cache a frame that future frames will depend on. 445 // Used to cache a frame that future frames will depend on.
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded)); 719 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded));
719 if (nullptr == codec) { 720 if (nullptr == codec) {
720 return SkISize::Make(0, 0); 721 return SkISize::Make(0, 0);
721 } 722 }
722 723
723 auto imageSize = codec->getScaledDimensions(fScale); 724 auto imageSize = codec->getScaledDimensions(fScale);
724 if (fMode == kAnimated_Mode) { 725 if (fMode == kAnimated_Mode) {
725 // We'll draw one of each frame, so make it big enough to hold them all 726 // We'll draw one of each frame, so make it big enough to hold them all
726 // in a grid. The grid will be roughly square, with "factor" frames per 727 // in a grid. The grid will be roughly square, with "factor" frames per
727 // row and up to "factor" rows. 728 // row and up to "factor" rows.
728 const size_t count = codec->getFrameInfo().size(); 729 std::vector<SkCodec::FrameInfo> frameInfos;
730 if (!codec->getFrameInfo(&frameInfos, nullptr)) {
731 return imageSize;
732 }
733 const size_t count = frameInfos.size();
729 const float root = sqrt((float) count); 734 const float root = sqrt((float) count);
730 const int factor = sk_float_ceil2int(root); 735 const int factor = sk_float_ceil2int(root);
731 imageSize.fWidth = imageSize.fWidth * factor; 736 imageSize.fWidth = imageSize.fWidth * factor;
732 imageSize.fHeight = imageSize.fHeight * sk_float_ceil2int((float) count / (float) factor); 737 imageSize.fHeight = imageSize.fHeight * sk_float_ceil2int((float) count / (float) factor);
733 } 738 }
734 return imageSize; 739 return imageSize;
735 } 740 }
736 741
737 Name CodecSrc::name() const { 742 Name CodecSrc::name() const {
738 if (1.0f == fScale) { 743 if (1.0f == fScale) {
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after
1803 Error err = src.draw(&rec); 1808 Error err = src.draw(&rec);
1804 if (!err.isEmpty()) { 1809 if (!err.isEmpty()) {
1805 return err; 1810 return err;
1806 } 1811 }
1807 dl->draw(canvas); 1812 dl->draw(canvas);
1808 return check_against_reference(bitmap, src, fSink); 1813 return check_against_reference(bitmap, src, fSink);
1809 }); 1814 });
1810 } 1815 }
1811 1816
1812 } // namespace DM 1817 } // namespace DM
OLDNEW
« no previous file with comments | « dm/DM.cpp ('k') | gm/animatedGif.cpp » ('j') | include/codec/SkCodec.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698