Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "Resources.h" | 8 #include "Resources.h" |
| 9 #include "SkAndroidCodec.h" | 9 #include "SkAndroidCodec.h" |
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 447 check(r, "mandrill_64.png", SkISize::Make(64, 64), true, false, false); | 447 check(r, "mandrill_64.png", SkISize::Make(64, 64), true, false, false); |
| 448 check(r, "plane.png", SkISize::Make(250, 126), true, false, false); | 448 check(r, "plane.png", SkISize::Make(250, 126), true, false, false); |
| 449 // FIXME: We are not ready to test incomplete interlaced pngs | 449 // FIXME: We are not ready to test incomplete interlaced pngs |
| 450 check(r, "plane_interlaced.png", SkISize::Make(250, 126), true, false, false ); | 450 check(r, "plane_interlaced.png", SkISize::Make(250, 126), true, false, false ); |
| 451 check(r, "randPixels.png", SkISize::Make(8, 8), true, false, false); | 451 check(r, "randPixels.png", SkISize::Make(8, 8), true, false, false); |
| 452 check(r, "yellow_rose.png", SkISize::Make(400, 301), true, false, false); | 452 check(r, "yellow_rose.png", SkISize::Make(400, 301), true, false, false); |
| 453 | 453 |
| 454 // RAW | 454 // RAW |
| 455 #if defined(SK_CODEC_DECODES_RAW) | 455 #if defined(SK_CODEC_DECODES_RAW) |
| 456 check(r, "sample_1mp.dng", SkISize::Make(600, 338), false, false, false); | 456 check(r, "sample_1mp.dng", SkISize::Make(600, 338), false, false, false); |
| 457 check(r, "dng_with_preview.dng", SkISize::Make(600, 338), true, false, false ); | |
| 457 #endif | 458 #endif |
| 458 } | 459 } |
| 459 | 460 |
| 460 // Test interlaced PNG in stripes, similar to DM's kStripe_Mode | 461 // Test interlaced PNG in stripes, similar to DM's kStripe_Mode |
| 461 DEF_TEST(Codec_stripes, r) { | 462 DEF_TEST(Codec_stripes, r) { |
| 462 const char * path = "plane_interlaced.png"; | 463 const char * path = "plane_interlaced.png"; |
| 463 SkAutoTDelete<SkStream> stream(resource(path)); | 464 SkAutoTDelete<SkStream> stream(resource(path)); |
| 464 if (!stream) { | 465 if (!stream) { |
| 465 SkDebugf("Missing resource '%s'\n", path); | 466 SkDebugf("Missing resource '%s'\n", path); |
| 466 } | 467 } |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 644 test_dimensions(r, "3x3.png"); | 645 test_dimensions(r, "3x3.png"); |
| 645 test_dimensions(r, "3x1.png"); | 646 test_dimensions(r, "3x1.png"); |
| 646 test_dimensions(r, "1x1.png"); | 647 test_dimensions(r, "1x1.png"); |
| 647 test_dimensions(r, "16x1.png"); | 648 test_dimensions(r, "16x1.png"); |
| 648 test_dimensions(r, "1x16.png"); | 649 test_dimensions(r, "1x16.png"); |
| 649 test_dimensions(r, "mandrill_16.png"); | 650 test_dimensions(r, "mandrill_16.png"); |
| 650 | 651 |
| 651 // RAW | 652 // RAW |
| 652 #if defined(SK_CODEC_DECODES_RAW) | 653 #if defined(SK_CODEC_DECODES_RAW) |
| 653 test_dimensions(r, "sample_1mp.dng"); | 654 test_dimensions(r, "sample_1mp.dng"); |
| 655 test_dimensions(r, "dng_with_preview.dng"); | |
| 654 #endif | 656 #endif |
| 655 } | 657 } |
| 656 | 658 |
| 657 static void test_invalid(skiatest::Reporter* r, const char path[]) { | 659 static void test_invalid(skiatest::Reporter* r, const char path[]) { |
| 658 SkAutoTDelete<SkStream> stream(resource(path)); | 660 SkAutoTDelete<SkStream> stream(resource(path)); |
| 659 if (!stream) { | 661 if (!stream) { |
| 660 SkDebugf("Missing resource '%s'\n", path); | 662 SkDebugf("Missing resource '%s'\n", path); |
| 661 return; | 663 return; |
| 662 } | 664 } |
| 663 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach())); | 665 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach())); |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 887 return fStream.rewind(); | 889 return fStream.rewind(); |
| 888 } | 890 } |
| 889 bool isAtEnd() const override { | 891 bool isAtEnd() const override { |
| 890 return false; | 892 return false; |
| 891 } | 893 } |
| 892 private: | 894 private: |
| 893 SkMemoryStream fStream; | 895 SkMemoryStream fStream; |
| 894 const size_t fLimit; | 896 const size_t fLimit; |
| 895 }; | 897 }; |
| 896 | 898 |
| 899 // Stream that is not seekable (!hasPotions() or !hasLength()) | |
|
scroggo
2016/02/04 15:46:24
hasPosition()*
yujieqin
2016/02/05 08:53:21
Done.
| |
| 900 class NotSeekableMemStream : public SkStream { | |
| 901 public: | |
| 902 NotSeekableMemStream(SkData* data) : fStream(data) {} | |
| 903 | |
| 904 bool hasPosition() const override { | |
| 905 return false; | |
| 906 } | |
| 907 | |
| 908 bool hasLength() const override { | |
| 909 return false; | |
| 910 } | |
| 911 | |
| 912 size_t peek(void* buf, size_t bytes) const override { | |
| 913 return fStream.peek(buf, bytes); | |
| 914 } | |
| 915 size_t read(void* buf, size_t bytes) override { | |
| 916 return fStream.read(buf, bytes); | |
| 917 } | |
| 918 bool rewind() override { | |
| 919 return fStream.rewind(); | |
| 920 } | |
| 921 bool isAtEnd() const override { | |
| 922 return false; | |
|
scroggo
2016/02/04 15:46:24
Should this return fStream.isAtEnd()? (I'm guessin
yujieqin
2016/02/05 08:53:21
Done.
| |
| 923 } | |
| 924 private: | |
| 925 SkMemoryStream fStream; | |
| 926 }; | |
| 927 | |
| 928 // Test that the RawCodec works also for not seekable stream. This will test the code path using | |
| 929 // SkRawBufferedStream instead of SkRawSeekableStream. | |
| 930 #if defined(SK_CODEC_DECODES_RAW) | |
| 931 DEF_TEST(Codec_raw_notseekable, r) { | |
| 932 const char* path = "dng_with_preview.dng"; | |
| 933 SkString fullPath(GetResourcePath(path)); | |
| 934 SkAutoTUnref<SkData> data(SkData::NewFromFileName(fullPath.c_str())); | |
| 935 if (!data) { | |
| 936 SkDebugf("Missing resource '%s'\n", path); | |
| 937 return; | |
| 938 } | |
| 939 | |
| 940 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(new NotSeekableMemStream (data))); | |
| 941 REPORTER_ASSERT(r, codec); | |
| 942 | |
| 943 test_info(r, codec, codec->getInfo(), SkCodec::kSuccess, nullptr); | |
| 944 } | |
| 945 #endif | |
| 946 | |
| 897 // Test that even if webp_parse_header fails to peek enough, it will fall back t o read() | 947 // Test that even if webp_parse_header fails to peek enough, it will fall back t o read() |
| 898 // + rewind() and succeed. | 948 // + rewind() and succeed. |
| 899 DEF_TEST(Codec_webp_peek, r) { | 949 DEF_TEST(Codec_webp_peek, r) { |
| 900 const char* path = "baby_tux.webp"; | 950 const char* path = "baby_tux.webp"; |
| 901 SkString fullPath(GetResourcePath(path)); | 951 SkString fullPath(GetResourcePath(path)); |
| 902 SkAutoTUnref<SkData> data(SkData::NewFromFileName(fullPath.c_str())); | 952 SkAutoTUnref<SkData> data(SkData::NewFromFileName(fullPath.c_str())); |
| 903 if (!data) { | 953 if (!data) { |
| 904 SkDebugf("Missing resource '%s'\n", path); | 954 SkDebugf("Missing resource '%s'\n", path); |
| 905 return; | 955 return; |
| 906 } | 956 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 969 // Now test an image which is too big. Any image with a larger header (i.e. | 1019 // Now test an image which is too big. Any image with a larger header (i.e. |
| 970 // has bigger width/height) is also too big. | 1020 // has bigger width/height) is also too big. |
| 971 const unsigned char tooBigWbmp[] = { 0x00, 0x00, // Header | 1021 const unsigned char tooBigWbmp[] = { 0x00, 0x00, // Header |
| 972 0x84, 0x80, 0x00, // W: 65536 | 1022 0x84, 0x80, 0x00, // W: 65536 |
| 973 0x84, 0x80, 0x00 }; // H: 65536 | 1023 0x84, 0x80, 0x00 }; // H: 65536 |
| 974 stream.reset(new SkMemoryStream(tooBigWbmp, sizeof(tooBigWbmp), false)); | 1024 stream.reset(new SkMemoryStream(tooBigWbmp, sizeof(tooBigWbmp), false)); |
| 975 codec.reset(SkCodec::NewFromStream(stream.detach())); | 1025 codec.reset(SkCodec::NewFromStream(stream.detach())); |
| 976 | 1026 |
| 977 REPORTER_ASSERT(r, !codec); | 1027 REPORTER_ASSERT(r, !codec); |
| 978 } | 1028 } |
| OLD | NEW |