| Index: src/ports/SkImageDecoder_CG.cpp
|
| diff --git a/src/ports/SkImageDecoder_CG.cpp b/src/ports/SkImageDecoder_CG.cpp
|
| deleted file mode 100644
|
| index ead0ed6506ff19d5c602d541a87543620bad291e..0000000000000000000000000000000000000000
|
| --- a/src/ports/SkImageDecoder_CG.cpp
|
| +++ /dev/null
|
| @@ -1,162 +0,0 @@
|
| -/*
|
| - * Copyright 2008 The Android Open Source Project
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "SkTypes.h"
|
| -#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
|
| -
|
| -#include "SkCGUtils.h"
|
| -#include "SkColorPriv.h"
|
| -#include "SkData.h"
|
| -#include "SkImageEncoder.h"
|
| -#include "SkMovie.h"
|
| -#include "SkStream.h"
|
| -#include "SkStreamPriv.h"
|
| -#include "SkTemplates.h"
|
| -#include "SkUnPreMultiply.h"
|
| -
|
| -#ifdef SK_BUILD_FOR_MAC
|
| -#include <ApplicationServices/ApplicationServices.h>
|
| -#endif
|
| -
|
| -#ifdef SK_BUILD_FOR_IOS
|
| -#include <CoreGraphics/CoreGraphics.h>
|
| -#include <ImageIO/ImageIO.h>
|
| -#include <MobileCoreServices/MobileCoreServices.h>
|
| -#endif
|
| -
|
| -/////////////////////////////////////////////////////////////////////////
|
| -
|
| -SkMovie* SkMovie::DecodeStream(SkStreamRewindable* stream) {
|
| - return nullptr;
|
| -}
|
| -
|
| -/////////////////////////////////////////////////////////////////////////
|
| -
|
| -static size_t consumer_put(void* info, const void* buffer, size_t count) {
|
| - SkWStream* stream = reinterpret_cast<SkWStream*>(info);
|
| - return stream->write(buffer, count) ? count : 0;
|
| -}
|
| -
|
| -static void consumer_release(void* info) {
|
| - // we do nothing, since by design we don't "own" the stream (i.e. info)
|
| -}
|
| -
|
| -static CGDataConsumerRef SkStreamToCGDataConsumer(SkWStream* stream) {
|
| - CGDataConsumerCallbacks procs;
|
| - procs.putBytes = consumer_put;
|
| - procs.releaseConsumer = consumer_release;
|
| - // we don't own/reference the stream, so it our consumer must not live
|
| - // longer that our caller's ownership of the stream
|
| - return CGDataConsumerCreate(stream, &procs);
|
| -}
|
| -
|
| -static CGImageDestinationRef SkStreamToImageDestination(SkWStream* stream,
|
| - CFStringRef type) {
|
| - CGDataConsumerRef consumer = SkStreamToCGDataConsumer(stream);
|
| - if (nullptr == consumer) {
|
| - return nullptr;
|
| - }
|
| - SkAutoTCallVProc<const void, CFRelease> arconsumer(consumer);
|
| -
|
| - return CGImageDestinationCreateWithDataConsumer(consumer, type, 1, nullptr);
|
| -}
|
| -
|
| -class SkImageEncoder_CG : public SkImageEncoder {
|
| -public:
|
| - SkImageEncoder_CG(Type t) : fType(t) {}
|
| -
|
| -protected:
|
| - virtual bool onEncode(SkWStream* stream, const SkBitmap& bm, int quality);
|
| -
|
| -private:
|
| - Type fType;
|
| -};
|
| -
|
| -/* Encode bitmaps via CGImageDestination. We setup a DataConsumer which writes
|
| - to our SkWStream. Since we don't reference/own the SkWStream, our consumer
|
| - must only live for the duration of the onEncode() method.
|
| - */
|
| -bool SkImageEncoder_CG::onEncode(SkWStream* stream, const SkBitmap& bm,
|
| - int quality) {
|
| - // Used for converting a bitmap to 8888.
|
| - const SkBitmap* bmPtr = &bm;
|
| - SkBitmap bitmap8888;
|
| -
|
| - CFStringRef type;
|
| - switch (fType) {
|
| - case kICO_Type:
|
| - type = kUTTypeICO;
|
| - break;
|
| - case kBMP_Type:
|
| - type = kUTTypeBMP;
|
| - break;
|
| - case kGIF_Type:
|
| - type = kUTTypeGIF;
|
| - break;
|
| - case kJPEG_Type:
|
| - type = kUTTypeJPEG;
|
| - break;
|
| - case kPNG_Type:
|
| - // PNG encoding an ARGB_4444 bitmap gives the following errors in GM:
|
| - // <Error>: CGImageDestinationAddImage image could not be converted to destination
|
| - // format.
|
| - // <Error>: CGImageDestinationFinalize image destination does not have enough images
|
| - // So instead we copy to 8888.
|
| - if (bm.colorType() == kARGB_4444_SkColorType) {
|
| - bm.copyTo(&bitmap8888, kN32_SkColorType);
|
| - bmPtr = &bitmap8888;
|
| - }
|
| - type = kUTTypePNG;
|
| - break;
|
| - default:
|
| - return false;
|
| - }
|
| -
|
| - CGImageDestinationRef dst = SkStreamToImageDestination(stream, type);
|
| - if (nullptr == dst) {
|
| - return false;
|
| - }
|
| - SkAutoTCallVProc<const void, CFRelease> ardst(dst);
|
| -
|
| - CGImageRef image = SkCreateCGImageRef(*bmPtr);
|
| - if (nullptr == image) {
|
| - return false;
|
| - }
|
| - SkAutoTCallVProc<CGImage, CGImageRelease> agimage(image);
|
| -
|
| - CGImageDestinationAddImage(dst, image, nullptr);
|
| - return CGImageDestinationFinalize(dst);
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -static SkImageEncoder* sk_imageencoder_cg_factory(SkImageEncoder::Type t) {
|
| - switch (t) {
|
| - case SkImageEncoder::kICO_Type:
|
| - case SkImageEncoder::kBMP_Type:
|
| - case SkImageEncoder::kGIF_Type:
|
| - case SkImageEncoder::kJPEG_Type:
|
| - case SkImageEncoder::kPNG_Type:
|
| - break;
|
| - default:
|
| - return nullptr;
|
| - }
|
| - return new SkImageEncoder_CG(t);
|
| -}
|
| -
|
| -static SkImageEncoder_EncodeReg gEReg(sk_imageencoder_cg_factory);
|
| -
|
| -class SkPNGImageEncoder_CG : public SkImageEncoder_CG {
|
| -public:
|
| - SkPNGImageEncoder_CG()
|
| - : SkImageEncoder_CG(kPNG_Type) {
|
| - }
|
| -};
|
| -
|
| -DEFINE_ENCODER_CREATOR(PNGImageEncoder_CG);
|
| -
|
| -#endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
|
|
|