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/mem_internal.h"
32 #include "libavutil/thread.h"
33 
34 #include "h264pred.h"
35 #include "threadframe.h"
36 #include "videodsp.h"
37 #include "vp8dsp.h"
38 #include "vpx_rac.h"
39 
40 #define VP8_MAX_QUANT 127
41 
42 typedef enum {
48 } VP8FrameType;
49 
50 enum dct_token {
63 
65 };
66 
67 // used to signal 4x4 intra pred in luma MBs
68 #define MODE_I4x4 4
69 
74 };
75 
77  VP8_SPLITMVMODE_16x8 = 0, ///< 2 16x8 blocks (vertical)
78  VP8_SPLITMVMODE_8x16, ///< 2 8x16 blocks (horizontal)
79  VP8_SPLITMVMODE_8x8, ///< 2x2 blocks of 8x8px each
80  VP8_SPLITMVMODE_4x4, ///< 4x4 blocks of 4x4px each
81  VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs
82 };
83 
84 typedef struct VP8mv {
85  DECLARE_ALIGNED(4, int16_t, x);
86  int16_t y;
87 } VP8mv;
88 
89 typedef struct VP8FilterStrength {
90  uint8_t filter_level;
91  uint8_t inner_limit;
92  uint8_t inner_filter;
94 
95 typedef struct VP8Macroblock {
96  uint8_t skip;
97  // TODO: make it possible to check for at least (i4x4 or split_mv)
98  // in one op. are others needed?
99  uint8_t mode;
100  uint8_t ref_frame;
101  uint8_t partitioning;
103  uint8_t segment;
107  VP8mv bmv[16];
108 } VP8Macroblock;
109 
110 typedef struct VP8intmv {
111  int x;
112  int y;
113 } VP8intmv;
114 
115 typedef struct VP8mvbounds {
118 } VP8mvbounds;
119 
120 typedef struct VP8ThreadData {
121  DECLARE_ALIGNED(16, int16_t, block)[6][4][16];
122  DECLARE_ALIGNED(16, int16_t, block_dc)[16];
123  /**
124  * This is the index plus one of the last non-zero coeff
125  * for each of the blocks in the current macroblock.
126  * So, 0 -> no coeffs
127  * 1 -> dc-only (special transform)
128  * 2+-> full transform
129  */
131  /**
132  * For coeff decode, we need to know whether the above block had non-zero
133  * coefficients. This means for each macroblock, we need data for 4 luma
134  * blocks, 2 u blocks, 2 v blocks, and the luma dc block, for a total of 9
135  * per macroblock. We keep the last row in top_nnz.
136  */
137  DECLARE_ALIGNED(8, uint8_t, left_nnz)[9];
139 #if HAVE_THREADS
142 #endif
143  atomic_int thread_mb_pos; // (mb_y << 16) | (mb_x & 0xFFFF)
144  atomic_int wait_mb_pos; // What the current thread is waiting on.
145 
146 #define EDGE_EMU_LINESIZE 32
150 } VP8ThreadData;
151 
152 typedef struct VP8Frame {
154  uint8_t *seg_map; ///< RefStruct reference
155 
156  void *hwaccel_picture_private; ///< RefStruct reference
157 } VP8Frame;
158 
159 #define MAX_THREADS 8
160 typedef struct VP8Context {
165 
170 
171  uint16_t mb_width; /* number of horizontal MB */
172  uint16_t mb_height; /* number of vertical MB */
173  ptrdiff_t linesize;
174  ptrdiff_t uvlinesize;
175 
176  uint8_t keyframe;
177  uint8_t deblock_filter;
178  uint8_t mbskip_enabled;
179  uint8_t profile;
181 
182  int8_t sign_bias[4]; ///< one state [0, 1] per ref frame type
183  int ref_count[3];
184 
185  /**
186  * Base parameters for segmentation, i.e. per-macroblock parameters.
187  * These must be kept unchanged even if segmentation is not used for
188  * a frame, since the values persist between interframes.
189  */
190  struct {
191  uint8_t enabled;
192  uint8_t absolute_vals;
193  uint8_t update_map;
195  int8_t base_quant[4];
196  int8_t filter_level[4]; ///< base loop filter level
197  } segmentation;
198 
199  struct {
200  uint8_t simple;
201  uint8_t level;
202  uint8_t sharpness;
203  } filter;
204 
206 
209 
210  /**
211  * Macroblocks can have one of 4 different quants in a frame when
212  * segmentation is enabled.
213  * If segmentation is disabled, only the first segment's values are used.
214  */
215  struct {
216  // [0] - DC qmul [1] - AC qmul
217  int16_t luma_qmul[2];
218  int16_t luma_dc_qmul[2]; ///< luma dc-only block quant
219  int16_t chroma_qmul[2];
220  } qmat[4];
221 
222  // Raw quantisation values, which may be needed by hwaccel decode.
223  struct {
224  int yac_qi;
230  } quant;
231 
232  struct {
233  uint8_t enabled; ///< whether each mb can have a different strength based on mode/ref
234  uint8_t update;
235 
236  /**
237  * filter strength adjustment for the following macroblock modes:
238  * [0-3] - i16x16 (always zero)
239  * [4] - i4x4
240  * [5] - zero mv
241  * [6] - inter modes except for zero or split mv
242  * [7] - split mv
243  * i16x16 modes never have any adjustment
244  */
245  int8_t mode[VP8_MVMODE_SPLIT + 1];
246 
247  /**
248  * filter strength adjustment for macroblocks that reference:
249  * [0] - intra / VP8_FRAME_CURRENT
250  * [1] - VP8_FRAME_PREVIOUS
251  * [2] - VP8_FRAME_GOLDEN
252  * [3] - altref / VP8_FRAME_ALTREF
253  */
254  int8_t ref[4];
255  } lf_delta;
256 
257  uint8_t (*top_border)[16 + 8 + 8];
258  uint8_t (*top_nnz)[9];
259 
260  VPXRangeCoder c; ///< header context, includes mb modes and motion vectors
261 
262  /* This contains the entropy coder state at the end of the header
263  * block, in the form specified by the standard. For use by
264  * hwaccels, so that a hardware decoder has the information to
265  * start decoding at the macroblock layer.
266  */
267  struct {
268  const uint8_t *input;
269  uint32_t range;
270  uint32_t value;
273 
275 
276  /**
277  * These are all of the updatable probabilities for binary decisions.
278  * They are only implicitly reset on keyframes, making it quite likely
279  * for an interframe to desync if a prior frame's header was corrupt
280  * or missing outright!
281  */
282  struct {
283  uint8_t segmentid[3];
284  uint8_t mbskip;
285  uint8_t intra;
286  uint8_t last;
287  uint8_t golden;
288  uint8_t pred16x16[4];
289  uint8_t pred8x8c[3];
290  uint8_t token[4][16][3][NUM_DCT_TOKENS - 1];
291  uint8_t mvc[2][19];
292  uint8_t scan[16];
293  } prob[2];
294 
297  int update_last; ///< update VP8_FRAME_PREVIOUS with the current one
298  int update_golden; ///< VP8_FRAME_NONE if not updated, or which frame to copy if so
300 
301  /**
302  * If this flag is not set, all the probability updates
303  * are discarded after this frame is decoded.
304  */
306 
307  /**
308  * All coefficients are contained in separate arith coding contexts.
309  * There can be 1, 2, 4, or 8 of these after the header context.
310  */
319 
320  uint8_t colorspace; ///< 0 is the only value allowed (meaning bt601)
321  uint8_t fullrange; ///< whether we can skip clamping in dsp functions
322 
323  int num_jobs;
324  /**
325  * This describes the macroblock memory layout.
326  * 0 -> Only width+height*2+1 macroblocks allocated (frame/single thread).
327  * 1 -> Macroblocks for entire frame allocated (sliced thread).
328  */
330 
331  int (*decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr);
332  void (*filter_mb_row)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr);
333 
334  /**
335  * Interframe DC prediction (VP7)
336  * [0] VP8_FRAME_PREVIOUS
337  * [1] VP8_FRAME_GOLDEN
338  */
339  uint16_t inter_dc_pred[2][2];
340 
341  /**
342  * Macroblock features (VP7)
343  */
344  uint8_t feature_enabled[4];
346  uint8_t feature_index_prob[4][3];
347  uint8_t feature_value[4][4];
348 } VP8Context;
349 
351 
353  int *got_frame, AVPacket *avpkt);
354 
356 
357 #endif /* AVCODEC_VP8_H */
VP8Context::num_jobs
int num_jobs
Definition: vp8.h:323
VP8ThreadData::thread_mb_pos
atomic_int thread_mb_pos
Definition: vp8.h:143
VP8Macroblock::intra4x4_pred_mode_mb
uint8_t intra4x4_pred_mode_mb[16]
Definition: vp8.h:104
pthread_mutex_t
_fmutex pthread_mutex_t
Definition: os2threads.h:53
VP8Context::prev_frame
VP8Frame * prev_frame
Definition: vp8.h:169
VP8Context::coeff_partition_size
int coeff_partition_size[8]
Definition: vp8.h:313
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
VP8Context::intra4x4_pred_mode_top
uint8_t * intra4x4_pred_mode_top
Definition: vp8.h:207
VP8Macroblock::partitioning
uint8_t partitioning
Definition: vp8.h:101
VP8Context::macroblocks_base
VP8Macroblock * macroblocks_base
Definition: vp8.h:295
VP8_FRAME_CURRENT
@ VP8_FRAME_CURRENT
Definition: vp8.h:44
mem_internal.h
VP8Context::top_border
uint8_t(* top_border)[16+8+8]
Definition: vp8.h:257
thread.h
DCT_2
@ DCT_2
Definition: vp8.h:53
VP8Context::qmat
struct VP8Context::@200 qmat[4]
Macroblocks can have one of 4 different quants in a frame when segmentation is enabled.
VP8FilterStrength::inner_filter
uint8_t inner_filter
Definition: vp8.h:92
DCT_4
@ DCT_4
Definition: vp8.h:55
VP8Context::thread_data
VP8ThreadData * thread_data
Definition: vp8.h:161
VP8Context::segmentid
uint8_t segmentid[3]
Definition: vp8.h:283
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:375
VP8Context::top_nnz
uint8_t(* top_nnz)[9]
Definition: vp8.h:258
VP8Context::num_coeff_partitions
int num_coeff_partitions
All coefficients are contained in separate arith coding contexts.
Definition: vp8.h:311
inter_mvmode
inter_mvmode
Definition: vp8.h:70
VP8Context::put_pixels_tab
vp8_mc_func put_pixels_tab[3][3][3]
Definition: vp8.h:317
atomic_int
intptr_t atomic_int
Definition: stdatomic.h:55
VP8intmv::y
int y
Definition: vp8.h:112
VP8Context::uvdc_delta
int uvdc_delta
Definition: vp8.h:228
VP8mvbounds
Definition: vp8.h:115
VP8_SPLITMVMODE_4x4
@ VP8_SPLITMVMODE_4x4
4x4 blocks of 4x4px each
Definition: vp8.h:80
VP8_FRAME_ALTREF
@ VP8_FRAME_ALTREF
Definition: vp8.h:47
VP8Context::value
uint32_t value
Definition: vp8.h:270
VPXRangeCoder
Definition: vpx_rac.h:35
VP8intmv
Definition: vp8.h:110
VP8FilterStrength::inner_limit
uint8_t inner_limit
Definition: vp8.h:91
VP8Context::vdsp
VideoDSPContext vdsp
Definition: vp8.h:314
VP8Context::enabled
uint8_t enabled
whether each mb can have a different strength based on mode/ref
Definition: vp8.h:191
VP8Context::framep
VP8Frame * framep[4]
Definition: vp8.h:166
VP8Context::mb_height
uint16_t mb_height
Definition: vp8.h:172
VP8_SPLITMVMODE_8x8
@ VP8_SPLITMVMODE_8x8
2x2 blocks of 8x8px each
Definition: vp8.h:79
VP8Context::hpc
H264PredContext hpc
Definition: vp8.h:316
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:130
VP8Context::simple
uint8_t simple
Definition: vp8.h:200
VP8mv::y
int16_t y
Definition: vp8.h:86
VP8Context::feature_enabled
uint8_t feature_enabled[4]
Macroblock features (VP7)
Definition: vp8.h:344
VP8Context::luma_qmul
int16_t luma_qmul[2]
Definition: vp8.h:217
ff_vp8_decode_free
int ff_vp8_decode_free(AVCodecContext *avctx)
Definition: vp8.c:2860
VP8Macroblock::bmv
VP8mv bmv[16]
Definition: vp8.h:107
VP8Context::actually_webp
int actually_webp
Definition: vp8.h:164
DCT_CAT4
@ DCT_CAT4
Definition: vp8.h:59
VP8Context::coeff_partition
VPXRangeCoder coeff_partition[8]
Definition: vp8.h:312
VP8_SPLITMVMODE_16x8
@ VP8_SPLITMVMODE_16x8
2 16x8 blocks (vertical)
Definition: vp8.h:77
VP8Context::deblock_filter
uint8_t deblock_filter
Definition: vp8.h:177
VP8Macroblock::skip
uint8_t skip
Definition: vp8.h:96
VP8Context::ref
int8_t ref[4]
filter strength adjustment for macroblocks that reference: [0] - intra / VP8_FRAME_CURRENT [1] - VP8_...
Definition: vp8.h:254
VP8Context::mbskip
uint8_t mbskip
Definition: vp8.h:284
vp8dsp.h
VP8Context::update_golden
int update_golden
VP8_FRAME_NONE if not updated, or which frame to copy if so.
Definition: vp8.h:298
VP8Context::mbskip_enabled
uint8_t mbskip_enabled
Definition: vp8.h:178
VP8Context::uvlinesize
ptrdiff_t uvlinesize
Definition: vp8.h:174
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:137
VP8Context::y2ac_delta
int y2ac_delta
Definition: vp8.h:227
DCT_CAT3
@ DCT_CAT3
Definition: vp8.h:58
VP8Context::mv_bounds
VP8mvbounds mv_bounds
Definition: vp8.h:180
VP8Context::chroma_qmul
int16_t chroma_qmul[2]
Definition: vp8.h:219
VP8Frame::tf
ThreadFrame tf
Definition: vp8.h:153
VP8ThreadData::filter_strength
VP8FilterStrength * filter_strength
Definition: vp8.h:148
VP8Context::lf_delta
struct VP8Context::@202 lf_delta
DCT_EOB
@ DCT_EOB
Definition: vp8.h:62
VP8Context::yac_qi
int yac_qi
Definition: vp8.h:224
inter_splitmvmode
inter_splitmvmode
Definition: vp8.h:76
VP8Context::vp8dsp
VP8DSPContext vp8dsp
Definition: vp8.h:315
VP8Context::sharpness
uint8_t sharpness
Definition: vp8.h:202
VP8Context::keyframe
uint8_t keyframe
Definition: vp8.h:176
VP8Context::token
uint8_t token[4][16][3][NUM_DCT_TOKENS - 1]
Definition: vp8.h:290
DCT_0
@ DCT_0
Definition: vp8.h:51
VP8_SPLITMVMODE_8x16
@ VP8_SPLITMVMODE_8x16
2 8x16 blocks (horizontal)
Definition: vp8.h:78
VP8Context::avctx
AVCodecContext * avctx
Definition: vp8.h:162
dct_token
dct_token
Definition: vp8.h:50
VP8Frame::seg_map
uint8_t * seg_map
RefStruct reference.
Definition: vp8.h:154
VP8Context::curframe
VP8Frame * curframe
Definition: vp8.h:168
VP8Context::pred16x16
uint8_t pred16x16[4]
Definition: vp8.h:288
ff_vp8_decode_init
int ff_vp8_decode_init(AVCodecContext *avctx)
Definition: vp8.c:2926
threadframe.h
VP8Context::update_map
uint8_t update_map
Definition: vp8.h:193
DCT_CAT1
@ DCT_CAT1
Definition: vp8.h:56
VP8Context::last
uint8_t last
Definition: vp8.h:286
VP8Context::bit_count
int bit_count
Definition: vp8.h:271
VP8Context::filter_level
int8_t filter_level[4]
base loop filter level
Definition: vp8.h:196
VP8FilterStrength
Definition: vp8.h:89
VP8Context::update
uint8_t update
Definition: vp8.h:234
VP8Context::mvc
uint8_t mvc[2][19]
Definition: vp8.h:291
VP8Context::linesize
ptrdiff_t linesize
Definition: vp8.h:173
NUM_DCT_TOKENS
@ NUM_DCT_TOKENS
Definition: vp8.h:64
VP8Context::luma_dc_qmul
int16_t luma_dc_qmul[2]
luma dc-only block quant
Definition: vp8.h:218
VP8Context::mb_width
uint16_t mb_width
Definition: vp8.h:171
vp8_mc_func
void(* vp8_mc_func)(uint8_t *dst, ptrdiff_t dstStride, const uint8_t *src, ptrdiff_t srcStride, int h, int x, int y)
Definition: vp8dsp.h:33
VP8Context::macroblocks
VP8Macroblock * macroblocks
Definition: vp8.h:205
VP8FrameType
VP8FrameType
Definition: vp8.h:42
VP8mv
Definition: vp8.h:84
VP8Frame
Definition: vp8.h:152
VP8Context::frames
VP8Frame frames[5]
Definition: vp8.h:318
VP8Context::feature_index_prob
uint8_t feature_index_prob[4][3]
Definition: vp8.h:346
VP8_FRAME_GOLDEN
@ VP8_FRAME_GOLDEN
Definition: vp8.h:46
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:305
VP8DSPContext
Definition: vp8dsp.h:37
VP8Context::intra4x4_pred_mode_left
uint8_t intra4x4_pred_mode_left[4]
Definition: vp8.h:208
VP8Context::pred8x8c
uint8_t pred8x8c[3]
Definition: vp8.h:289
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:109
VP8Context::coder_state_at_header_end
struct VP8Context::@203 coder_state_at_header_end
VP8Context::range
uint32_t range
Definition: vp8.h:269
VP8Context::segmentation
struct VP8Context::@198 segmentation
Base parameters for segmentation, i.e.
VP8ThreadData::thread_nr
int thread_nr
Definition: vp8.h:138
EDGE_EMU_LINESIZE
#define EDGE_EMU_LINESIZE
Definition: vp8.h:146
VP8Context::colorspace
uint8_t colorspace
0 is the only value allowed (meaning bt601)
Definition: vp8.h:320
VP8Macroblock::ref_frame
uint8_t ref_frame
Definition: vp8.h:100
VP8FilterStrength::filter_level
uint8_t filter_level
Definition: vp8.h:90
VP8Context::mb_layout
int mb_layout
This describes the macroblock memory layout.
Definition: vp8.h:329
VP8Context::update_last
int update_last
update VP8_FRAME_PREVIOUS with the current one
Definition: vp8.h:297
VP8Context::filter
struct VP8Context::@199 filter
VP8Context::decode_mb_row_no_filter
int(* decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr)
Definition: vp8.h:331
DCT_1
@ DCT_1
Definition: vp8.h:52
VP8Context::c
VPXRangeCoder c
header context, includes mb modes and motion vectors
Definition: vp8.h:260
VP8ThreadData::mv_bounds
VP8mvbounds mv_bounds
Definition: vp8.h:149
VP8ThreadData
Definition: vp8.h:120
VP8Macroblock::chroma_pred_mode
uint8_t chroma_pred_mode
Definition: vp8.h:102
VP8Context::update_feature_data
uint8_t update_feature_data
Definition: vp8.h:194
VP8Context::invisible
int invisible
Definition: vp8.h:296
MODE_I4x4
#define MODE_I4x4
Definition: vp8.h:68
VP8Context::ref_count
int ref_count[3]
Definition: vp8.h:183
VP8ThreadData::edge_emu_buffer
uint8_t edge_emu_buffer[21 *EDGE_EMU_LINESIZE]
Definition: vp8.h:147
DCT_CAT5
@ DCT_CAT5
Definition: vp8.h:60
VP8Context::prob
struct VP8Context::@204 prob[2]
These are all of the updatable probabilities for binary decisions.
VP8Context::absolute_vals
uint8_t absolute_vals
Definition: vp8.h:192
VP8Context::header_partition_size
int header_partition_size
Definition: vp8.h:274
VP8Context::golden
uint8_t golden
Definition: vp8.h:287
VP8Macroblock::segment
uint8_t segment
Definition: vp8.h:103
VP8ThreadData::wait_mb_pos
atomic_int wait_mb_pos
Definition: vp8.h:144
VP8Context::next_framep
VP8Frame * next_framep[4]
Definition: vp8.h:167
vpx_rac.h
VP8Context::fullrange
uint8_t fullrange
whether we can skip clamping in dsp functions
Definition: vp8.h:321
VP8Context::feature_present_prob
uint8_t feature_present_prob[4]
Definition: vp8.h:345
VP8Context::y2dc_delta
int y2dc_delta
Definition: vp8.h:226
VP8mv::x
int16_t x
Definition: vp8.h:85
VP8mvbounds::mv_max
VP8intmv mv_max
Definition: vp8.h:117
pthread_cond_t
Definition: os2threads.h:58
VP8_FRAME_NONE
@ VP8_FRAME_NONE
Definition: vp8.h:43
VP8Macroblock
Definition: vp8.h:95
VP8Context::filter_mb_row
void(* filter_mb_row)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr)
Definition: vp8.h:332
VP8_SPLITMVMODE_NONE
@ VP8_SPLITMVMODE_NONE
(only used in prediction) no split MVs
Definition: vp8.h:81
VP8Context::sign_bias
int8_t sign_bias[4]
one state [0, 1] per ref frame type
Definition: vp8.h:182
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:2846
DCT_CAT2
@ DCT_CAT2
Definition: vp8.h:57
VP8Context::profile
uint8_t profile
Definition: vp8.h:179
DCT_3
@ DCT_3
Definition: vp8.h:54
h264pred.h
VP8Context::quant
struct VP8Context::@201 quant
VP8Macroblock::mv
VP8mv mv
Definition: vp8.h:106
AVCodecContext
main external API structure.
Definition: avcodec.h:445
VP8Macroblock::intra4x4_pred_mode_top
uint8_t intra4x4_pred_mode_top[4]
Definition: vp8.h:105
lock
static pthread_mutex_t lock
Definition: ffjni.c:39
ThreadFrame
Definition: threadframe.h:27
mode
mode
Definition: ebur128.h:83
VP8Macroblock::mode
uint8_t mode
Definition: vp8.h:99
VP8intmv::x
int x
Definition: vp8.h:111
VP8_MVMODE_SPLIT
@ VP8_MVMODE_SPLIT
Definition: vp8.h:73
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:116
VP8Context::feature_value
uint8_t feature_value[4][4]
Definition: vp8.h:347
VP8Context::pix_fmt
enum AVPixelFormat pix_fmt
Definition: vp8.h:163
VP8ThreadData::block
int16_t block[6][4][16]
Definition: vp8.h:121
VP8Context::intra
uint8_t intra
Definition: vp8.h:285
AVPacket
This structure stores compressed data.
Definition: packet.h:499
VP8Context::base_quant
int8_t base_quant[4]
Definition: vp8.h:195
VP8Context::ydc_delta
int ydc_delta
Definition: vp8.h:225
DCT_CAT6
@ DCT_CAT6
Definition: vp8.h:61
videodsp.h
VP8Context::input
const uint8_t * input
Definition: vp8.h:268
VP8Context
Definition: vp8.h:160
VP8Context::uvac_delta
int uvac_delta
Definition: vp8.h:229
VP8_MVMODE_ZERO
@ VP8_MVMODE_ZERO
Definition: vp8.h:71
VP8Context::inter_dc_pred
uint16_t inter_dc_pred[2][2]
Interframe DC prediction (VP7) [0] VP8_FRAME_PREVIOUS [1] VP8_FRAME_GOLDEN.
Definition: vp8.h:339
VP8Context::scan
uint8_t scan[16]
Definition: vp8.h:292
VP8Context::level
uint8_t level
Definition: vp8.h:201
VP8Context::update_altref
int update_altref
Definition: vp8.h:299
VP8ThreadData::block_dc
int16_t block_dc[16]
Definition: vp8.h:122
int
int
Definition: ffmpeg_filter.c:410
VP8_FRAME_PREVIOUS
@ VP8_FRAME_PREVIOUS
Definition: vp8.h:45
VP8_MVMODE_MV
@ VP8_MVMODE_MV
Definition: vp8.h:72
cond
int(* cond)(enum AVPixelFormat pix_fmt)
Definition: pixdesc_query.c:28
VP8Frame::hwaccel_picture_private
void * hwaccel_picture_private
RefStruct reference.
Definition: vp8.h:156