blob: c56e62a9d671642be8b1db78b187e2a22aea73fc [file] [log] [blame]
/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkImageGenerator_DEFINED
#define SkImageGenerator_DEFINED
#include "SkImageInfo.h"
class SkData;
/**
* An interface that allows a purgeable PixelRef (such as a
* SkDiscardablePixelRef) to decode and re-decode an image as needed.
*/
class SkImageGenerator {
public:
/**
* The PixelRef which takes ownership of this SkImageGenerator
* will call the image generator's destructor.
*/
virtual ~SkImageGenerator() { }
/**
* Return a ref to the encoded (i.e. compressed) representation,
* of this data.
*
* If non-NULL is returned, the caller is responsible for calling
* unref() on the data when it is finished.
*/
virtual SkData* refEncodedData() { return NULL; }
/**
* Return some information about the image, allowing the owner of
* this object to allocate pixels.
*
* Repeated calls to this function should give the same results,
* allowing the PixelRef to be immutable.
*
* @return false if anything goes wrong.
*/
virtual bool getInfo(SkImageInfo* info) = 0;
/**
* Decode into the given pixels, a block of memory of size at
* least (info.fHeight - 1) * rowBytes + (info.fWidth *
* bytesPerPixel)
*
* Repeated calls to this function should give the same results,
* allowing the PixelRef to be immutable.
*
* @param info A description of the format (config, size)
* expected by the caller. This can simply be identical
* to the info returned by getInfo().
*
* This contract also allows the caller to specify
* different output-configs, which the implementation can
* decide to support or not.
*
* @return false if anything goes wrong or if the image info is
* unsupported.
*/
virtual bool getPixels(const SkImageInfo& info,
void* pixels,
size_t rowBytes) = 0;
};
#endif // SkImageGenerator_DEFINED