/*
 * 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.
     *
     *  @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)
     *
     *  @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
