skia2/include/core/SkImageGenerator.h
commit-bot@chromium.org dd59799cf8 SkDiscardablePixelRef objects are now marked immutable.
I also specifically mentioned in the SkImageGenerator documentation
that it should always return the same information on subsequent calls
to getInfo() and getPixels().

Motivation: When a bitmap is recorded into a SkPicture, it will choose
whether to shallow- or deep-copy itself into the SkBitmapHeap based on
the immutable flag.  Failing to set it would make picture recording slow.

BUG=
R=fmalita@google.com, reed@google.com, scroggo@google.com

Author: halcanary@google.com

Review URL: https://codereview.chromium.org/99303003

git-svn-id: http://skia.googlecode.com/svn/trunk@12445 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-12-02 22:32:54 +00:00

72 lines
2.1 KiB
C++

/*
* 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