FFmpeg
vp8.h
Go to the documentation of this file.
1 /*
2  * VP8 compatible video decoder
3  *
4  * Copyright (C) 2010 David Conrad
5  * Copyright (C) 2010 Ronald S. Bultje
6  * Copyright (C) 2010 Fiona Glaser
7  * Copyright (C) 2012 Daniel Kang
8  *
9  * This file is part of FFmpeg.
10  *
11  * FFmpeg is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * FFmpeg is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with FFmpeg; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24  */
25 
26 #ifndef AVCODEC_VP8_H
27 #define AVCODEC_VP8_H
28 
29 #include <stdatomic.h>
30 
31 #include "libavutil/buffer.h"
32 #include "libavutil/mem_internal.h"
33 #include "libavutil/thread.h"
34 
35 #include "h264pred.h"
36 #include "threadframe.h"
37 #include "vp56.h"
38 #include "vp8dsp.h"
39 
40 #define VP8_MAX_QUANT 127
41 
42 enum dct_token {
55 
57 };
58 
59 // used to signal 4x4 intra pred in luma MBs
60 #define MODE_I4x4 4
61 
66 };
67 
69  VP8_SPLITMVMODE_16x8 = 0, ///< 2 16x8 blocks (vertical)
70  VP8_SPLITMVMODE_8x16, ///< 2 8x16 blocks (horizontal)
71  VP8_SPLITMVMODE_8x8, ///< 2x2 blocks of 8x8px each
72  VP8_SPLITMVMODE_4x4, ///< 4x4 blocks of 4x4px each
73  VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs
74 };
75 
76 typedef struct VP8FilterStrength {
77  uint8_t filter_level;
78  uint8_t inner_limit;
79  uint8_t inner_filter;
81 
82 typedef struct VP8Macroblock {
83  uint8_t skip;
84  // TODO: make it possible to check for at least (i4x4 or split_mv)
85  // in one op. are others needed?
86  uint8_t mode;
87  uint8_t ref_frame;
88  uint8_t partitioning;
90  uint8_t segment;
91  uint8_t intra4x4_pred_mode_mb[16];
94  VP56mv bmv[16];
96 
97 typedef struct VP8intmv {
98  int x;
99  int y;
100 } VP8intmv;
101 
102 typedef struct VP8mvbounds {
105 } VP8mvbounds;
106 
107 typedef struct VP8ThreadData {
108  DECLARE_ALIGNED(16, int16_t, block)[6][4][16];
109  DECLARE_ALIGNED(16, int16_t, block_dc)[16];
110  /**
111  * This is the index plus one of the last non-zero coeff
112  * for each of the blocks in the current macroblock.
113  * So, 0 -> no coeffs
114  * 1 -> dc-only (special transform)
115  * 2+-> full transform
116  */
118  /**
119  * For coeff decode, we need to know whether the above block had non-zero
120  * coefficients. This means for each macroblock, we need data for 4 luma
121  * blocks, 2 u blocks, 2 v blocks, and the luma dc block, for a total of 9
122  * per macroblock. We keep the last row in top_nnz.
123  */
124  DECLARE_ALIGNED(8, uint8_t, left_nnz)[9];
126 #if HAVE_THREADS
129 #endif
130  atomic_int thread_mb_pos; // (mb_y << 16) | (mb_x & 0xFFFF)
131  atomic_int wait_mb_pos; // What the current thread is waiting on.
132 
133 #define EDGE_EMU_LINESIZE 32
137 } VP8ThreadData;
138 
139 typedef struct VP8Frame {
142 
145 } VP8Frame;
146 
147 #define MAX_THREADS 8
148 typedef struct VP8Context {
153 
158 
159  uint16_t mb_width; /* number of horizontal MB */
160  uint16_t mb_height; /* number of vertical MB */
161  ptrdiff_t linesize;
162  ptrdiff_t uvlinesize;
163 
164  uint8_t keyframe;
165  uint8_t deblock_filter;
166  uint8_t mbskip_enabled;
167  uint8_t profile;
169 
170  int8_t sign_bias[4]; ///< one state [0, 1] per ref frame type
171  int ref_count[3];
172 
173  /**
174  * Base parameters for segmentation, i.e. per-macroblock parameters.
175  * These must be kept unchanged even if segmentation is not used for
176  * a frame, since the values persist between interframes.
177  */
178  struct {
179  uint8_t enabled;
180  uint8_t absolute_vals;
181  uint8_t update_map;
183  int8_t base_quant[4];
184  int8_t filter_level[4]; ///< base loop filter level
185  } segmentation;
186 
187  struct {
188  uint8_t simple;
189  uint8_t level;
190  uint8_t sharpness;
191  } filter;
192 
194 
197 
198  /**
199  * Macroblocks can have one of 4 different quants in a frame when
200  * segmentation is enabled.
201  * If segmentation is disabled, only the first segment's values are used.
202  */
203  struct {
204  // [0] - DC qmul [1] - AC qmul
205  int16_t luma_qmul[2];
206  int16_t luma_dc_qmul[2]; ///< luma dc-only block quant
207  int16_t chroma_qmul[2];
208  } qmat[4];
209 
210  // Raw quantisation values, which may be needed by hwaccel decode.
211  struct {
212  int yac_qi;
218  } quant;
219 
220  struct {
221  uint8_t enabled; ///< whether each mb can have a different strength based on mode/ref
222  uint8_t update;
223 
224  /**
225  * filter strength adjustment for the following macroblock modes:
226  * [0-3] - i16x16 (always zero)
227  * [4] - i4x4
228  * [5] - zero mv
229  * [6] - inter modes except for zero or split mv
230  * [7] - split mv
231  * i16x16 modes never have any adjustment
232  */
233  int8_t mode[VP8_MVMODE_SPLIT + 1];
234 
235  /**
236  * filter strength adjustment for macroblocks that reference:
237  * [0] - intra / VP56_FRAME_CURRENT
238  * [1] - VP56_FRAME_PREVIOUS
239  * [2] - VP56_FRAME_GOLDEN
240  * [3] - altref / VP56_FRAME_GOLDEN2
241  */
242  int8_t ref[4];
243  } lf_delta;
244 
245  uint8_t (*top_border)[16 + 8 + 8];
246  uint8_t (*top_nnz)[9];
247 
248  VP56RangeCoder c; ///< header context, includes mb modes and motion vectors
249 
250  /* This contains the entropy coder state at the end of the header
251  * block, in the form specified by the standard. For use by
252  * hwaccels, so that a hardware decoder has the information to
253  * start decoding at the macroblock layer.
254  */
255  struct {
256  const uint8_t *input;
257  uint32_t range;
258  uint32_t value;
261 
263 
264  /**
265  * These are all of the updatable probabilities for binary decisions.
266  * They are only implicitly reset on keyframes, making it quite likely
267  * for an interframe to desync if a prior frame's header was corrupt
268  * or missing outright!
269  */
270  struct {
271  uint8_t segmentid[3];
272  uint8_t mbskip;
273  uint8_t intra;
274  uint8_t last;
275  uint8_t golden;
276  uint8_t pred16x16[4];
277  uint8_t pred8x8c[3];
278  uint8_t token[4][16][3][NUM_DCT_TOKENS - 1];
279  uint8_t mvc[2][19];
280  uint8_t scan[16];
281  } prob[2];
282 
285  int update_last; ///< update VP56_FRAME_PREVIOUS with the current one
286  int update_golden; ///< VP56_FRAME_NONE if not updated, or which frame to copy if so
288 
289  /**
290  * If this flag is not set, all the probability updates
291  * are discarded after this frame is decoded.
292  */
294 
295  /**
296  * All coefficients are contained in separate arith coding contexts.
297  * There can be 1, 2, 4, or 8 of these after the header context.
298  */
307 
308  uint8_t colorspace; ///< 0 is the only value allowed (meaning bt601)
309  uint8_t fullrange; ///< whether we can skip clamping in dsp functions
310 
311  int num_jobs;
312  /**
313  * This describes the macroblock memory layout.
314  * 0 -> Only width+height*2+1 macroblocks allocated (frame/single thread).
315  * 1 -> Macroblocks for entire frame allocated (sliced thread).
316  */
318 
319  int (*decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr);
320  void (*filter_mb_row)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr);
321 
322  int vp7;
323 
324  /**
325  * Fade bit present in bitstream (VP7)
326  */
328 
329  /**
330  * Interframe DC prediction (VP7)
331  * [0] VP56_FRAME_PREVIOUS
332  * [1] VP56_FRAME_GOLDEN
333  */
334  uint16_t inter_dc_pred[2][2];
335 
336  /**
337  * Macroblock features (VP7)
338  */
339  uint8_t feature_enabled[4];
341  uint8_t feature_index_prob[4][3];
342  uint8_t feature_value[4][4];
343 } VP8Context;
344 
346 
348  int *got_frame, AVPacket *avpkt);
349 
351 
352 #endif /* AVCODEC_VP8_H */
VP8Context::num_jobs
int num_jobs
Definition: vp8.h:311
VP8ThreadData::thread_mb_pos
atomic_int thread_mb_pos
Definition: vp8.h:130
VP8Macroblock::intra4x4_pred_mode_mb
uint8_t intra4x4_pred_mode_mb[16]
Definition: vp8.h:91
pthread_mutex_t
_fmutex pthread_mutex_t
Definition: os2threads.h:53
VP8Context::prev_frame
VP8Frame * prev_frame
Definition: vp8.h:157
VP8Context::coeff_partition_size
int coeff_partition_size[8]
Definition: vp8.h:301
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
VP8Context::intra4x4_pred_mode_top
uint8_t * intra4x4_pred_mode_top
Definition: vp8.h:195
VP8Macroblock::partitioning
uint8_t partitioning
Definition: vp8.h:88
VP8Context::macroblocks_base
VP8Macroblock * macroblocks_base
Definition: vp8.h:283
mem_internal.h
VP8Context::top_border
uint8_t(* top_border)[16+8+8]
Definition: vp8.h:245
thread.h
DCT_2
@ DCT_2
Definition: vp8.h:45
VP8FilterStrength::inner_filter
uint8_t inner_filter
Definition: vp8.h:79
VP8Context::filter
struct VP8Context::@171 filter
DCT_4
@ DCT_4
Definition: vp8.h:47
VP8Context::thread_data
VP8ThreadData * thread_data
Definition: vp8.h:149
VP8Frame::seg_map
AVBufferRef * seg_map
Definition: vp8.h:141
VP8Context::segmentid
uint8_t segmentid[3]
Definition: vp8.h:271
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:325
VP8Context::top_nnz
uint8_t(* top_nnz)[9]
Definition: vp8.h:246
VP8Context::num_coeff_partitions
int num_coeff_partitions
All coefficients are contained in separate arith coding contexts.
Definition: vp8.h:299
inter_mvmode
inter_mvmode
Definition: vp8.h:62
VP8Context::put_pixels_tab
vp8_mc_func put_pixels_tab[3][3][3]
Definition: vp8.h:305
atomic_int
intptr_t atomic_int
Definition: stdatomic.h:55
VP8intmv::y
int y
Definition: vp8.h:99
VP8Context::uvdc_delta
int uvdc_delta
Definition: vp8.h:216
VP8mvbounds
Definition: vp8.h:102
VP8_SPLITMVMODE_4x4
@ VP8_SPLITMVMODE_4x4
4x4 blocks of 4x4px each
Definition: vp8.h:72
VP8Context::value
uint32_t value
Definition: vp8.h:258
VP8intmv
Definition: vp8.h:97
VP8FilterStrength::inner_limit
uint8_t inner_limit
Definition: vp8.h:78
VP8Context::vdsp
VideoDSPContext vdsp
Definition: vp8.h:302
VP8Context::enabled
uint8_t enabled
whether each mb can have a different strength based on mode/ref
Definition: vp8.h:179
VP8Context::framep
VP8Frame * framep[4]
Definition: vp8.h:154
VP8Context::mb_height
uint16_t mb_height
Definition: vp8.h:160
VP8_SPLITMVMODE_8x8
@ VP8_SPLITMVMODE_8x8
2x2 blocks of 8x8px each
Definition: vp8.h:71
VP8Context::hpc
H264PredContext hpc
Definition: vp8.h:304
VP8ThreadData::non_zero_count_cache
uint8_t non_zero_count_cache[6][4]
This is the index plus one of the last non-zero coeff for each of the blocks in the current macrobloc...
Definition: vp8.h:117
VP8Context::simple
uint8_t simple
Definition: vp8.h:188
VP8Context::feature_enabled
uint8_t feature_enabled[4]
Macroblock features (VP7)
Definition: vp8.h:339
VP8Context::luma_qmul
int16_t luma_qmul[2]
Definition: vp8.h:205
VP8Macroblock::bmv
VP56mv bmv[16]
Definition: vp8.h:94
ff_vp8_decode_free
int ff_vp8_decode_free(AVCodecContext *avctx)
Definition: vp8.c:2828
VP8Context::actually_webp
int actually_webp
Definition: vp8.h:152
DCT_CAT4
@ DCT_CAT4
Definition: vp8.h:51
VP8Context::coder_state_at_header_end
struct VP8Context::@175 coder_state_at_header_end
VP8_SPLITMVMODE_16x8
@ VP8_SPLITMVMODE_16x8
2 16x8 blocks (vertical)
Definition: vp8.h:69
VP8Context::deblock_filter
uint8_t deblock_filter
Definition: vp8.h:165
VP8Macroblock::skip
uint8_t skip
Definition: vp8.h:83
VP8Context::ref
int8_t ref[4]
filter strength adjustment for macroblocks that reference: [0] - intra / VP56_FRAME_CURRENT [1] - VP5...
Definition: vp8.h:242
VP8Context::mbskip
uint8_t mbskip
Definition: vp8.h:272
VP8Context::c
VP56RangeCoder c
header context, includes mb modes and motion vectors
Definition: vp8.h:248
vp8dsp.h
VP8Context::update_golden
int update_golden
VP56_FRAME_NONE if not updated, or which frame to copy if so.
Definition: vp8.h:286
VP8Context::mbskip_enabled
uint8_t mbskip_enabled
Definition: vp8.h:166
VP8Context::uvlinesize
ptrdiff_t uvlinesize
Definition: vp8.h:162
VP8ThreadData::left_nnz
uint8_t left_nnz[9]
For coeff decode, we need to know whether the above block had non-zero coefficients.
Definition: vp8.h:124
VP8Context::y2ac_delta
int y2ac_delta
Definition: vp8.h:215
DCT_CAT3
@ DCT_CAT3
Definition: vp8.h:50
VP8Context::mv_bounds
VP8mvbounds mv_bounds
Definition: vp8.h:168
VP8Context::segmentation
struct VP8Context::@170 segmentation
Base parameters for segmentation, i.e.
VP8Context::chroma_qmul
int16_t chroma_qmul[2]
Definition: vp8.h:207
VP8Frame::tf
ThreadFrame tf
Definition: vp8.h:140
VP8ThreadData::filter_strength
VP8FilterStrength * filter_strength
Definition: vp8.h:135
DCT_EOB
@ DCT_EOB
Definition: vp8.h:54
VP8Context::yac_qi
int yac_qi
Definition: vp8.h:212
inter_splitmvmode
inter_splitmvmode
Definition: vp8.h:68
VP8Context::vp8dsp
VP8DSPContext vp8dsp
Definition: vp8.h:303
VP8Context::sharpness
uint8_t sharpness
Definition: vp8.h:190
VP56mv
Definition: vp56.h:68
VP8Context::keyframe
uint8_t keyframe
Definition: vp8.h:164
VP8Context::token
uint8_t token[4][16][3][NUM_DCT_TOKENS - 1]
Definition: vp8.h:278
DCT_0
@ DCT_0
Definition: vp8.h:43
VP8_SPLITMVMODE_8x16
@ VP8_SPLITMVMODE_8x16
2 8x16 blocks (horizontal)
Definition: vp8.h:70
VP8Context::quant
struct VP8Context::@173 quant
VP8Context::avctx
AVCodecContext * avctx
Definition: vp8.h:150
dct_token
dct_token
Definition: vp8.h:42
VP8Context::curframe
VP8Frame * curframe
Definition: vp8.h:156
VP8Context::pred16x16
uint8_t pred16x16[4]
Definition: vp8.h:276
vp56.h
ff_vp8_decode_init
int ff_vp8_decode_init(AVCodecContext *avctx)
Definition: vp8.c:2895
threadframe.h
VP8Context::update_map
uint8_t update_map
Definition: vp8.h:181
DCT_CAT1
@ DCT_CAT1
Definition: vp8.h:48
VP8Context::last
uint8_t last
Definition: vp8.h:274
VP8Context::fade_present
int fade_present
Fade bit present in bitstream (VP7)
Definition: vp8.h:327
VP8Context::bit_count
int bit_count
Definition: vp8.h:259
VP8Context::filter_level
int8_t filter_level[4]
base loop filter level
Definition: vp8.h:184
VP8FilterStrength
Definition: vp8.h:76
VP8Context::update
uint8_t update
Definition: vp8.h:222
VP8Context::mvc
uint8_t mvc[2][19]
Definition: vp8.h:279
VP8Context::linesize
ptrdiff_t linesize
Definition: vp8.h:161
NUM_DCT_TOKENS
@ NUM_DCT_TOKENS
Definition: vp8.h:56
VP8Context::luma_dc_qmul
int16_t luma_dc_qmul[2]
luma dc-only block quant
Definition: vp8.h:206
VP8Frame::hwaccel_priv_buf
AVBufferRef * hwaccel_priv_buf
Definition: vp8.h:143
VP8Context::mb_width
uint16_t mb_width
Definition: vp8.h:159
VP8Context::macroblocks
VP8Macroblock * macroblocks
Definition: vp8.h:193
VP8Frame
Definition: vp8.h:139
VP8Context::frames
VP8Frame frames[5]
Definition: vp8.h:306
vp8_mc_func
void(* vp8_mc_func)(uint8_t *dst, ptrdiff_t dstStride, uint8_t *src, ptrdiff_t srcStride, int h, int x, int y)
Definition: vp8dsp.h:33
VP8Context::feature_index_prob
uint8_t feature_index_prob[4][3]
Definition: vp8.h:341
VP8Context::update_probabilities
int update_probabilities
If this flag is not set, all the probability updates are discarded after this frame is decoded.
Definition: vp8.h:293
VP8DSPContext
Definition: vp8dsp.h:37
VP8Context::intra4x4_pred_mode_left
uint8_t intra4x4_pred_mode_left[4]
Definition: vp8.h:196
VP8Context::pred8x8c
uint8_t pred8x8c[3]
Definition: vp8.h:277
VP8Context::range
uint32_t range
Definition: vp8.h:257
VP8ThreadData::thread_nr
int thread_nr
Definition: vp8.h:125
EDGE_EMU_LINESIZE
#define EDGE_EMU_LINESIZE
Definition: vp8.h:133
VP8Macroblock::mv
VP56mv mv
Definition: vp8.h:93
VP8Context::colorspace
uint8_t colorspace
0 is the only value allowed (meaning bt601)
Definition: vp8.h:308
VP8Macroblock::ref_frame
uint8_t ref_frame
Definition: vp8.h:87
VP8FilterStrength::filter_level
uint8_t filter_level
Definition: vp8.h:77
VP8Context::mb_layout
int mb_layout
This describes the macroblock memory layout.
Definition: vp8.h:317
VP8Context::update_last
int update_last
update VP56_FRAME_PREVIOUS with the current one
Definition: vp8.h:285
VP8Context::coeff_partition
VP56RangeCoder coeff_partition[8]
Definition: vp8.h:300
VP8Context::decode_mb_row_no_filter
int(* decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr)
Definition: vp8.h:319
buffer.h
DCT_1
@ DCT_1
Definition: vp8.h:44
VP8ThreadData::mv_bounds
VP8mvbounds mv_bounds
Definition: vp8.h:136
VP8ThreadData
Definition: vp8.h:107
VP8Macroblock::chroma_pred_mode
uint8_t chroma_pred_mode
Definition: vp8.h:89
VP8Context::update_feature_data
uint8_t update_feature_data
Definition: vp8.h:182
VP8Context::invisible
int invisible
Definition: vp8.h:284
MODE_I4x4
#define MODE_I4x4
Definition: vp8.h:60
VP8Context::ref_count
int ref_count[3]
Definition: vp8.h:171
VP8ThreadData::edge_emu_buffer
uint8_t edge_emu_buffer[21 *EDGE_EMU_LINESIZE]
Definition: vp8.h:134
DCT_CAT5
@ DCT_CAT5
Definition: vp8.h:52
VP8Context::absolute_vals
uint8_t absolute_vals
Definition: vp8.h:180
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:116
VP8Context::header_partition_size
int header_partition_size
Definition: vp8.h:262
VP8Context::golden
uint8_t golden
Definition: vp8.h:275
VP8Macroblock::segment
uint8_t segment
Definition: vp8.h:90
VP8ThreadData::wait_mb_pos
atomic_int wait_mb_pos
Definition: vp8.h:131
VP8Context::next_framep
VP8Frame * next_framep[4]
Definition: vp8.h:155
VP8Context::fullrange
uint8_t fullrange
whether we can skip clamping in dsp functions
Definition: vp8.h:309
VP8Context::feature_present_prob
uint8_t feature_present_prob[4]
Definition: vp8.h:340
VP8Context::y2dc_delta
int y2dc_delta
Definition: vp8.h:214
VP8Context::lf_delta
struct VP8Context::@174 lf_delta
VP8mvbounds::mv_max
VP8intmv mv_max
Definition: vp8.h:104
pthread_cond_t
Definition: os2threads.h:58
VP8Macroblock
Definition: vp8.h:82
VP8Context::filter_mb_row
void(* filter_mb_row)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr)
Definition: vp8.h:320
VP8_SPLITMVMODE_NONE
@ VP8_SPLITMVMODE_NONE
(only used in prediction) no split MVs
Definition: vp8.h:73
VP8Context::sign_bias
int8_t sign_bias[4]
one state [0, 1] per ref frame type
Definition: vp8.h:170
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
ff_vp8_decode_frame
int ff_vp8_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
Definition: vp8.c:2814
DCT_CAT2
@ DCT_CAT2
Definition: vp8.h:49
VP8Context::profile
uint8_t profile
Definition: vp8.h:167
DCT_3
@ DCT_3
Definition: vp8.h:46
h264pred.h
VP56RangeCoder
Definition: vp56.h:87
AVCodecContext
main external API structure.
Definition: avcodec.h:389
VP8Macroblock::intra4x4_pred_mode_top
uint8_t intra4x4_pred_mode_top[4]
Definition: vp8.h:92
lock
static pthread_mutex_t lock
Definition: ffjni.c:38
ThreadFrame
Definition: threadframe.h:27
mode
mode
Definition: ebur128.h:83
VP8Macroblock::mode
uint8_t mode
Definition: vp8.h:86
VP8intmv::x
int x
Definition: vp8.h:98
VP8_MVMODE_SPLIT
@ VP8_MVMODE_SPLIT
Definition: vp8.h:65
VideoDSPContext
Definition: videodsp.h:40
H264PredContext
Context for storing H.264 prediction functions.
Definition: h264pred.h:94
VP8mvbounds::mv_min
VP8intmv mv_min
Definition: vp8.h:103
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
VP8Context::feature_value
uint8_t feature_value[4][4]
Definition: vp8.h:342
VP8Context::pix_fmt
enum AVPixelFormat pix_fmt
Definition: vp8.h:151
VP8ThreadData::block
int16_t block[6][4][16]
Definition: vp8.h:108
VP8Context::intra
uint8_t intra
Definition: vp8.h:273
AVPacket
This structure stores compressed data.
Definition: packet.h:351
VP8Context::base_quant
int8_t base_quant[4]
Definition: vp8.h:183
VP8Context::ydc_delta
int ydc_delta
Definition: vp8.h:213
VP8Context::vp7
int vp7
Definition: vp8.h:322
DCT_CAT6
@ DCT_CAT6
Definition: vp8.h:53
VP8Context::input
const uint8_t * input
Definition: vp8.h:256
VP8Context
Definition: vp8.h:148
VP8Context::uvac_delta
int uvac_delta
Definition: vp8.h:217
VP8_MVMODE_ZERO
@ VP8_MVMODE_ZERO
Definition: vp8.h:63
VP8Context::inter_dc_pred
uint16_t inter_dc_pred[2][2]
Interframe DC prediction (VP7) [0] VP56_FRAME_PREVIOUS [1] VP56_FRAME_GOLDEN.
Definition: vp8.h:334
VP8Context::prob
struct VP8Context::@176 prob[2]
These are all of the updatable probabilities for binary decisions.
VP8Context::scan
uint8_t scan[16]
Definition: vp8.h:280
VP8Context::level
uint8_t level
Definition: vp8.h:189
VP8Context::update_altref
int update_altref
Definition: vp8.h:287
VP8ThreadData::block_dc
int16_t block_dc[16]
Definition: vp8.h:109
VP8Context::qmat
struct VP8Context::@172 qmat[4]
Macroblocks can have one of 4 different quants in a frame when segmentation is enabled.
int
int
Definition: ffmpeg_filter.c:153
VP8_MVMODE_MV
@ VP8_MVMODE_MV
Definition: vp8.h:64
cond
int(* cond)(enum AVPixelFormat pix_fmt)
Definition: pixdesc_query.c:28
VP8Frame::hwaccel_picture_private
void * hwaccel_picture_private
Definition: vp8.h:144