123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- #ifndef WEBP_WEBP_DEMUX_H_
- #define WEBP_WEBP_DEMUX_H_
- #include "./decode.h"
- #include "./mux_types.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define WEBP_DEMUX_ABI_VERSION 0x0107
- typedef struct WebPDemuxer WebPDemuxer;
- typedef struct WebPIterator WebPIterator;
- typedef struct WebPChunkIterator WebPChunkIterator;
- typedef struct WebPAnimInfo WebPAnimInfo;
- typedef struct WebPAnimDecoderOptions WebPAnimDecoderOptions;
- WEBP_EXTERN(int) WebPGetDemuxVersion(void);
- typedef enum WebPDemuxState {
- WEBP_DEMUX_PARSE_ERROR = -1,
- WEBP_DEMUX_PARSING_HEADER = 0,
- WEBP_DEMUX_PARSED_HEADER = 1,
-
- WEBP_DEMUX_DONE = 2
- } WebPDemuxState;
- WEBP_EXTERN(WebPDemuxer*) WebPDemuxInternal(
- const WebPData*, int, WebPDemuxState*, int);
- static WEBP_INLINE WebPDemuxer* WebPDemux(const WebPData* data) {
- return WebPDemuxInternal(data, 0, NULL, WEBP_DEMUX_ABI_VERSION);
- }
- static WEBP_INLINE WebPDemuxer* WebPDemuxPartial(
- const WebPData* data, WebPDemuxState* state) {
- return WebPDemuxInternal(data, 1, state, WEBP_DEMUX_ABI_VERSION);
- }
- WEBP_EXTERN(void) WebPDemuxDelete(WebPDemuxer* dmux);
- typedef enum WebPFormatFeature {
- WEBP_FF_FORMAT_FLAGS,
- WEBP_FF_CANVAS_WIDTH,
- WEBP_FF_CANVAS_HEIGHT,
- WEBP_FF_LOOP_COUNT,
- WEBP_FF_BACKGROUND_COLOR,
- WEBP_FF_FRAME_COUNT
-
-
-
- } WebPFormatFeature;
- WEBP_EXTERN(uint32_t) WebPDemuxGetI(
- const WebPDemuxer* dmux, WebPFormatFeature feature);
- struct WebPIterator {
- int frame_num;
- int num_frames;
- int x_offset, y_offset;
- int width, height;
- int duration;
- WebPMuxAnimDispose dispose_method;
- int complete;
-
- WebPData fragment;
-
- int has_alpha;
- WebPMuxAnimBlend blend_method;
- uint32_t pad[2];
- void* private_;
- };
- WEBP_EXTERN(int) WebPDemuxGetFrame(
- const WebPDemuxer* dmux, int frame_number, WebPIterator* iter);
- WEBP_EXTERN(int) WebPDemuxNextFrame(WebPIterator* iter);
- WEBP_EXTERN(int) WebPDemuxPrevFrame(WebPIterator* iter);
- WEBP_EXTERN(void) WebPDemuxReleaseIterator(WebPIterator* iter);
- struct WebPChunkIterator {
-
-
- int chunk_num;
- int num_chunks;
- WebPData chunk;
- uint32_t pad[6];
- void* private_;
- };
- WEBP_EXTERN(int) WebPDemuxGetChunk(const WebPDemuxer* dmux,
- const char fourcc[4], int chunk_number,
- WebPChunkIterator* iter);
- WEBP_EXTERN(int) WebPDemuxNextChunk(WebPChunkIterator* iter);
- WEBP_EXTERN(int) WebPDemuxPrevChunk(WebPChunkIterator* iter);
- WEBP_EXTERN(void) WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);
- typedef struct WebPAnimDecoder WebPAnimDecoder;
- struct WebPAnimDecoderOptions {
-
-
- WEBP_CSP_MODE color_mode;
- int use_threads;
- uint32_t padding[7];
- };
- WEBP_EXTERN(int) WebPAnimDecoderOptionsInitInternal(
- WebPAnimDecoderOptions*, int);
- static WEBP_INLINE int WebPAnimDecoderOptionsInit(
- WebPAnimDecoderOptions* dec_options) {
- return WebPAnimDecoderOptionsInitInternal(dec_options,
- WEBP_DEMUX_ABI_VERSION);
- }
- WEBP_EXTERN(WebPAnimDecoder*) WebPAnimDecoderNewInternal(
- const WebPData*, const WebPAnimDecoderOptions*, int);
- static WEBP_INLINE WebPAnimDecoder* WebPAnimDecoderNew(
- const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options) {
- return WebPAnimDecoderNewInternal(webp_data, dec_options,
- WEBP_DEMUX_ABI_VERSION);
- }
- struct WebPAnimInfo {
- uint32_t canvas_width;
- uint32_t canvas_height;
- uint32_t loop_count;
- uint32_t bgcolor;
- uint32_t frame_count;
- uint32_t pad[4];
- };
- WEBP_EXTERN(int) WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec,
- WebPAnimInfo* info);
- WEBP_EXTERN(int) WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
- uint8_t** buf, int* timestamp);
- WEBP_EXTERN(int) WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec);
- WEBP_EXTERN(void) WebPAnimDecoderReset(WebPAnimDecoder* dec);
- WEBP_EXTERN(const WebPDemuxer*) WebPAnimDecoderGetDemuxer(
- const WebPAnimDecoder* dec);
- WEBP_EXTERN(void) WebPAnimDecoderDelete(WebPAnimDecoder* dec);
- #ifdef __cplusplus
- }
- #endif
- #endif
|