43 #define BITSTREAM_READER_LE 
   53 #define VP8X_FLAG_ANIMATION             0x02 
   54 #define VP8X_FLAG_XMP_METADATA          0x04 
   55 #define VP8X_FLAG_EXIF_METADATA         0x08 
   56 #define VP8X_FLAG_ALPHA                 0x10 
   57 #define VP8X_FLAG_ICC                   0x20 
   59 #define MAX_PALETTE_SIZE                256 
   60 #define MAX_CACHE_BITS                  11 
   61 #define NUM_CODE_LENGTH_CODES           19 
   62 #define HUFFMAN_CODES_PER_META_CODE     5 
   63 #define NUM_LITERAL_CODES               256 
   64 #define NUM_LENGTH_CODES                24 
   65 #define NUM_DISTANCE_CODES              40 
   66 #define NUM_SHORT_DISTANCES             120 
   67 #define MAX_HUFFMAN_CODE_LENGTH         15 
   76     17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
 
   80     {  0, 1 }, {  1, 0 }, {  1, 1 }, { -1, 1 }, {  0, 2 }, {  2, 0 }, {  1, 2 }, { -1, 2 },
 
   81     {  2, 1 }, { -2, 1 }, {  2, 2 }, { -2, 2 }, {  0, 3 }, {  3, 0 }, {  1, 3 }, { -1, 3 },
 
   82     {  3, 1 }, { -3, 1 }, {  2, 3 }, { -2, 3 }, {  3, 2 }, { -3, 2 }, {  0, 4 }, {  4, 0 },
 
   83     {  1, 4 }, { -1, 4 }, {  4, 1 }, { -4, 1 }, {  3, 3 }, { -3, 3 }, {  2, 4 }, { -2, 4 },
 
   84     {  4, 2 }, { -4, 2 }, {  0, 5 }, {  3, 4 }, { -3, 4 }, {  4, 3 }, { -4, 3 }, {  5, 0 },
 
   85     {  1, 5 }, { -1, 5 }, {  5, 1 }, { -5, 1 }, {  2, 5 }, { -2, 5 }, {  5, 2 }, { -5, 2 },
 
   86     {  4, 4 }, { -4, 4 }, {  3, 5 }, { -3, 5 }, {  5, 3 }, { -5, 3 }, {  0, 6 }, {  6, 0 },
 
   87     {  1, 6 }, { -1, 6 }, {  6, 1 }, { -6, 1 }, {  2, 6 }, { -2, 6 }, {  6, 2 }, { -6, 2 },
 
   88     {  4, 5 }, { -4, 5 }, {  5, 4 }, { -5, 4 }, {  3, 6 }, { -3, 6 }, {  6, 3 }, { -6, 3 },
 
   89     {  0, 7 }, {  7, 0 }, {  1, 7 }, { -1, 7 }, {  5, 5 }, { -5, 5 }, {  7, 1 }, { -7, 1 },
 
   90     {  4, 6 }, { -4, 6 }, {  6, 4 }, { -6, 4 }, {  2, 7 }, { -2, 7 }, {  7, 2 }, { -7, 2 },
 
   91     {  3, 7 }, { -3, 7 }, {  7, 3 }, { -7, 3 }, {  5, 6 }, { -5, 6 }, {  6, 5 }, { -6, 5 },
 
   92     {  8, 0 }, {  4, 7 }, { -4, 7 }, {  7, 4 }, { -7, 4 }, {  8, 1 }, {  8, 2 }, {  6, 6 },
 
   93     { -6, 6 }, {  8, 3 }, {  5, 7 }, { -5, 7 }, {  7, 5 }, { -7, 5 }, {  8, 4 }, {  6, 7 },
 
   94     { -6, 7 }, {  7, 6 }, { -7, 6 }, {  8, 5 }, {  7, 7 }, { -7, 7 }, {  8, 6 }, {  8, 7 }
 
  210 #define GET_PIXEL(frame, x, y) \ 
  211     ((frame)->data[0] + (y) * frame->linesize[0] + 4 * (x)) 
  213 #define GET_PIXEL_COMP(frame, x, y, c) \ 
  214     (*((frame)->data[0] + (y) * frame->linesize[0] + 4 * (x) + c)) 
  230     memset(img, 0, 
sizeof(*img));
 
  285     int len = 0, sym, code = 0, ret;
 
  286     int max_code_length = 0;
 
  290     for (sym = 0; sym < alphabet_size; sym++) {
 
  291         if (code_lengths[sym] > 0) {
 
  305     for (sym = 0; sym < alphabet_size; sym++)
 
  306         max_code_length = 
FFMAX(max_code_length, code_lengths[sym]);
 
  317     for (len = 1; len <= max_code_length; len++) {
 
  318         for (sym = 0; sym < alphabet_size; sym++) {
 
  319             if (code_lengths[sym] != len)
 
  332                    code_lengths, 
sizeof(*code_lengths), 
sizeof(*code_lengths),
 
  333                    codes, 
sizeof(*codes), 
sizeof(*codes), 0);
 
  362     HuffReader code_len_hc = { { 0 }, 0, 0, { 0 } };
 
  363     int *code_lengths = 
NULL;
 
  365     int i, symbol, max_symbol, prev_code_len, ret;
 
  371     for (i = 0; i < num_codes; i++)
 
  388         if (max_symbol > alphabet_size) {
 
  390                    max_symbol, alphabet_size);
 
  395         max_symbol = alphabet_size;
 
  400     while (symbol < alphabet_size) {
 
  408             code_lengths[symbol++] = code_len;
 
  410                 prev_code_len = code_len;
 
  412             int repeat = 0, 
length = 0;
 
  432             if (symbol + repeat > alphabet_size) {
 
  434                        "invalid symbol %d + repeat %d > alphabet size %d\n",
 
  435                        symbol, repeat, alphabet_size);
 
  440                 code_lengths[symbol++] = 
length;
 
  455 #define PARSE_BLOCK_SIZE(w, h) do {                                         \ 
  456     block_bits = get_bits(&s->gb, 3) + 2;                                   \ 
  457     blocks_w   = FFALIGN((w), 1 << block_bits) >> block_bits;               \ 
  458     blocks_h   = FFALIGN((h), 1 << block_bits) >> block_bits;               \ 
  464     int ret, block_bits, 
width, blocks_w, blocks_h, x, y, max;
 
  486             int p  = p0 << 8 | p1;
 
  497     int block_bits, blocks_w, blocks_h, ret;
 
  513     int block_bits, blocks_w, blocks_h, ret;
 
  530     int width_bits, index_size, ret, x;
 
  537     else if (index_size <= 4)
 
  539     else if (index_size <= 16)
 
  556     for (x = 4; x < img->
frame->
width * 4; x++, ct++)
 
  573         group       = g0 << 8 | g1;
 
  590     int i, j, ret, x, y, 
width;
 
  592     img       = &s->
image[role];
 
  688             if (prefix_code < 4) {
 
  689                 length = prefix_code + 1;
 
  692                 int offset     = 2 + (prefix_code & 1) << extra_bits;
 
  693                 length = offset + 
get_bits(&s->
gb, extra_bits) + 1;
 
  696             if (prefix_code > 39) {
 
  698                        "distance prefix code too large: %d\n", prefix_code);
 
  701             if (prefix_code < 4) {
 
  702                 distance = prefix_code + 1;
 
  705                 int offset     = 2 + (prefix_code & 1) << extra_bits;
 
  706                 distance = offset + 
get_bits(&s->
gb, extra_bits) + 1;
 
  713                 distance = 
FFMAX(1, xi + yi * width);
 
  726             while (distance >= width) {
 
  734             ref_x = 
FFMAX(0, ref_x);
 
  735             ref_y = 
FFMAX(0, ref_y);
 
  740             for (i = 0; i < 
length; i++) {
 
  753                 if (ref_x == width) {
 
  771                        "color cache index out-of-bounds\n");
 
  825     p[0] = p_t[0] + (p_l[0] + p_tr[0] >> 1) >> 1;
 
  826     p[1] = p_t[1] + (p_l[1] + p_tr[1] >> 1) >> 1;
 
  827     p[2] = p_t[2] + (p_l[2] + p_tr[2] >> 1) >> 1;
 
  828     p[3] = p_t[3] + (p_l[3] + p_tr[3] >> 1) >> 1;
 
  835     p[0] = p_l[0] + p_tl[0] >> 1;
 
  836     p[1] = p_l[1] + p_tl[1] >> 1;
 
  837     p[2] = p_l[2] + p_tl[2] >> 1;
 
  838     p[3] = p_l[3] + p_tl[3] >> 1;
 
  845     p[0] = p_l[0] + p_t[0] >> 1;
 
  846     p[1] = p_l[1] + p_t[1] >> 1;
 
  847     p[2] = p_l[2] + p_t[2] >> 1;
 
  848     p[3] = p_l[3] + p_t[3] >> 1;
 
  855     p[0] = p_tl[0] + p_t[0] >> 1;
 
  856     p[1] = p_tl[1] + p_t[1] >> 1;
 
  857     p[2] = p_tl[2] + p_t[2] >> 1;
 
  858     p[3] = p_tl[3] + p_t[3] >> 1;
 
  865     p[0] = p_t[0] + p_tr[0] >> 1;
 
  866     p[1] = p_t[1] + p_tr[1] >> 1;
 
  867     p[2] = p_t[2] + p_tr[2] >> 1;
 
  868     p[3] = p_t[3] + p_tr[3] >> 1;
 
  875     p[0] = (p_l[0] + p_tl[0] >> 1) + (p_t[0] + p_tr[0] >> 1) >> 1;
 
  876     p[1] = (p_l[1] + p_tl[1] >> 1) + (p_t[1] + p_tr[1] >> 1) >> 1;
 
  877     p[2] = (p_l[2] + p_tl[2] >> 1) + (p_t[2] + p_tr[2] >> 1) >> 1;
 
  878     p[3] = (p_l[3] + p_tl[3] >> 1) + (p_t[3] + p_tr[3] >> 1) >> 1;
 
  886                (
FFABS(p_l[1] - p_tl[1]) - 
FFABS(p_t[1] - p_tl[1])) +
 
  887                (
FFABS(p_l[2] - p_tl[2]) - 
FFABS(p_t[2] - p_tl[2])) +
 
  888                (
FFABS(p_l[3] - p_tl[3]) - 
FFABS(p_t[3] - p_tl[3]));
 
  899     p[0] = av_clip_uint8(p_l[0] + p_t[0] - p_tl[0]);
 
  900     p[1] = av_clip_uint8(p_l[1] + p_t[1] - p_tl[1]);
 
  901     p[2] = av_clip_uint8(p_l[2] + p_t[2] - p_tl[2]);
 
  902     p[3] = av_clip_uint8(p_l[3] + p_t[3] - p_tl[3]);
 
  908     return av_clip_uint8(d + (d - c) / 2);
 
  934     uint8_t *dec, *p_l, *p_tl, *p_t, *p_tr;
 
  941     if (x == frame->
width - 1)
 
  946     inverse_predict[
m](p, p_l, p_tl, p_t, p_tr);
 
  976                        "invalid predictor mode: %d\n", m);
 
 1057                 p[2] = 
get_bits(&gb_g, pixel_bits);
 
 1075         memset(palette + size, 0, 256 * 4 - size);
 
 1102                                      int *got_frame, 
uint8_t *data_start,
 
 1103                                      unsigned int data_size, 
int is_alpha_chunk)
 
 1106     int w, 
h, ret, i, used;
 
 1108     if (!is_alpha_chunk) {
 
 1117     if (!is_alpha_chunk) {
 
 1159         if (used & (1 << transform)) {
 
 1163             goto free_and_return;
 
 1167         switch (transform) {
 
 1179             goto free_and_return;
 
 1188         goto free_and_return;
 
 1207             goto free_and_return;
 
 1230     dec = frame->
data[3] + 1;
 
 1231     for (x = 1; x < frame->
width; x++, dec++)
 
 1235     dec = frame->
data[3] + ls;
 
 1236     for (y = 1; y < frame->
height; y++, dec += ls)
 
 1237         *dec += *(dec - ls);
 
 1242         for (y = 1; y < frame->
height; y++) {
 
 1243             dec = frame->
data[3] + y * ls + 1;
 
 1244             for (x = 1; x < frame->
width; x++, dec++)
 
 1249         for (y = 1; y < frame->
height; y++) {
 
 1250             dec = frame->
data[3] + y * ls + 1;
 
 1251             for (x = 1; x < frame->
width; x++, dec++)
 
 1252                 *dec += *(dec - ls);
 
 1256         for (y = 1; y < frame->
height; y++) {
 
 1257             dec = frame->
data[3] + y * ls + 1;
 
 1258             for (x = 1; x < frame->
width; x++, dec++)
 
 1259                 dec[0] += av_clip_uint8(*(dec - 1) + *(dec - ls) - *(dec - ls - 1));
 
 1267                                   unsigned int data_size)
 
 1276         for (y = 0; y < s->
height; y++)
 
 1281         int alpha_got_frame = 0;
 
 1288                                         data_start, data_size, 1);
 
 1293         if (!alpha_got_frame) {
 
 1299         for (y = 0; y < s->
height; y++) {
 
 1302             for (x = 0; x < s->
width; x++) {
 
 1319                                   int *got_frame, 
uint8_t *data_start,
 
 1320                                   unsigned int data_size)
 
 1334     if (data_size > INT_MAX) {
 
 1340     pkt.
data = data_start;
 
 1341     pkt.
size = data_size;
 
 1360     uint32_t chunk_type, chunk_size;
 
 1374     if (bytestream2_get_le32(&gb) != 
MKTAG(
'R', 
'I', 
'F', 
'F')) {
 
 1379     chunk_size = bytestream2_get_le32(&gb);
 
 1383     if (bytestream2_get_le32(&gb) != 
MKTAG(
'W', 
'E', 
'B', 
'P')) {
 
 1389         char chunk_str[5] = { 0 };
 
 1391         chunk_type = bytestream2_get_le32(&gb);
 
 1392         chunk_size = bytestream2_get_le32(&gb);
 
 1393         if (chunk_size == UINT32_MAX)
 
 1395         chunk_size += chunk_size & 1;
 
 1400         switch (chunk_type) {
 
 1401         case MKTAG(
'V', 
'P', 
'8', 
' '):
 
 1411         case MKTAG(
'V', 
'P', 
'8', 
'L'):
 
 1422         case MKTAG(
'V', 
'P', 
'8', 
'X'):
 
 1423             vp8x_flags = bytestream2_get_byte(&gb);
 
 1425             s->
width  = bytestream2_get_le24(&gb) + 1;
 
 1426             s->
height = bytestream2_get_le24(&gb) + 1;
 
 1431         case MKTAG(
'A', 
'L', 
'P', 
'H'): {
 
 1432             int alpha_header, filter_m, compression;
 
 1436                        "ALPHA chunk present, but alpha bit not set in the " 
 1439             if (chunk_size == 0) {
 
 1443             alpha_header       = bytestream2_get_byte(&gb);
 
 1448             filter_m    = (alpha_header >> 2) & 0x03;
 
 1449             compression =  alpha_header       & 0x03;
 
 1453                        "skipping unsupported ALPHA chunk\n");
 
 1462         case MKTAG(
'E', 
'X', 
'I', 
'F'): {
 
 1473                        "EXIF chunk present, but Exif bit not set in the " 
 1478                              avpkt->
size - exif_offset);
 
 1498         case MKTAG(
'I', 
'C', 
'C', 
'P'):
 
 1499         case MKTAG(
'A', 
'N', 
'I', 
'M'):
 
 1500         case MKTAG(
'A', 
'N', 
'M', 
'F'):
 
 1501         case MKTAG(
'X', 
'M', 
'P', 
' '):
 
 1502             AV_WL32(chunk_str, chunk_type);
 
 1508             AV_WL32(chunk_str, chunk_type);
 
static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, int alphabet_size)
 
HuffReader * huffman_groups
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
 
This structure describes decoded (raw) audio or video data. 
 
ptrdiff_t const GLvoid * data
 
static void inv_predict_10(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context. 
 
static int parse_transform_color_indexing(WebPContext *s)
 
static HuffReader * get_huffman_group(WebPContext *s, ImageContext *img, int x, int y)
 
static const uint8_t code_length_code_order[NUM_CODE_LENGTH_CODES]
 
#define VP8X_FLAG_EXIF_METADATA
 
static void inv_predict_11(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
 
static int huff_reader_get_symbol(HuffReader *r, GetBitContext *gb)
 
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
 
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another. 
 
static int8_t ff_u8_to_s8(uint8_t a)
 
static const inv_predict_func inverse_predict[14]
 
static int apply_color_indexing_transform(WebPContext *s)
 
static av_always_inline uint8_t clamp_add_subtract_half(int a, int b, int c)
 
enum TransformType transforms[4]
 
uint16_t simple_symbols[2]
 
static int vp8_lossy_decode_alpha(AVCodecContext *avctx, AVFrame *p, uint8_t *data_start, unsigned int data_size)
 
#define NUM_LITERAL_CODES
 
static av_always_inline void color_cache_put(ImageContext *img, uint32_t c)
 
enum AlphaFilter alpha_filter
 
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
 
static void inv_predict_9(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
#define NUM_CODE_LENGTH_CODES
 
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) 
 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
 
Multithreading support functions. 
 
int ff_vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
#define FF_CODEC_PROPERTY_LOSSLESS
 
static void inv_predict_12(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
 
#define NUM_SHORT_DISTANCES
 
bitstream reader API header. 
 
#define AV_LOG_VERBOSE
Detailed information. 
 
static int decode_entropy_image(WebPContext *s)
 
static void inv_predict_1(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
static int apply_color_transform(WebPContext *s)
 
#define UPDATE_CACHE(name, gb)
 
int width
width and height of the video frame 
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
static int webp_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static void inv_predict_6(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
 
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
 
static const struct endianess table[]
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
const uint8_t ff_reverse[256]
 
static av_always_inline unsigned int bytestream2_get_buffer(GetByteContext *g, uint8_t *dst, unsigned int size)
 
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
 
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
 
int avpriv_exif_decode_ifd(void *logctx, GetByteContext *gbytes, int le, int depth, AVDictionary **metadata)
Recursively decodes all IFD's and adds included TAGS into the metadata dictionary. 
 
const char * name
Name of the codec implementation. 
 
static void inv_predict_3(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
static int vp8_lossy_decode_frame(AVCodecContext *avctx, AVFrame *p, int *got_frame, uint8_t *data_start, unsigned int data_size)
 
static const uint8_t offset[127][2]
 
#define CLOSE_READER(name, gb)
 
static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p, int *got_frame, uint8_t *data_start, unsigned int data_size, int is_alpha_chunk)
 
packed ARGB 8:8:8:8, 32bpp, ARGBARGB... 
 
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading. 
 
enum AlphaCompression alpha_compression
 
static void image_ctx_free(ImageContext *img)
 
#define SKIP_BITS(name, gb, num)
 
static float distance(float x, float y, int band)
 
static av_always_inline int webp_get_vlc(GetBitContext *gb, VLC_TYPE(*table)[2])
 
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
 
#define PARSE_BLOCK_SIZE(w, h)
 
enum AVPictureType pict_type
Picture type of the frame. 
 
static void inv_predict_2(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
 
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
 
#define LAST_SKIP_BITS(name, gb, num)
 
#define SHOW_UBITS(name, gb, num)
 
void(* inv_predict_func)(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome. 
 
static av_always_inline int bytestream2_tell(GetByteContext *g)
 
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
 
static const int8_t transform[32][32]
 
Libavcodec external API header. 
 
AVDictionary ** avpriv_frame_get_metadatap(AVFrame *frame)
 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
 
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext. 
 
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs. 
 
static int huff_reader_build_canonical(HuffReader *r, int *code_lengths, int alphabet_size)
 
main external API structure. 
 
#define OPEN_READER(name, gb)
 
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2. 
 
static av_always_inline uint8_t color_transform_delta(uint8_t color_pred, uint8_t color)
 
static unsigned int get_bits1(GetBitContext *s)
 
static void skip_bits(GetBitContext *s, int n)
 
static void inv_predict_4(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext. 
 
static void inv_predict_0(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
#define MAX_HUFFMAN_CODE_LENGTH
 
static const uint16_t alphabet_sizes[HUFFMAN_CODES_PER_META_CODE]
 
#define HUFFMAN_CODES_PER_META_CODE
 
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data. 
 
static void read_huffman_code_simple(WebPContext *s, HuffReader *hc)
 
av_cold int ff_vp8_decode_init(AVCodecContext *avctx)
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
av_cold int ff_vp8_decode_free(AVCodecContext *avctx)
 
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
 
static int parse_transform_predictor(WebPContext *s)
 
#define GET_PIXEL(frame, x, y)
 
static av_cold int webp_decode_close(AVCodecContext *avctx)
 
common internal api header. 
 
static int apply_subtract_green_transform(WebPContext *s)
 
#define GET_PIXEL_COMP(frame, x, y, c)
 
static void inv_predict_8(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values. 
 
static const int8_t lz77_distance_offsets[NUM_SHORT_DISTANCES][2]
 
ImageContext image[IMAGE_ROLE_NB]
 
static av_always_inline int diff(const uint32_t a, const uint32_t b)
 
static int apply_predictor_transform(WebPContext *s)
 
VLC_TYPE(* table)[2]
code, bits 
 
static int parse_transform_color(WebPContext *s)
 
int key_frame
1 -> keyframe, 0-> not 
 
static void inv_predict_7(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, int whence)
 
static int decode_entropy_coded_image(WebPContext *s, enum ImageRole role, int w, int h)
 
static void inv_predict_13(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
static void * av_mallocz_array(size_t nmemb, size_t size)
 
int ff_tdecode_header(GetByteContext *gb, int *le, int *ifd_offset)
Decodes a TIFF header from the input bytestream and sets the endianness in *le and the offset to the ...
 
static void alpha_inverse_prediction(AVFrame *frame, enum AlphaFilter m)
 
#define av_malloc_array(a, b)
 
static void inverse_prediction(AVFrame *frame, enum PredictionMode m, int x, int y)
 
#define MKTAG(a, b, c, d)
 
This structure stores compressed data. 
 
void ff_free_vlc(VLC *vlc)
 
static void inv_predict_5(uint8_t *p, const uint8_t *p_l, const uint8_t *p_tl, const uint8_t *p_t, const uint8_t *p_tr)
 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
 
#define NUM_DISTANCE_CODES