| Index: third_party/libwebp/webp/decode_vp8.h
|
| ===================================================================
|
| --- third_party/libwebp/webp/decode_vp8.h (revision 0)
|
| +++ third_party/libwebp/webp/decode_vp8.h (revision 0)
|
| @@ -0,0 +1,107 @@
|
| +// Copyright 2010 Google Inc.
|
| +//
|
| +// This code is licensed under the same terms as WebM:
|
| +// Software License Agreement: http://www.webmproject.org/license/software/
|
| +// Additional IP Rights Grant: http://www.webmproject.org/license/additional/
|
| +// -----------------------------------------------------------------------------
|
| +//
|
| +// Low-level API for VP8 decoder
|
| +//
|
| +// Author: Skal (pascal.massimino@gmail.com)
|
| +
|
| +#ifndef WEBP_DECODE_WEBP_DECODE_VP8_H_
|
| +#define WEBP_DECODE_WEBP_DECODE_VP8_H_
|
| +
|
| +#include "decode.h"
|
| +
|
| +#if defined(__cplusplus) || defined(c_plusplus)
|
| +extern "C" {
|
| +#endif
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +// Lower-level API
|
| +//
|
| +// Thes functions provide fine-grained control of the decoding process.
|
| +// The call flow should resemble:
|
| +//
|
| +// VP8Io io;
|
| +// VP8InitIo(&io);
|
| +// io.data = data;
|
| +// io.data_size = size;
|
| +// /* customize io's functions (setup()/put()/teardown()) if needed. */
|
| +//
|
| +// VP8Decoder* dec = VP8New();
|
| +// bool ok = VP8Decode(dec);
|
| +// if (!ok) printf("Error: %s\n", VP8StatusMessage(dec));
|
| +// VP8Delete(dec);
|
| +// return ok;
|
| +
|
| +// Input / Output
|
| +typedef struct VP8Io VP8Io;
|
| +struct VP8Io {
|
| + // set by VP8GetHeaders()
|
| + int width, height; // picture dimensions, in pixels
|
| +
|
| + // set before calling put()
|
| + int mb_x, mb_y; // position of the current sample (in pixels)
|
| + int mb_w, mb_h; // size of the current sample (usually 16x16)
|
| + const uint8_t *y, *u, *v; // samples to copy
|
| + int y_stride; // stride for luma
|
| + int uv_stride; // stride for chroma
|
| +
|
| + void* opaque; // user data
|
| +
|
| + // called when fresh samples are available (1 block of 16x16 pixels)
|
| + void (*put)(const VP8Io* io);
|
| +
|
| + // called just before starting to decode the blocks
|
| + void (*setup)(const VP8Io* io);
|
| +
|
| + // called just after block decoding is finished
|
| + void (*teardown)(const VP8Io* io);
|
| +
|
| + // Input buffer.
|
| + uint32_t data_size;
|
| + const uint8_t* data;
|
| +};
|
| +
|
| +// Main decoding object. This is an opaque structure.
|
| +typedef struct VP8Decoder VP8Decoder;
|
| +
|
| +// Create a new decoder object.
|
| +VP8Decoder* VP8New();
|
| +
|
| +// Can be called to make sure 'io' is initialized properly.
|
| +void VP8InitIo(VP8Io* const io);
|
| +
|
| +// Start decoding a new picture. Returns true if ok.
|
| +int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io);
|
| +
|
| +// Decode a picture. Will call VP8GetHeaders() if it wasn't done already.
|
| +int VP8Decode(VP8Decoder* const dec, VP8Io* const io);
|
| +
|
| +// Return current status of the decoder:
|
| +// 0 = OK
|
| +// 1 = OUT_OF_MEMORY
|
| +// 2 = INVALID_PARAM
|
| +// 3 = BITSTREAM_ERROR
|
| +// 4 = UNSUPPORTED_FEATURE
|
| +int VP8Status(VP8Decoder* const dec);
|
| +
|
| +// return readable string corresponding to the last status.
|
| +const char* VP8StatusMessage(VP8Decoder* const dec);
|
| +
|
| +// Resets the decoder in its initial state, reclaiming memory.
|
| +// Not a mandatory call between calls to VP8Decode().
|
| +void VP8Clear(VP8Decoder* const dec);
|
| +
|
| +// Destroy the decoder object.
|
| +void VP8Delete(VP8Decoder* const dec);
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +
|
| +#if defined(__cplusplus) || defined(c_plusplus)
|
| +} // extern "C"
|
| +#endif
|
| +
|
| +#endif // WEBP_DECODE_WEBP_DECODE_VP8_H_
|
|
|