FFmpeg
vp56.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /**
22  * @file
23  * VP5 and VP6 compatible video decoder (common features)
24  */
25 
26 #ifndef AVCODEC_VP56_H
27 #define AVCODEC_VP56_H
28 
29 #include "avcodec.h"
30 #include "get_bits.h"
31 #include "hpeldsp.h"
32 #include "bytestream.h"
33 #include "h264chroma.h"
34 #include "videodsp.h"
35 #include "vp3dsp.h"
36 #include "vp56dsp.h"
37 
38 typedef struct vp56_context VP56Context;
39 
40 typedef enum {
46 } VP56Frame;
47 
48 typedef enum {
49  VP56_MB_INTER_NOVEC_PF = 0, /**< Inter MB, no vector, from previous frame */
50  VP56_MB_INTRA = 1, /**< Intra MB */
51  VP56_MB_INTER_DELTA_PF = 2, /**< Inter MB, above/left vector + delta, from previous frame */
52  VP56_MB_INTER_V1_PF = 3, /**< Inter MB, first vector, from previous frame */
53  VP56_MB_INTER_V2_PF = 4, /**< Inter MB, second vector, from previous frame */
54  VP56_MB_INTER_NOVEC_GF = 5, /**< Inter MB, no vector, from golden frame */
55  VP56_MB_INTER_DELTA_GF = 6, /**< Inter MB, above/left vector + delta, from golden frame */
56  VP56_MB_INTER_4V = 7, /**< Inter MB, 4 vectors, from previous frame */
57  VP56_MB_INTER_V1_GF = 8, /**< Inter MB, first vector, from golden frame */
58  VP56_MB_INTER_V2_GF = 9, /**< Inter MB, second vector, from golden frame */
59 } VP56mb;
60 
61 typedef struct VP56Tree {
62  int8_t val;
63  int8_t prob_idx;
64 } VP56Tree;
65 
66 typedef struct VP56mv {
67  DECLARE_ALIGNED(4, int16_t, x);
68  int16_t y;
69 } VP56mv;
70 
71 #define VP56_SIZE_CHANGE 1
72 
73 typedef void (*VP56ParseVectorAdjustment)(VP56Context *s,
74  VP56mv *vect);
75 typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src,
76  int offset1, int offset2, ptrdiff_t stride,
77  VP56mv mv, int mask, int select, int luma);
78 typedef int (*VP56ParseCoeff)(VP56Context *s);
79 typedef void (*VP56DefaultModelsInit)(VP56Context *s);
80 typedef void (*VP56ParseVectorModels)(VP56Context *s);
81 typedef int (*VP56ParseCoeffModels)(VP56Context *s);
82 typedef int (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf,
83  int buf_size);
84 
85 typedef struct VP56RangeCoder {
86  int high;
87  int bits; /* stored negated (i.e. negative "bits" is a positive number of
88  bits left) in order to eliminate a negate in cache refilling */
89  const uint8_t *buffer;
90  const uint8_t *end;
91  unsigned int code_word;
94 
95 typedef struct VP56RefDc {
98  int16_t dc_coeff;
99 } VP56RefDc;
100 
101 typedef struct VP56Macroblock {
105 
106 typedef struct VP56Model {
107  uint8_t coeff_reorder[64]; /* used in vp6 only */
108  uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
109  uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
110  uint8_t vector_sig[2]; /* delta sign */
111  uint8_t vector_dct[2]; /* delta coding types */
112  uint8_t vector_pdi[2][2]; /* predefined delta init */
113  uint8_t vector_pdv[2][7]; /* predefined delta values */
114  uint8_t vector_fdv[2][8]; /* 8 bit delta value definition */
115  uint8_t coeff_dccv[2][11]; /* DC coeff value */
116  uint8_t coeff_ract[2][3][6][11]; /* Run/AC coding type and AC coeff value */
117  uint8_t coeff_acct[2][3][3][6][5];/* vp5 only AC coding type for coding group < 3 */
118  uint8_t coeff_dcct[2][36][5]; /* DC coeff coding type */
119  uint8_t coeff_runv[2][14]; /* run value (vp6 only) */
120  uint8_t mb_type[3][10][10]; /* model for decoding MB type */
121  uint8_t mb_types_stats[3][10][2];/* contextual, next MB type stats */
122 } VP56Model;
123 
124 struct vp56_context {
139 
140  /* frame info */
142  int plane_width[4];
143  int plane_height[4];
144  int mb_width; /* number of horizontal MB */
145  int mb_height; /* number of vertical MB */
146  int block_offset[6];
147 
149  uint16_t dequant_dc;
150  uint16_t dequant_ac;
151 
152  /* DC predictors management */
156  int16_t prev_dc[3][3]; /* [plan][ref_frame] */
157 
158  /* blocks / macroblock */
161  DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
163 
164  /* motion vectors */
165  VP56mv mv[6]; /* vectors for each block in MB */
168 
169  /* filtering hints */
170  int filter_header; /* used in vp6 only */
177 
178  uint8_t coeff_ctx[4][64]; /* used in vp5 only */
179  uint8_t coeff_ctx_last[4]; /* used in vp5 only */
180 
182 
183  /* upside-down flipping hints */
184  int flip; /* are we flipping ? */
185  int frbi; /* first row block index in MB */
186  int srbi; /* second row block index in MB */
187  ptrdiff_t stride[4]; /* stride for each plan */
188 
197 
198  /* for "slice" parallelism between YUV and A */
199  VP56Context *alpha_context;
200 
203 
204  /* huffman decoding */
209  VLC ract_vlc[2][3][6];
210  unsigned int nb_null[2][2]; /* number of consecutive NULL DC/AC */
211 
214 };
215 
216 
217 int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha);
218 int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s,
219  int flip, int has_alpha);
220 int ff_vp56_free(AVCodecContext *avctx);
221 int ff_vp56_free_context(VP56Context *s);
222 void ff_vp56_init_dequant(VP56Context *s, int quantizer);
223 int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
224  AVPacket *avpkt);
225 
226 
227 /**
228  * vp56 specific range coder implementation
229  */
230 
231 extern const uint8_t ff_vp56_norm_shift[256];
232 int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size);
233 
234 /**
235  * vp5689 returns 1 if the end of the stream has been reached, 0 otherwise.
236  */
238 {
239  if (c->end <= c->buffer && c->bits >= 0)
240  c->end_reached ++;
241  return c->end_reached > 10;
242 }
243 
245 {
246  int shift = ff_vp56_norm_shift[c->high];
247  int bits = c->bits;
248  unsigned int code_word = c->code_word;
249 
250  c->high <<= shift;
251  code_word <<= shift;
252  bits += shift;
253  if(bits >= 0 && c->buffer < c->end) {
254  code_word |= bytestream_get_be16(&c->buffer) << bits;
255  bits -= 16;
256  }
257  c->bits = bits;
258  return code_word;
259 }
260 
261 #if ARCH_ARM
262 #include "arm/vp56_arith.h"
263 #elif ARCH_X86
264 #include "x86/vp56_arith.h"
265 #endif
266 
267 #ifndef vp56_rac_get_prob
268 #define vp56_rac_get_prob vp56_rac_get_prob
270 {
271  unsigned int code_word = vp56_rac_renorm(c);
272  unsigned int low = 1 + (((c->high - 1) * prob) >> 8);
273  unsigned int low_shift = low << 16;
274  int bit = code_word >= low_shift;
275 
276  c->high = bit ? c->high - low : low;
277  c->code_word = bit ? code_word - low_shift : code_word;
278 
279  return bit;
280 }
281 #endif
282 
283 #ifndef vp56_rac_get_prob_branchy
284 // branchy variant, to be used where there's a branch based on the bit decoded
286 {
287  unsigned long code_word = vp56_rac_renorm(c);
288  unsigned low = 1 + (((c->high - 1) * prob) >> 8);
289  unsigned low_shift = low << 16;
290 
291  if (code_word >= low_shift) {
292  c->high -= low;
293  c->code_word = code_word - low_shift;
294  return 1;
295  }
296 
297  c->high = low;
298  c->code_word = code_word;
299  return 0;
300 }
301 #endif
302 
304 {
305  unsigned int code_word = vp56_rac_renorm(c);
306  /* equiprobable */
307  int low = (c->high + 1) >> 1;
308  unsigned int low_shift = low << 16;
309  int bit = code_word >= low_shift;
310  if (bit) {
311  c->high -= low;
312  code_word -= low_shift;
313  } else {
314  c->high = low;
315  }
316 
317  c->code_word = code_word;
318  return bit;
319 }
320 
321 // rounding is different than vp56_rac_get, is vp56_rac_get wrong?
323 {
324  return vp56_rac_get_prob(c, 128);
325 }
326 
328 {
329  int value = 0;
330 
331  while (bits--) {
332  value = (value << 1) | vp56_rac_get(c);
333  }
334 
335  return value;
336 }
337 
339 {
340  int value = 0;
341 
342  while (bits--) {
343  value = (value << 1) | vp8_rac_get(c);
344  }
345 
346  return value;
347 }
348 
349 // fixme: add 1 bit to all the calls to this?
351 {
352  int v;
353 
354  if (!vp8_rac_get(c))
355  return 0;
356 
357  v = vp8_rac_get_uint(c, bits);
358 
359  if (vp8_rac_get(c))
360  v = -v;
361 
362  return v;
363 }
364 
365 // P(7)
367 {
368  int v = vp56_rac_gets(c, 7) << 1;
369  return v + !v;
370 }
371 
373 {
374  int v = vp8_rac_get_uint(c, 7) << 1;
375  return v + !v;
376 }
377 
378 static av_always_inline
380  const VP56Tree *tree,
381  const uint8_t *probs)
382 {
383  while (tree->val > 0) {
384  if (vp56_rac_get_prob_branchy(c, probs[tree->prob_idx]))
385  tree += tree->val;
386  else
387  tree++;
388  }
389  return -tree->val;
390 }
391 
392 // how probabilities are associated with decisions is different I think
393 // well, the new scheme fits in the old but this way has one fewer branches per decision
394 static av_always_inline int vp8_rac_get_tree(VP56RangeCoder *c, const int8_t (*tree)[2],
395  const uint8_t *probs)
396 {
397  int i = 0;
398 
399  do {
400  i = tree[i][vp56_rac_get_prob(c, probs[i])];
401  } while (i > 0);
402 
403  return -i;
404 }
405 
406 // DCTextra
408 {
409  int v = 0;
410 
411  do {
412  v = (v<<1) + vp56_rac_get_prob(c, *prob++);
413  } while (*prob);
414 
415  return v;
416 }
417 
418 #endif /* AVCODEC_VP56_H */
VP56_FRAME_GOLDEN2
@ VP56_FRAME_GOLDEN2
Definition: vp56.h:45
vp56_context::h264chroma
H264ChromaContext h264chroma
Definition: vp56.h:126
vp56_rac_get
static av_always_inline int vp56_rac_get(VP56RangeCoder *c)
Definition: vp56.h:303
stride
int stride
Definition: mace.c:144
vp56_context::block_coeff
int16_t block_coeff[6][64]
Definition: vp56.h:161
ff_vp56_init_context
int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s, int flip, int has_alpha)
Definition: vp56.c:782
vp56_context::dequant_ac
uint16_t dequant_ac
Definition: vp56.h:150
vp8_rac_get_coeff
static av_always_inline int vp8_rac_get_coeff(VP56RangeCoder *c, const uint8_t *prob)
Definition: vp56.h:407
vp56_context
Definition: vp56.h:124
vp56_context::hdsp
HpelDSPContext hdsp
Definition: vp56.h:127
VP56mv::x
int16_t x
Definition: vp56.h:67
VP3DSPContext
Definition: vp3dsp.h:25
VP56_MB_INTER_DELTA_GF
@ VP56_MB_INTER_DELTA_GF
Inter MB, above/left vector + delta, from golden frame.
Definition: vp56.h:55
vp56_context::modelp
VP56Model * modelp
Definition: vp56.h:201
vp56_context::max_vector_length
int max_vector_length
Definition: vp56.h:174
vpX_rac_is_end
static av_always_inline int vpX_rac_is_end(VP56RangeCoder *c)
vp5689 returns 1 if the end of the stream has been reached, 0 otherwise.
Definition: vp56.h:237
VP56ParseHeader
int(* VP56ParseHeader)(VP56Context *s, const uint8_t *buf, int buf_size)
Definition: vp56.h:82
ff_vp56_decode_frame
int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: vp56.c:568
VP56RangeCoder::buffer
const uint8_t * buffer
Definition: vp56.h:89
VP56Model::mb_types_stats
uint8_t mb_types_stats[3][10][2]
Definition: vp56.h:121
VP56Model::coeff_acct
uint8_t coeff_acct[2][3][3][6][5]
Definition: vp56.h:117
VP56_MB_INTER_V2_GF
@ VP56_MB_INTER_V2_GF
Inter MB, second vector, from golden frame.
Definition: vp56.h:58
vp56_context::vector_candidate_pos
int vector_candidate_pos
Definition: vp56.h:167
vp56_context::stride
ptrdiff_t stride[4]
Definition: vp56.h:187
mv
static const int8_t mv[256][2]
Definition: 4xm.c:77
vp56_context::golden_frame
int golden_frame
Definition: vp56.h:141
VP56Filter
void(* VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src, int offset1, int offset2, ptrdiff_t stride, VP56mv mv, int mask, int select, int luma)
Definition: vp56.h:75
av_unused
#define av_unused
Definition: attributes.h:131
vp3dsp.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:300
vp56_context::vector_candidate
VP56mv vector_candidate[2]
Definition: vp56.h:166
VP56RefDc::not_null_dc
uint8_t not_null_dc
Definition: vp56.h:96
VP56RefDc::ref_frame
VP56Frame ref_frame
Definition: vp56.h:97
vp56_context::dequant_dc
uint16_t dequant_dc
Definition: vp56.h:149
data
const char data[16]
Definition: mxf.c:91
vp56_context::gb
GetBitContext gb
Definition: vp56.h:206
vp56_context::edge_emu_buffer_alloc
uint8_t * edge_emu_buffer_alloc
Definition: vp56.h:133
vp56_context::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: vp56.h:134
VP56Model::coeff_index_to_pos
uint8_t coeff_index_to_pos[64]
Definition: vp56.h:108
vp56_context::parse_coeff
VP56ParseCoeff parse_coeff
Definition: vp56.h:192
VP56Model::coeff_ract
uint8_t coeff_ract[2][3][6][11]
Definition: vp56.h:116
vp56_rac_gets_nn
static av_unused int vp56_rac_gets_nn(VP56RangeCoder *c, int bits)
Definition: vp56.h:366
vp8_rac_get_nn
static av_unused int vp8_rac_get_nn(VP56RangeCoder *c)
Definition: vp56.h:372
vp56_context::vp3dsp
VP3DSPContext vp3dsp
Definition: vp56.h:129
vp56_context::prev_dc
int16_t prev_dc[3][3]
Definition: vp56.h:156
VP56_MB_INTRA
@ VP56_MB_INTRA
Intra MB.
Definition: vp56.h:50
bit
#define bit(string, value)
Definition: cbs_mpeg2.c:58
VP56ParseCoeffModels
int(* VP56ParseCoeffModels)(VP56Context *s)
Definition: vp56.h:81
vp56_rac_get_prob_branchy
static av_always_inline int vp56_rac_get_prob_branchy(VP56RangeCoder *c, int prob)
Definition: vp56.h:285
VP56RefDc
Definition: vp56.h:95
VP56ParseVectorAdjustment
void(* VP56ParseVectorAdjustment)(VP56Context *s, VP56mv *vect)
Definition: vp56.h:73
vp8_rac_get
static av_always_inline int vp8_rac_get(VP56RangeCoder *c)
Definition: vp56.h:322
vp56_context::vp56dsp
VP56DSPContext vp56dsp
Definition: vp56.h:130
GetBitContext
Definition: get_bits.h:61
VP56_MB_INTER_NOVEC_PF
@ VP56_MB_INTER_NOVEC_PF
Inter MB, no vector, from previous frame.
Definition: vp56.h:49
vp56_context::frames
AVFrame * frames[4]
Definition: vp56.h:132
vp8_rac_get_sint
static av_unused int vp8_rac_get_sint(VP56RangeCoder *c, int bits)
Definition: vp56.h:350
vp56_context::use_huffman
int use_huffman
Definition: vp56.h:205
VP56Macroblock::type
uint8_t type
Definition: vp56.h:102
VP56_MB_INTER_V1_PF
@ VP56_MB_INTER_V1_PF
Inter MB, first vector, from previous frame.
Definition: vp56.h:52
VP56RefDc::dc_coeff
int16_t dc_coeff
Definition: vp56.h:98
VP56ParseCoeff
int(* VP56ParseCoeff)(VP56Context *s)
Definition: vp56.h:78
vp56_context::dccv_vlc
VLC dccv_vlc[2]
Definition: vp56.h:207
VP56Model::mb_type
uint8_t mb_type[3][10][10]
Definition: vp56.h:120
VP56RangeCoder::high
int high
Definition: vp56.h:86
mask
static const uint16_t mask[17]
Definition: lzw.c:38
vp56_context::frbi
int frbi
Definition: vp56.h:185
s
#define s(width, name)
Definition: cbs_vp9.c:257
vp56_context::ccp
VP56RangeCoder * ccp
Definition: vp56.h:137
VP56_MB_INTER_4V
@ VP56_MB_INTER_4V
Inter MB, 4 vectors, from previous frame.
Definition: vp56.h:56
vp56_context::mb_width
int mb_width
Definition: vp56.h:144
bits
uint8_t bits
Definition: vp3data.h:202
vp56_context::nb_null
unsigned int nb_null[2][2]
Definition: vp56.h:210
vp56_rac_gets
static int vp56_rac_gets(VP56RangeCoder *c, int bits)
Definition: vp56.h:327
get_bits.h
VP56mv::y
int16_t y
Definition: vp56.h:68
VP56mv
Definition: vp56.h:66
VP56Model::coeff_dccv
uint8_t coeff_dccv[2][11]
Definition: vp56.h:115
VP56Model::coeff_dcct
uint8_t coeff_dcct[2][36][5]
Definition: vp56.h:118
VP56Model::vector_sig
uint8_t vector_sig[2]
Definition: vp56.h:110
VP56Model::coeff_runv
uint8_t coeff_runv[2][14]
Definition: vp56.h:119
ff_vp56_init
int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha)
Definition: vp56.c:776
VP56DefaultModelsInit
void(* VP56DefaultModelsInit)(VP56Context *s)
Definition: vp56.h:79
vp8_rac_get_uint
static int vp8_rac_get_uint(VP56RangeCoder *c, int bits)
Definition: vp56.h:338
VP56_MB_INTER_DELTA_PF
@ VP56_MB_INTER_DELTA_PF
Inter MB, above/left vector + delta, from previous frame.
Definition: vp56.h:51
vp56_context::quantizer
int quantizer
Definition: vp56.h:148
vp56_context::plane_height
int plane_height[4]
Definition: vp56.h:143
vp8_rac_get_tree
static av_always_inline int vp8_rac_get_tree(VP56RangeCoder *c, const int8_t(*tree)[2], const uint8_t *probs)
Definition: vp56.h:394
VP56_MB_INTER_NOVEC_GF
@ VP56_MB_INTER_NOVEC_GF
Inter MB, no vector, from golden frame.
Definition: vp56.h:54
src
#define src
Definition: vp8dsp.c:254
VP56_MB_INTER_V2_PF
@ VP56_MB_INTER_V2_PF
Inter MB, second vector, from previous frame.
Definition: vp56.h:53
vp56_context::block_offset
int block_offset[6]
Definition: vp56.h:146
vp56_context::alpha_context
VP56Context * alpha_context
Definition: vp56.h:199
VP56Tree::prob_idx
int8_t prob_idx
Definition: vp56.h:63
vp56_context::c
VP56RangeCoder c
Definition: vp56.h:135
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
vp56_arith.h
vp56_context::default_models_init
VP56DefaultModelsInit default_models_init
Definition: vp56.h:193
VP56Macroblock
Definition: vp56.h:101
HpelDSPContext
Half-pel DSP context.
Definition: hpeldsp.h:45
VP56Tree
Definition: vp56.h:61
VP56DSPContext
Definition: vp56dsp.h:27
flip
static void flip(AVCodecContext *avctx, AVFrame *frame)
Definition: rawdec.c:136
vp56_context::filter_selection
int filter_selection
Definition: vp56.h:172
vp56_context::vdsp
VideoDSPContext vdsp
Definition: vp56.h:128
vp56_arith.h
h264chroma.h
vp56_context::above_blocks
VP56RefDc * above_blocks
Definition: vp56.h:153
vp56_context::filter_header
int filter_header
Definition: vp56.h:170
VP56Tree::val
int8_t val
Definition: vp56.h:62
VP56Macroblock::mv
VP56mv mv
Definition: vp56.h:103
vp56_context::sample_variance_threshold
int sample_variance_threshold
Definition: vp56.h:175
VP56_FRAME_NONE
@ VP56_FRAME_NONE
Definition: vp56.h:41
vp56_rac_get_tree
static av_always_inline int vp56_rac_get_tree(VP56RangeCoder *c, const VP56Tree *tree, const uint8_t *probs)
Definition: vp56.h:379
vp56_context::cc
VP56RangeCoder cc
Definition: vp56.h:136
VP56ParseVectorModels
void(* VP56ParseVectorModels)(VP56Context *s)
Definition: vp56.h:80
vp56_context::model
VP56Model model
Definition: vp56.h:202
ff_vp56_init_range_decoder
int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size)
Definition: vp56rac.c:40
vp56_context::discard_frame
int discard_frame
Definition: vp56.h:213
VP56Model::coeff_index_to_idct_selector
uint8_t coeff_index_to_idct_selector[64]
Definition: vp56.h:109
VP56RangeCoder::bits
int bits
Definition: vp56.h:87
vp56_context::filter_mode
int filter_mode
Definition: vp56.h:173
VP56_MB_INTER_V1_GF
@ VP56_MB_INTER_V1_GF
Inter MB, first vector, from golden frame.
Definition: vp56.h:57
VP56RangeCoder::code_word
unsigned int code_word
Definition: vp56.h:91
VP56Model::vector_pdi
uint8_t vector_pdi[2][2]
Definition: vp56.h:112
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:112
vp56_context::runv_vlc
VLC runv_vlc[2]
Definition: vp56.h:208
VP56RangeCoder::end_reached
int end_reached
Definition: vp56.h:92
vp56_context::avctx
AVCodecContext * avctx
Definition: vp56.h:125
vp56_context::ract_vlc
VLC ract_vlc[2][3][6]
Definition: vp56.h:209
vp56dsp.h
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
ff_vp56_init_dequant
void ff_vp56_init_dequant(VP56Context *s, int quantizer)
Definition: vp56.c:34
vp56_context::have_undamaged_frame
int have_undamaged_frame
Definition: vp56.h:212
VP56_FRAME_GOLDEN
@ VP56_FRAME_GOLDEN
Definition: vp56.h:44
vp56_context::parse_header
VP56ParseHeader parse_header
Definition: vp56.h:196
vp56_context::coeff_ctx
uint8_t coeff_ctx[4][64]
Definition: vp56.h:178
vp56_context::mv
VP56mv mv[6]
Definition: vp56.h:165
av_always_inline
#define av_always_inline
Definition: attributes.h:49
value
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
Definition: writing_filters.txt:86
VP56mb
VP56mb
Definition: vp56.h:48
uint8_t
uint8_t
Definition: audio_convert.c:194
vp56_context::has_alpha
int has_alpha
Definition: vp56.h:181
vp56_context::macroblocks
VP56Macroblock * macroblocks
Definition: vp56.h:160
avcodec.h
VP56Frame
VP56Frame
Definition: vp56.h:40
vp56_context::above_block_idx
int above_block_idx[6]
Definition: vp56.h:155
vp56_context::flip
int flip
Definition: vp56.h:184
vp56_context::plane_width
int plane_width[4]
Definition: vp56.h:142
prob
#define prob(name, subs,...)
Definition: cbs_vp9.c:373
vp56_context::idct_scantable
uint8_t idct_scantable[64]
Definition: vp56.h:131
VP56Model::vector_fdv
uint8_t vector_fdv[2][8]
Definition: vp56.h:114
VP56_FRAME_CURRENT
@ VP56_FRAME_CURRENT
Definition: vp56.h:42
VP56RangeCoder
Definition: vp56.h:85
AVCodecContext
main external API structure.
Definition: avcodec.h:526
vp56_context::idct_selector
int idct_selector[6]
Definition: vp56.h:162
VP56Model
Definition: vp56.h:106
VP56_FRAME_PREVIOUS
@ VP56_FRAME_PREVIOUS
Definition: vp56.h:43
VLC
Definition: vlc.h:26
vp56_context::deblock_filtering
int deblock_filtering
Definition: vp56.h:171
vp56_context::sub_version
int sub_version
Definition: vp56.h:138
VideoDSPContext
Definition: videodsp.h:41
shift
static int shift(int a, int b)
Definition: sonic.c:82
vp56_rac_get_prob
#define vp56_rac_get_prob
Definition: vp56.h:268
vp56_context::bounding_values_array
int bounding_values_array[256]
Definition: vp56.h:176
H264ChromaContext
Definition: h264chroma.h:27
ff_vp56_free_context
int ff_vp56_free_context(VP56Context *s)
Definition: vp56.c:841
AVPacket
This structure stores compressed data.
Definition: packet.h:332
videodsp.h
ff_vp56_norm_shift
const uint8_t ff_vp56_norm_shift[256]
vp56 specific range coder implementation
Definition: vp56rac.c:25
VP56Model::vector_dct
uint8_t vector_dct[2]
Definition: vp56.h:111
ff_vp56_free
int ff_vp56_free(AVCodecContext *avctx)
Definition: vp56.c:835
bytestream.h
vp56_context::parse_coeff_models
VP56ParseCoeffModels parse_coeff_models
Definition: vp56.h:195
hpeldsp.h
vp56_context::parse_vector_models
VP56ParseVectorModels parse_vector_models
Definition: vp56.h:194
VP56RangeCoder::end
const uint8_t * end
Definition: vp56.h:90
vp56_context::coeff_ctx_last
uint8_t coeff_ctx_last[4]
Definition: vp56.h:179
vp56_context::srbi
int srbi
Definition: vp56.h:186
vp56_context::vp56_coord_div
const uint8_t * vp56_coord_div
Definition: vp56.h:189
vp56_rac_renorm
static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c)
Definition: vp56.h:244
int
int
Definition: ffmpeg_filter.c:192
vp56_context::left_block
VP56RefDc left_block[4]
Definition: vp56.h:154
vp56_context::filter
VP56Filter filter
Definition: vp56.h:191
vp56_context::mb_height
int mb_height
Definition: vp56.h:145
VP56Model::vector_pdv
uint8_t vector_pdv[2][7]
Definition: vp56.h:113
vp56_context::mb_type
VP56mb mb_type
Definition: vp56.h:159
VP56Model::coeff_reorder
uint8_t coeff_reorder[64]
Definition: vp56.h:107
vp56_context::parse_vector_adjustment
VP56ParseVectorAdjustment parse_vector_adjustment
Definition: vp56.h:190