Lines Matching refs:codec

14 #include "include/codec/SkAndroidCodec.h"
15 #include "include/codec/SkCodec.h"
42 #include "src/codec/SkCodecImageGenerator.h"
97 static void test_info(skiatest::Reporter* r, Codec* codec, const SkImageInfo& info,
102 SkCodec::Result result = codec->getPixels(info, bm.getPixels(), bm.rowBytes());
122 static void test_incremental_decode(skiatest::Reporter* r, SkCodec* codec, const SkImageInfo& info,
127 REPORTER_ASSERT(r, SkCodec::kSuccess == codec->startIncrementalDecode(info, bm.getPixels(),
130 REPORTER_ASSERT(r, SkCodec::kSuccess == codec->incrementalDecode());
136 static void test_in_stripes(skiatest::Reporter* r, SkCodec* codec, const SkImageInfo& info,
161 if (SkCodec::kSuccess != codec->startIncrementalDecode(info, bm.getAddr(0, y),
167 if (SkCodec::kSuccess != codec->incrementalDecode()) {
178 static void test_codec(skiatest::Reporter* r, const char* path, Codec* codec, SkBitmap& bm,
185 SkCodec::Result result = codec->getPixels(info, bm.getPixels(), bm.rowBytes());
204 auto actualResult = codec->getPixels(info565, bm565.getPixels(), bm565.rowBytes());
211 test_info(r, codec, info565, expectedResult, &digest565);
220 test_info(r, codec, info565, SkCodec::kInvalidConversion, nullptr);
224 if (codec->getInfo().colorType() == kGray_8_SkColorType) {
225 SkImageInfo grayInfo = codec->getInfo();
231 REPORTER_ASSERT(r, expectedResult == codec->getPixels(grayInfo,
238 test_info(r, codec, grayInfo, expectedResult, &grayDigest);
246 test_info(r, codec, info, expectedResult, digest);
251 test_info(r, codec, info.makeAlphaType(kUnpremul_SkAlphaType),
253 test_info(r, codec, info.makeAlphaType(kPremul_SkAlphaType),
257 test_info(r, codec, info.makeAlphaType(kOpaque_SkAlphaType),
266 test_info(r, codec, info.makeAlphaType(otherAt), expectedResult, nullptr);
286 SkCodec* codec,
299 test_codec(r, path, codec, bm, info, size, expectedResult, codecDigest, nullptr);
303 test_incremental_decode(r, codec, info, *codecDigest);
308 test_in_stripes(r, codec, info, *codecDigest);
313 REPORTER_ASSERT(r, codec->getScanlines(bm.getAddr(0, 0), 1, 0) == 0);
314 REPORTER_ASSERT(r, !codec->skipScanlines(1));
315 const SkCodec::Result startResult = codec->startScanlineDecode(info);
322 const int lines = codec->getScanlines(bm.getAddr(0, y), 1, 0);
328 if (SkCodec::kTopDown_SkScanlineOrder == codec->getScanlineOrder()) {
333 REPORTER_ASSERT(r, codec->getScanlines(bm.getAddr(0, 0), 1, 0)
339 REPORTER_ASSERT(r, codec->startScanlineDecode(info) == SkCodec::kSuccess);
340 const int lines = codec->getScanlines(bm.getAddr(0, 0), 1, 0);
344 REPORTER_ASSERT(r, codec->getPixels(bm.info(), bm.getPixels(), bm.rowBytes())
346 REPORTER_ASSERT(r, codec->getScanlines(bm.getAddr(0, 0), 1, 0)
348 REPORTER_ASSERT(r, codec->skipScanlines(1)
360 const auto partialStartResult = codec->startScanlineDecode(info, &options);
364 const int lines = codec->getScanlines(bm.getAddr(0, y), 1, 0);
376 SkCodec* codec,
395 const bool supported = codec->getValidSubset(&subset);
401 const auto result = codec->getPixels(bm.info(), bm.getPixels(), bm.rowBytes(), &opts);
407 // Webp is the only codec that supports subsets, and it will have modified the subset
418 std::unique_ptr<SkCodec> codec,
428 auto androidCodec = SkAndroidCodec::MakeFromCodec(std::move(codec));
464 std::unique_ptr<SkCodec> codec = SkCodec::MakeFromStream(std::move(bufferedStream));
465 REPORTER_ASSERT(r, codec);
466 if (codec) {
467 test_info(r, codec.get(), info, SkCodec::kSuccess, &codecDigest);
486 // Initialize a codec with a data stream.
492 std::unique_ptr<SkCodec> codec;
495 codec = SkCodec::MakeFromData(SkData::MakeFromStream(stream.get(), 2 * length / 3));
497 codec = SkCodec::MakeFromStream(std::move(stream));
499 if (!codec) {
504 const SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType);
506 // Run tests with this codec.
508 check_scanline_decode(r, codec.get(), &codecDigest, info, path, size, supportsScanlineDecoding,
511 check_subset_decode(r, codec.get(), info, size, supportsSubsetDecoding, supportsIncomplete);
513 check_android_codec(r, std::move(codec), codecDigest, info, path, size,
590 // Neither of these calls should return a codec. Bots should catch us if we leaked anything.
600 // No codec should claim this as their format, so this tests SkCodec::NewFromStream.
628 // Create the codec from the resource file
633 std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::MakeFromStream(std::move(stream)));
634 if (!codec) {
635 ERRORF(r, "Unable to create codec '%s'", path);
642 SkISize scaledDims = codec->getSampledDimensions(sampleSize);
643 SkImageInfo scaledInfo = codec->getInfo()
655 codec->getAndroidPixels(scaledInfo, pixels.get(), rowBytes, &options);
710 // Test images that should not be able to create a codec
855 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromData(wStream.detachAsData(), &chunkReader));
856 REPORTER_ASSERT(r, codec);
857 if (!codec) {
863 decodedBm.setInfo(codec->getInfo());
865 SkCodec::Result result = codec->getPixels(codec->getInfo(), decodedBm.getPixels(),
886 result = codec->getPixels(codec->getInfo(), decodedBm.getPixels(), decodedBm.rowBytes());
929 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(
931 REPORTER_ASSERT(r, codec);
933 test_info(r, codec.get(), codec->getInfo(), SkCodec::kSuccess, nullptr);
948 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(
950 REPORTER_ASSERT(r, codec);
952 test_info(r, codec.get(), codec->getInfo(), SkCodec::kSuccess, nullptr);
955 codec = SkCodec::MakeFromStream(std::make_unique<LimitedPeekingMemStream>(data, 0));
956 REPORTER_ASSERT(r, codec);
958 test_info(r, codec.get(), codec->getInfo(), SkCodec::kSuccess, nullptr);
978 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromData(data));
979 REPORTER_ASSERT(r, codec);
980 if (!codec) {
983 test_info(r, codec.get(), codec->getInfo(), SkCodec::kSuccess, nullptr);
996 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream)));
998 REPORTER_ASSERT(r, codec);
999 if (!codec) return;
1001 REPORTER_ASSERT(r, codec->getInfo().width() == 65535);
1002 REPORTER_ASSERT(r, codec->getInfo().height() == 65535);
1010 codec = SkCodec::MakeFromStream(std::move(stream));
1012 REPORTER_ASSERT(r, !codec);
1023 std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::MakeFromData(data));
1024 if (!codec) {
1025 ERRORF(r, "Unable to create codec '%s'.", path);
1029 const int width = codec->getInfo().width();
1030 const int height = codec->getInfo().height();
1037 auto sampledInfo = codec->getInfo().makeWH(width / 12, height / 12);
1038 auto result = codec->getAndroidPixels(sampledInfo, pixelStorage.get(), rowBytes, &opts);
1041 // Rewind the codec and perform a full image decode.
1042 result = codec->getPixels(codec->getInfo(), pixelStorage.get(), rowBytes);
1050 result = codec->getAndroidPixels(codec->getInfo().makeWH(100, 100), pixelStorage.get(),
1057 // out of scope. This would happen if we depend on the old state in the codec.
1061 result = codec->getAndroidPixels(codec->getInfo(), pixelStorage.get(), rowBytes, &opts);
1066 std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::MakeFromStream(GetResourceAsStream(path)));
1070 const int subsetWidth = codec->getInfo().width() / 2;
1071 const int subsetHeight = codec->getInfo().height() / 2;
1078 SkImageInfo dstInfo = codec->getInfo().makeWH(dstWidth, dstHeight)
1084 SkCodec::Result result = codec->getAndroidPixels(dstInfo, pixelStorage.get(), rowBytes, &opts);
1124 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromData(data));
1125 REPORTER_ASSERT(r, color_type_match(info.colorType(), codec->getInfo().colorType()));
1126 REPORTER_ASSERT(r, alpha_type_match(info.alphaType(), codec->getInfo().alphaType()));
1130 result = codec->getPixels(info, bm2.getPixels(), bm2.rowBytes());
1137 auto codec = SkCodec::MakeFromStream(GetResourceAsStream("images/mandrill_512_q075.jpg"));
1143 SkImageInfo newInfo = codec->getInfo().makeColorType(colorType);
1144 check_round_trip(r, codec.get(), newInfo);
1147 codec = SkCodec::MakeFromStream(GetResourceAsStream("images/grayscale.jpg"));
1148 check_round_trip(r, codec.get(), codec->getInfo());
1150 codec = SkCodec::MakeFromStream(GetResourceAsStream("images/yellow_rose.png"));
1161 SkImageInfo newInfo = codec->getInfo().makeColorType(colorType)
1164 check_round_trip(r, codec.get(), newInfo);
1168 codec = SkCodec::MakeFromStream(GetResourceAsStream("images/index8.png"));
1171 SkImageInfo newInfo = codec->getInfo().makeAlphaType(alphaType)
1173 check_round_trip(r, codec.get(), newInfo);
1185 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream)));
1186 if (!codec) {
1187 ERRORF(r, "failed to create a codec for %s", path);
1191 SkImageInfo infoF16 = codec->getInfo().makeColorType(kRGBA_F16_SkColorType);
1195 SkCodec::Result result = codec->getPixels(infoF16, bm.getPixels(), bm.rowBytes());
1198 result = codec->startScanlineDecode(infoF16);
1206 result = codec->startIncrementalDecode(infoF16, bm.getPixels(), bm.rowBytes());
1215 result = codec->getPixels(infoF16, bm.getPixels(), bm.rowBytes());
1217 result = codec->startScanlineDecode(infoF16);
1224 result = codec->startIncrementalDecode(infoF16, bm.getPixels(), bm.rowBytes());
1238 static void decode_frame(skiatest::Reporter* r, SkCodec* codec, size_t frame) {
1240 auto info = codec->getInfo().makeColorType(kN32_SkColorType);
1245 REPORTER_ASSERT(r, SkCodec::kSuccess == codec->getPixels(info,
1262 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(streamObj)));
1263 if (!codec) {
1264 ERRORF(r, "Failed to create codec for %s", path);
1273 decode_frame(r, codec.get(), 0);
1279 auto frameInfo = codec->getFrameInfo();
1347 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream)));
1348 if (!codec) {
1349 ERRORF(r, "Failed to create codec for %s,", file);
1353 SkImageInfo info = codec->getInfo().makeColorType(kN32_SkColorType);
1357 if (SkCodec::kUnimplemented != codec->startIncrementalDecode(info, bm.getPixels(),
1364 SkCodec::Result result = codec->startScanlineDecode(info);
1371 // This test verifies that we fixed an assert statement that fired when reusing a png codec
1379 std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::MakeFromStream(std::move(stream)));
1380 if (!codec) {
1381 ERRORF(r, "Failed to create codec\n");
1387 auto size = codec->getSampledDimensions(opts.fSampleSize);
1388 auto info = codec->getInfo().makeDimensions(size).makeColorType(kN32_SkColorType);
1391 auto result = codec->getAndroidPixels(info, bm.getPixels(), bm.rowBytes(), &opts);
1394 info = codec->getInfo().makeColorType(kN32_SkColorType);
1397 result = codec->getAndroidPixels(info, bm.getPixels(), bm.rowBytes(), &opts);
1409 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromData(SkData::MakeFromStream(stream.get(), 99)));
1410 if (!codec) {
1411 ERRORF(r, "Failed to create codec\n");
1415 auto info = codec->getInfo().makeColorType(kN32_SkColorType);
1418 auto result = codec->startIncrementalDecode(info, bm.getPixels(), bm.rowBytes());
1424 result = codec->incrementalDecode(&rowsDecoded);
1436 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream)));
1437 REPORTER_ASSERT(r, codec);
1439 test_info(r, codec.get(), codec->getInfo().makeColorType(kN32_SkColorType), expectedResult,
1460 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream)));
1461 REPORTER_ASSERT(r, !codec);
1547 std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream)));
1548 REPORTER_ASSERT(r, codec);
1549 if (!codec) {
1553 const auto info = codec->getInfo().makeColorType(kN32_SkColorType);
1557 auto frameInfos = codec->getFrameInfo();
1563 auto result = codec->startIncrementalDecode(info, bm.getPixels(), bm.rowBytes(), &opts);
1571 codec->incrementalDecode();
1642 // decoded. This should create a codec but fail to decode.
1645 std::unique_ptr<SkCodec> codec = SkCodec::MakeFromData(std::move(subset));
1646 if (!codec) {
1647 ERRORF(r, "Failed to create a codec for %s truncated to only %lu bytes",
1652 test_info(r, codec.get(), codec->getInfo(), SkCodec::kInvalidInput, nullptr);
1751 auto codec = SkAndroidCodec::MakeFromCodec(SkCodec::MakeFromData(data));
1752 if (!codec) {
1753 ERRORF(r, "failed to create codec from %s", file);
1761 const auto size = codec->getSampledDimensions(kSampleSize);
1762 auto info = codec->getInfo().makeDimensions(size);
1769 auto result = codec->getAndroidPixels(info, bm.getPixels(), bm.rowBytes(), &options);
1787 auto codec = SkCodec::MakeFromData(std::move(data));
1788 auto info = codec->getInfo().makeColorType(kAlpha_8_SkColorType);
1791 REPORTER_ASSERT(r, codec->getPixels(bm.pixmap()) == SkCodec::kInvalidConversion);
1836 auto codec = SkCodec::MakeFromData(std::move(data));
1837 SkImageInfo info = codec->getInfo().makeColorType(kRGBA_F16_SkColorType)
1839 test_info(r, codec.get(), info, SkCodec::kSuccess, nullptr);
1860 auto codec = SkCodec::MakeFromData(std::move(data));
1861 if (!codec) {
1862 ERRORF(r, "Failed to create a codec from %s", rec.name);
1866 const auto* profile = codec->getICCProfile();
1875 SkImageInfo info = codec->getInfo().makeColorSpace(nullptr);
1878 if (codec->getPixels(info, bm.getPixels(), bm.rowBytes()) != SkCodec::kSuccess) {