diff options
author | Leon Scroggins III <scroggo@google.com> | 2018-06-25 14:01:29 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-26 17:30:52 +0000 |
commit | a57488a1f5c14c2114c57880b85c1bbc90024973 (patch) | |
tree | 7e811b7928e098560b8a8ebab12c3da960b5efc6 | |
parent | 6a284b771632f547b8a2d31115d3df4601c53228 (diff) |
Expose public factories for platform decoders
Bug: skia:8076
Move SkImageGeneratorCG and SkImageGeneratorWIC to include/ports/,
and make them SK_API.
Remove SkImageGeneratorCG::NewFromEncodedCG. No known clients are using
it, and it was a private API in src/. There is already a
MakeFromEncodedCG to replace it.
Similarly, switch WIC from New to Make.
Add a compile test for using them with
SetImageGeneratorFromEncodedDataFactory.
Change-Id: I897eb7a887b3736a6c614a68e38f38b6a1942cf1
Reviewed-on: https://skia-review.googlesource.com/137387
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Leon Scroggins <scroggo@google.com>
-rw-r--r-- | dm/DMSrcSink.cpp | 3 | ||||
-rw-r--r-- | include/ports/SkImageGeneratorCG.h (renamed from src/ports/SkImageGeneratorCG.h) | 10 | ||||
-rw-r--r-- | include/ports/SkImageGeneratorWIC.h (renamed from src/ports/SkImageGeneratorWIC.h) | 11 | ||||
-rw-r--r-- | src/ports/SkImageGeneratorCG.cpp | 6 | ||||
-rw-r--r-- | src/ports/SkImageGeneratorWIC.cpp | 12 | ||||
-rw-r--r-- | tests/ImageGeneratorTest.cpp | 14 |
6 files changed, 26 insertions, 30 deletions
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index baa98a0784..9a16e89b07 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -954,9 +954,8 @@ Error ImageGenSrc::draw(SkCanvas* canvas) const { #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) gen = SkImageGeneratorCG::MakeFromEncodedCG(encoded); #elif defined(SK_BUILD_FOR_WIN) - gen.reset(SkImageGeneratorWIC::NewFromEncodedWIC(encoded.get())); + gen = SkImageGeneratorWIC::MakeFromEncodedWIC(encoded); #endif - if (!gen) { return "Could not create platform image generator."; } diff --git a/src/ports/SkImageGeneratorCG.h b/include/ports/SkImageGeneratorCG.h index ee91c845fc..bdf445ae15 100644 --- a/src/ports/SkImageGeneratorCG.h +++ b/include/ports/SkImageGeneratorCG.h @@ -14,16 +14,8 @@ #include "SkImageGenerator.h" #include "SkTemplates.h" -class SkImageGeneratorCG : public SkImageGenerator { +class SK_API SkImageGeneratorCG : public SkImageGenerator { public: -#ifdef SK_LEGACY_NEW_FROM_ENCODED_CG - /* - * Refs the data if an image generator can be returned. Otherwise does - * not affect the data. - */ - static SkImageGenerator* NewFromEncodedCG(SkData* data); -#endif - static std::unique_ptr<SkImageGenerator> MakeFromEncodedCG(sk_sp<SkData>); protected: diff --git a/src/ports/SkImageGeneratorWIC.h b/include/ports/SkImageGeneratorWIC.h index 5da68f2ea7..0ea0305a34 100644 --- a/src/ports/SkImageGeneratorWIC.h +++ b/include/ports/SkImageGeneratorWIC.h @@ -30,13 +30,9 @@ * For more information on initializing COM, please see: * https://msdn.microsoft.com/en-us/library/windows/desktop/ff485844.aspx */ -class SkImageGeneratorWIC : public SkImageGenerator { +class SK_API SkImageGeneratorWIC : public SkImageGenerator { public: - /* - * Refs the data if an image generator can be returned. Otherwise does - * not affect the data. - */ - static SkImageGenerator* NewFromEncodedWIC(SkData* data); + static std::unique_ptr<SkImageGenerator> MakeFromEncodedWIC(sk_sp<SkData>); protected: sk_sp<SkData> onRefEncodedData() override; @@ -48,10 +44,9 @@ private: /* * Takes ownership of the imagingFactory * Takes ownership of the imageSource - * Refs the data */ SkImageGeneratorWIC(const SkImageInfo& info, IWICImagingFactory* imagingFactory, - IWICBitmapSource* imageSource, SkData* data); + IWICBitmapSource* imageSource, sk_sp<SkData>); SkTScopedComPtr<IWICImagingFactory> fImagingFactory; SkTScopedComPtr<IWICBitmapSource> fImageSource; diff --git a/src/ports/SkImageGeneratorCG.cpp b/src/ports/SkImageGeneratorCG.cpp index 743b218254..b1058c6c9d 100644 --- a/src/ports/SkImageGeneratorCG.cpp +++ b/src/ports/SkImageGeneratorCG.cpp @@ -29,12 +29,6 @@ static CGImageSourceRef data_to_CGImageSrc(SkData* data) { return imageSrc; } -#ifdef SK_LEGACY_NEW_FROM_ENCODED_CG -SkImageGenerator* SkImageGeneratorCG::NewFromEncodedCG(SkData* data) { - return MakeFromEncodedCG(sk_ref_sp(data)).release(); -} -#endif - std::unique_ptr<SkImageGenerator> SkImageGeneratorCG::MakeFromEncodedCG(sk_sp<SkData> data) { CGImageSourceRef imageSrc = data_to_CGImageSrc(data.get()); if (!imageSrc) { diff --git a/src/ports/SkImageGeneratorWIC.cpp b/src/ports/SkImageGeneratorWIC.cpp index 9aa89733d8..2726f886a2 100644 --- a/src/ports/SkImageGeneratorWIC.cpp +++ b/src/ports/SkImageGeneratorWIC.cpp @@ -18,7 +18,7 @@ #undef CLSID_WICImagingFactory #endif -SkImageGenerator* SkImageGeneratorWIC::NewFromEncodedWIC(SkData* data) { +std::unique_ptr<SkImageGenerator> SkImageGeneratorWIC::MakeFromEncodedWIC(sk_sp<SkData> data) { // Create Windows Imaging Component ImagingFactory. SkTScopedComPtr<IWICImagingFactory> imagingFactory; HRESULT hr = CoCreateInstance(CLSID_WICImagingFactory, nullptr, CLSCTX_INPROC_SERVER, @@ -31,7 +31,7 @@ SkImageGenerator* SkImageGeneratorWIC::NewFromEncodedWIC(SkData* data) { SkTScopedComPtr<IStream> iStream; // Note that iStream will take ownership of the new memory stream because // we set |deleteOnRelease| to true. - hr = SkIStream::CreateFromSkStream(new SkMemoryStream(sk_ref_sp(data)), true, &iStream); + hr = SkIStream::CreateFromSkStream(new SkMemoryStream(data), true, &iStream); if (FAILED(hr)) { return nullptr; } @@ -121,15 +121,17 @@ SkImageGenerator* SkImageGeneratorWIC::NewFromEncodedWIC(SkData* data) { // FIXME: If we change the implementation to handle swizzling ourselves, // we can support more output formats. SkImageInfo info = SkImageInfo::MakeS32(width, height, alphaType); - return new SkImageGeneratorWIC(info, imagingFactory.release(), imageSource.release(), data); + return std::unique_ptr<SkImageGenerator>( + new SkImageGeneratorWIC(info, imagingFactory.release(), imageSource.release(), + std::move(data))); } SkImageGeneratorWIC::SkImageGeneratorWIC(const SkImageInfo& info, - IWICImagingFactory* imagingFactory, IWICBitmapSource* imageSource, SkData* data) + IWICImagingFactory* imagingFactory, IWICBitmapSource* imageSource, sk_sp<SkData> data) : INHERITED(info) , fImagingFactory(imagingFactory) , fImageSource(imageSource) - , fData(SkRef(data)) + , fData(std::move(data)) {} sk_sp<SkData> SkImageGeneratorWIC::onRefEncodedData() { diff --git a/tests/ImageGeneratorTest.cpp b/tests/ImageGeneratorTest.cpp index 574c8e8728..0bddcd939d 100644 --- a/tests/ImageGeneratorTest.cpp +++ b/tests/ImageGeneratorTest.cpp @@ -12,6 +12,12 @@ #include "SkImageInfoPriv.h" #include "Test.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + #include "SkImageGeneratorCG.h" +#elif defined(SK_BUILD_FOR_WIN) + #include "SkImageGeneratorWIC.h" +#endif + static bool gMyFactoryWasCalled; static std::unique_ptr<SkImageGenerator> my_factory(sk_sp<SkData>) { @@ -36,6 +42,14 @@ static void test_imagegenerator_factory(skiatest::Reporter* reporter) { gen = SkImageGenerator::MakeFromEncoded(data); REPORTER_ASSERT(reporter, nullptr == gen); REPORTER_ASSERT(reporter, gMyFactoryWasCalled); + + // This just verifies that the signatures match. +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + SkGraphics::SetImageGeneratorFromEncodedDataFactory(SkImageGeneratorCG::MakeFromEncodedCG); +#elif defined(SK_BUILD_FOR_WIN) + SkGraphics::SetImageGeneratorFromEncodedDataFactory(SkImageGeneratorWIC::MakeFromEncodedWIC); +#endif + SkGraphics::SetImageGeneratorFromEncodedDataFactory(prev); } |