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