| Index: src/images/SkDecodingImageGenerator.h
|
| diff --git a/src/images/SkDecodingImageGenerator.h b/src/images/SkDecodingImageGenerator.h
|
| index 12a49d59c47e6c6b89c248a7bd88341d35633da3..dba234bcf19c400d5a005c5c5ac4efe057733267 100644
|
| --- a/src/images/SkDecodingImageGenerator.h
|
| +++ b/src/images/SkDecodingImageGenerator.h
|
| @@ -8,134 +8,113 @@
|
| #ifndef SkDecodingImageGenerator_DEFINED
|
| #define SkDecodingImageGenerator_DEFINED
|
|
|
| -#include "SkBitmap.h"
|
| +#include "SkDiscardableMemory.h"
|
| #include "SkImageGenerator.h"
|
| +#include "SkImageInfo.h"
|
|
|
| -class SkData;
|
| +class SkBitmap;
|
| class SkStreamRewindable;
|
|
|
| /**
|
| - * An implementation of SkImageGenerator that calls into
|
| - * SkImageDecoder.
|
| + * Calls into SkImageDecoder::DecodeMemoryToTarget to implement a
|
| + * SkImageGenerator
|
| */
|
| class SkDecodingImageGenerator : public SkImageGenerator {
|
| public:
|
| - virtual ~SkDecodingImageGenerator();
|
| - virtual SkData* refEncodedData() SK_OVERRIDE;
|
| - // This implementaion of getInfo() always returns true.
|
| - virtual bool getInfo(SkImageInfo* info) SK_OVERRIDE;
|
| - virtual bool getPixels(const SkImageInfo& info,
|
| - void* pixels,
|
| - size_t rowBytes) SK_OVERRIDE;
|
| - /**
|
| - * These options will be passed on to the image decoder. The
|
| - * defaults are sensible.
|
| + /*
|
| + * The constructor will take a reference to the SkData. The
|
| + * destructor will unref() it.
|
| + */
|
| + explicit SkDecodingImageGenerator(SkData* data);
|
| +
|
| + /*
|
| + * The SkData version of this constructor is preferred. If the
|
| + * stream has an underlying SkData (such as a SkMemoryStream)
|
| + * pass that in.
|
| *
|
| - * @param fSampleSize If set to > 1, tells the decoder to return a
|
| - * smaller than original bitmap, sampling 1 pixel for
|
| - * every size pixels. e.g. if sample size is set to 3,
|
| - * then the returned bitmap will be 1/3 as wide and high,
|
| - * and will contain 1/9 as many pixels as the original.
|
| - * Note: this is a hint, and the codec may choose to
|
| - * ignore this, or only approximate the sample size.
|
| - *
|
| - * @param fDitherImage Set to true if the the decoder should try to
|
| - * dither the resulting image when decoding to a smaller
|
| - * color-space. The default is true.
|
| - *
|
| - * @param fRequestedColorType If not given, then use whichever
|
| - * config the decoder wants. Else try to use this color
|
| - * type. If the decoder won't support this color type,
|
| - * SkDecodingImageGenerator::Create will return
|
| - * NULL. kIndex_8_SkColorType is not supported.
|
| - */
|
| - struct Options {
|
| - Options()
|
| - : fSampleSize(1)
|
| - , fDitherImage(true)
|
| - , fUseRequestedColorType(false)
|
| - , fRequestedColorType() { }
|
| - Options(int sampleSize, bool dither)
|
| - : fSampleSize(sampleSize)
|
| - , fDitherImage(dither)
|
| - , fUseRequestedColorType(false)
|
| - , fRequestedColorType() { }
|
| - Options(int sampleSize, bool dither, SkColorType colorType)
|
| - : fSampleSize(sampleSize)
|
| - , fDitherImage(dither)
|
| - , fUseRequestedColorType(true)
|
| - , fRequestedColorType(colorType) { }
|
| - const int fSampleSize;
|
| - const bool fDitherImage;
|
| - const bool fUseRequestedColorType;
|
| - const SkColorType fRequestedColorType;
|
| - };
|
| -
|
| - /**
|
| - * These two functions return a SkImageGenerator that calls into
|
| - * SkImageDecoder. They return NULL on failure.
|
| - *
|
| - * The SkData version of this function is preferred. If the stream
|
| - * has an underlying SkData (such as a SkMemoryStream) pass that in.
|
| - *
|
| - * This object will unref the stream when done or on failure. Since
|
| - * streams have internal state (position), the caller should not pass
|
| - * a shared stream in. Pass either a new duplicated stream in or
|
| - * transfer ownership of the stream. This factory asserts
|
| + * This object will unref the stream when done. Since streams
|
| + * have internal state (position), the caller should not pass a
|
| + * shared stream in. Pass either a new duplicated stream in or
|
| + * transfer ownership of the stream. In the latter case, be sure
|
| + * that there are no other consumers of the stream who will
|
| + * modify the stream's position. This constructor asserts
|
| * stream->unique().
|
| *
|
| * For example:
|
| * SkStreamRewindable* stream;
|
| * ...
|
| * SkImageGenerator* gen
|
| - * = SkDecodingImageGenerator::Create(
|
| - * stream->duplicate(), SkDecodingImageGenerator::Options());
|
| + * = SkNEW_ARGS(SkDecodingImageGenerator,
|
| + * (stream->duplicate()));
|
| * ...
|
| * SkDELETE(gen);
|
| - *
|
| - * @param Options (see above)
|
| - *
|
| - * @return NULL on failure, a new SkImageGenerator on success.
|
| */
|
| - static SkImageGenerator* Create(SkStreamRewindable* stream,
|
| - const Options& opt);
|
| + explicit SkDecodingImageGenerator(SkStreamRewindable* stream);
|
| +
|
| + virtual ~SkDecodingImageGenerator();
|
| +
|
| + virtual SkData* refEncodedData() SK_OVERRIDE;
|
| +
|
| + virtual bool getInfo(SkImageInfo* info) SK_OVERRIDE;
|
| +
|
| + virtual bool getPixels(const SkImageInfo& info,
|
| + void* pixels,
|
| + size_t rowBytes) SK_OVERRIDE;
|
|
|
| /**
|
| - * @param data Contains the encoded image data that will be used by
|
| - * the SkDecodingImageGenerator. Will be ref()ed by the
|
| - * SkImageGenerator constructor and and unref()ed on deletion.
|
| + * Install the SkData into the destination bitmap, using a new
|
| + * SkDiscardablePixelRef and a new SkDecodingImageGenerator.
|
| + *
|
| + * @param data Contains the encoded image data that will be used
|
| + * by the SkDecodingImageGenerator. Will be ref()ed.
|
| + *
|
| + * @param destination Upon success, this bitmap will be
|
| + * configured and have a pixelref installed.
|
| + *
|
| + * @param factory If not NULL, this object will be used as a
|
| + * source of discardable memory when decoding. If NULL, then
|
| + * SkDiscardableMemory::Create() will be called.
|
| + *
|
| + * @return true iff successful.
|
| */
|
| - static SkImageGenerator* Create(SkData* data, const Options& opt);
|
| + static bool Install(SkData* data, SkBitmap* destination,
|
| + SkDiscardableMemory::Factory* factory = NULL);
|
| + /**
|
| + * Install the stream into the destination bitmap, using a new
|
| + * SkDiscardablePixelRef and a new SkDecodingImageGenerator.
|
| + *
|
| + * The SkData version of this function is preferred. If the
|
| + * stream has an underlying SkData (such as a SkMemoryStream)
|
| + * pass that in.
|
| + *
|
| + * @param stream The source of encoded data that will be passed
|
| + * to the decoder. The installed SkDecodingImageGenerator will
|
| + * unref the stream when done. If false is returned, this
|
| + * function will perform the unref. Since streams have internal
|
| + * state (position), the caller should not pass a shared stream
|
| + * in. Pass either a new duplicated stream in or transfer
|
| + * ownership of the stream. In the latter case, be sure that
|
| + * there are no other consumers of the stream who will modify the
|
| + * stream's position. This function will fail if
|
| + * (!stream->unique()).
|
| + *
|
| + * @param destination Upon success, this bitmap will be
|
| + * configured and have a pixelref installed.
|
| + *
|
| + * @param factory If not NULL, this object will be used as a
|
| + * source of discardable memory when decoding. If NULL, then
|
| + * SkDiscardableMemory::Create() will be called.
|
| + *
|
| + * @return true iff successful.
|
| + */
|
| + static bool Install(SkStreamRewindable* stream, SkBitmap* destination,
|
| + SkDiscardableMemory::Factory* factory = NULL);
|
|
|
| private:
|
| - SkData* fData;
|
| - SkStreamRewindable* fStream;
|
| - const SkImageInfo fInfo;
|
| - const int fSampleSize;
|
| - const bool fDitherImage;
|
| - const SkBitmap::Config fRequestedConfig;
|
| - SkDecodingImageGenerator(SkData* data,
|
| - SkStreamRewindable* stream,
|
| - const SkImageInfo& info,
|
| - int sampleSize,
|
| - bool ditherImage,
|
| - SkBitmap::Config requestedConfig);
|
| - static SkImageGenerator* Create(SkData*, SkStreamRewindable*,
|
| - const Options&);
|
| - typedef SkImageGenerator INHERITED;
|
| + SkData* fData;
|
| + SkStreamRewindable* fStream;
|
| + SkImageInfo fInfo;
|
| + bool fHasInfo;
|
| + bool fDoCopyTo;
|
| };
|
| -
|
| -// // Example of most basic use case:
|
| -//
|
| -// bool install_data(SkData* data, SkBitmap* dst) {
|
| -// return SkInstallDiscardablePixelRef(
|
| -// SkDecodingImageGenerator::Create(
|
| -// data, SkDecodingImageGenerator::Options()), dst, NULL);
|
| -// }
|
| -// bool install_stream(SkStreamRewindable* stream, SkBitmap* dst) {
|
| -// return SkInstallDiscardablePixelRef(
|
| -// SkDecodingImageGenerator::Create(
|
| -// stream, SkDecodingImageGenerator::Options()), dst, NULL);
|
| -// }
|
| -
|
| #endif // SkDecodingImageGenerator_DEFINED
|
|
|