From c367d03fb04fccdc63b1379cf74ddc1cab842039 Mon Sep 17 00:00:00 2001 From: Matt Sarett Date: Fri, 5 May 2017 11:13:26 -0400 Subject: Add support for row-by-row png encodes Also adds a SkEncoder base class. Bug: 713862 Change-Id: Ia3f009cd9f376514f6c19396245fab3a43ae6536 Reviewed-on: https://skia-review.googlesource.com/15152 Reviewed-by: Leon Scroggins Commit-Queue: Matt Sarett --- tests/EncodeTest.cpp | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) (limited to 'tests/EncodeTest.cpp') diff --git a/tests/EncodeTest.cpp b/tests/EncodeTest.cpp index 9db5039d59..a3b39f23c5 100644 --- a/tests/EncodeTest.cpp +++ b/tests/EncodeTest.cpp @@ -9,10 +9,35 @@ #include "Test.h" #include "SkBitmap.h" +#include "SkEncodedImageFormat.h" #include "SkJpegEncoder.h" +#include "SkPngEncoder.h" #include "SkStream.h" -DEF_TEST(Encode_Jpeg, r) { +static bool encode(SkEncodedImageFormat format, SkWStream* dst, const SkPixmap& src) { + switch (format) { + case SkEncodedImageFormat::kJPEG: + return SkJpegEncoder::Encode(dst, src, SkJpegEncoder::Options()); + case SkEncodedImageFormat::kPNG: + return SkPngEncoder::Encode(dst, src, SkPngEncoder::Options()); + default: + return nullptr; + } +} + +static std::unique_ptr make(SkEncodedImageFormat format, SkWStream* dst, + const SkPixmap& src) { + switch (format) { + case SkEncodedImageFormat::kJPEG: + return SkJpegEncoder::Make(dst, src, SkJpegEncoder::Options()); + case SkEncodedImageFormat::kPNG: + return SkPngEncoder::Make(dst, src, SkPngEncoder::Options()); + default: + return nullptr; + } +} + +static void test_encode(skiatest::Reporter* r, SkEncodedImageFormat format) { SkBitmap bitmap; bool success = GetResourceAsBitmap("mandrill_128.png", &bitmap); if (!success) { @@ -27,22 +52,22 @@ DEF_TEST(Encode_Jpeg, r) { } SkDynamicMemoryWStream dst0, dst1, dst2, dst3; - success = SkJpegEncoder::Encode(&dst0, src, SkJpegEncoder::Options()); + success = encode(format, &dst0, src); REPORTER_ASSERT(r, success); - auto encoder1 = SkJpegEncoder::Make(&dst1, src, SkJpegEncoder::Options()); + auto encoder1 = make(format, &dst1, src); for (int i = 0; i < src.height(); i++) { success = encoder1->encodeRows(1); REPORTER_ASSERT(r, success); } - auto encoder2 = SkJpegEncoder::Make(&dst2, src, SkJpegEncoder::Options()); + auto encoder2 = make(format, &dst2, src); for (int i = 0; i < src.height(); i+=3) { success = encoder2->encodeRows(3); REPORTER_ASSERT(r, success); } - auto encoder3 = SkJpegEncoder::Make(&dst3, src, SkJpegEncoder::Options()); + auto encoder3 = make(format, &dst3, src); success = encoder3->encodeRows(200); REPORTER_ASSERT(r, success); @@ -54,3 +79,8 @@ DEF_TEST(Encode_Jpeg, r) { REPORTER_ASSERT(r, data0->equals(data2.get())); REPORTER_ASSERT(r, data0->equals(data3.get())); } + +DEF_TEST(Encoder, r) { + test_encode(r, SkEncodedImageFormat::kJPEG); + test_encode(r, SkEncodedImageFormat::kPNG); +} -- cgit v1.2.3