#ifdef HAVE_CONFIG_H
#include "src/webp/config.h"
#endif
#include <assert.h>
#include <string.h>
#include "src/utils/utils.h"
#include "src/webp/decode.h"
#include "src/webp/demux.h"
#include "src/webp/types.h"
#define NUM_CHANNELS …
#ifdef WORDS_BIGENDIAN
#define CHANNEL_SHIFT …
#else
#define CHANNEL_SHIFT(i) …
#endif
BlendRowFunc;
static void BlendPixelRowNonPremult(uint32_t* const src,
const uint32_t* const dst, int num_pixels);
static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst,
int num_pixels);
struct WebPAnimDecoder { … };
static void DefaultDecoderOptions(WebPAnimDecoderOptions* const dec_options) { … }
int WebPAnimDecoderOptionsInitInternal(WebPAnimDecoderOptions* dec_options,
int abi_version) { … }
WEBP_NODISCARD static int ApplyDecoderOptions(
const WebPAnimDecoderOptions* const dec_options,
WebPAnimDecoder* const dec) { … }
WebPAnimDecoder* WebPAnimDecoderNewInternal(
const WebPData* webp_data, const WebPAnimDecoderOptions* dec_options,
int abi_version) { … }
int WebPAnimDecoderGetInfo(const WebPAnimDecoder* dec, WebPAnimInfo* info) { … }
static int IsFullFrame(int width, int height, int canvas_width,
int canvas_height) { … }
WEBP_NODISCARD static int ZeroFillCanvas(uint8_t* buf, uint32_t canvas_width,
uint32_t canvas_height) { … }
static void ZeroFillFrameRect(uint8_t* buf, int buf_stride, int x_offset,
int y_offset, int width, int height) { … }
WEBP_NODISCARD static int CopyCanvas(const uint8_t* src, uint8_t* dst,
uint32_t width, uint32_t height) { … }
static int IsKeyFrame(const WebPIterator* const curr,
const WebPIterator* const prev,
int prev_frame_was_key_frame,
int canvas_width, int canvas_height) { … }
static uint8_t BlendChannelNonPremult(uint32_t src, uint8_t src_a,
uint32_t dst, uint8_t dst_a,
uint32_t scale, int shift) { … }
static uint32_t BlendPixelNonPremult(uint32_t src, uint32_t dst) { … }
static void BlendPixelRowNonPremult(uint32_t* const src,
const uint32_t* const dst, int num_pixels) { … }
static WEBP_INLINE uint32_t ChannelwiseMultiply(uint32_t pix, uint32_t scale) { … }
static uint32_t BlendPixelPremult(uint32_t src, uint32_t dst) { … }
static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst,
int num_pixels) { … }
static void FindBlendRangeAtRow(const WebPIterator* const src,
const WebPIterator* const dst, int canvas_y,
int* const left1, int* const width1,
int* const left2, int* const width2) { … }
int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
uint8_t** buf_ptr, int* timestamp_ptr) { … }
int WebPAnimDecoderHasMoreFrames(const WebPAnimDecoder* dec) { … }
void WebPAnimDecoderReset(WebPAnimDecoder* dec) { … }
const WebPDemuxer* WebPAnimDecoderGetDemuxer(const WebPAnimDecoder* dec) { … }
void WebPAnimDecoderDelete(WebPAnimDecoder* dec) { … }