From 1fcc40474f1ad1f522d0a61086e25a71ca0a6881 Mon Sep 17 00:00:00 2001 From: Hal Canary Date: Wed, 30 Nov 2016 17:07:59 -0500 Subject: SkEncodeImage: no more link-time registration Also, no more SkImageEncoder class. SK_SUPPORT_LEGACY_IMAGE_ENCODER_CLASS now only guards some old API shims. GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5006 Change-Id: I3797f584f3e8e12ade10d31e8733163453725f40 Reviewed-on: https://skia-review.googlesource.com/5006 Commit-Queue: Hal Canary Reviewed-by: Leon Scroggins Reviewed-by: Mike Reed --- gm/encode-platform.cpp | 55 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) (limited to 'gm/encode-platform.cpp') diff --git a/gm/encode-platform.cpp b/gm/encode-platform.cpp index 0357298711..e8f420fb15 100644 --- a/gm/encode-platform.cpp +++ b/gm/encode-platform.cpp @@ -37,26 +37,6 @@ static void make_unpremul_256(SkBitmap* bitmap) { bitmap->setAlphaType(kUnpremul_SkAlphaType); } -static SkImageEncoder* make_encoder(SkEncodedImageFormat type) { -#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) - return CreateImageEncoder_CG((SkImageEncoder::Type)type); -#elif defined(SK_BUILD_FOR_WIN) - return CreateImageEncoder_WIC((SkImageEncoder::Type)type); -#else - switch (type) { - case SkEncodedImageFormat::kPNG: - return CreatePNGImageEncoder(); - case SkEncodedImageFormat::kJPEG: - return CreateJPEGImageEncoder(); - case SkEncodedImageFormat::kWEBP: - return CreateWEBPImageEncoder(); - default: - SkASSERT(false); - return nullptr; - } -#endif -} - #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) static SkEncodedImageFormat kTypes[] { SkEncodedImageFormat::kPNG, SkEncodedImageFormat::kJPEG, SkEncodedImageFormat::kGIF, @@ -76,9 +56,30 @@ static SkEncodedImageFormat kTypes[] { }; #endif -static sk_sp encode_data(std::unique_ptr& encoder, const SkBitmap& src) { - SkDynamicMemoryWStream buffer; - return encoder->encodeStream(&buffer, src, 100) ? buffer.detachAsData() : nullptr; +static sk_sp encode_data(SkEncodedImageFormat type, const SkBitmap& bitmap) { + SkAutoLockPixels autoLockPixels(bitmap); + SkPixmap src; + if (!bitmap.peekPixels(&src)) { + return nullptr; + } + SkDynamicMemoryWStream buf; + #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + return SkEncodeImageWithCG(&buf, src, type) ? buf.detachAsData() : nullptr; + #elif defined(SK_BUILD_FOR_WIN) + return SkEncodeImageWithWIC(&buf, src, type, 100) ? buf.detachAsData() : nullptr; + #else + switch (type) { + case SkEncodedImageFormat::kPNG: + return SkEncodeImageAsPNG(&buf, src) ? buf.detachAsData() : nullptr; + case SkEncodedImageFormat::kJPEG: + return SkEncodeImageAsJPEG(&buf, src, 100) ? buf.detachAsData() : nullptr; + case SkEncodedImageFormat::kWEBP: + return SkEncodeImageAsWEBP(&buf, src, 100) ? buf.detachAsData() : nullptr; + default: + SkASSERT(false); + return nullptr; + } + #endif } class EncodePlatformGM : public GM { @@ -101,11 +102,9 @@ protected: make_unpremul_256(&unpremulBm); for (SkEncodedImageFormat type : kTypes) { - std::unique_ptr encoder(make_encoder(type)); - - auto opaqueImage = SkImage::MakeFromEncoded(encode_data(encoder, opaqueBm)); - auto premulImage = SkImage::MakeFromEncoded(encode_data(encoder, premulBm)); - auto unpremulImage = SkImage::MakeFromEncoded(encode_data(encoder, unpremulBm)); + auto opaqueImage = SkImage::MakeFromEncoded(encode_data(type, opaqueBm)); + auto premulImage = SkImage::MakeFromEncoded(encode_data(type, premulBm)); + auto unpremulImage = SkImage::MakeFromEncoded(encode_data(type, unpremulBm)); canvas->drawImage(opaqueImage.get(), 0.0f, 0.0f); canvas->drawImage(premulImage.get(), 0.0f, 256.0f); -- cgit v1.2.3