FFmpeg
cavs.h
Go to the documentation of this file.
1 /*
2  * Chinese AVS video (AVS1-P2, JiZhun profile) decoder.
3  * Copyright (c) 2006 Stefan Gehrer <stefan.gehrer@gmx.de>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVCODEC_CAVS_H
23 #define AVCODEC_CAVS_H
24 
25 #include <stddef.h>
26 #include <stdint.h>
27 
28 #include "libavutil/attributes.h"
29 #include "libavutil/frame.h"
30 #include "libavutil/mem_internal.h"
31 
32 #include "avcodec.h"
33 #include "cavsdsp.h"
34 #include "blockdsp.h"
35 #include "h264chroma.h"
36 #include "get_bits.h"
37 #include "videodsp.h"
38 
39 #define SLICE_MAX_START_CODE 0x000001af
40 #define EXT_START_CODE 0x000001b5
41 #define USER_START_CODE 0x000001b2
42 #define CAVS_START_CODE 0x000001b0
43 #define PIC_I_START_CODE 0x000001b3
44 #define PIC_PB_START_CODE 0x000001b6
45 
46 #define A_AVAIL 1
47 #define B_AVAIL 2
48 #define C_AVAIL 4
49 #define D_AVAIL 8
50 #define NOT_AVAIL -1
51 #define REF_INTRA -2
52 #define REF_DIR -3
53 
54 #define ESCAPE_CODE 59
55 
56 #define FWD0 0x01
57 #define FWD1 0x02
58 #define BWD0 0x04
59 #define BWD1 0x08
60 #define SYM0 0x10
61 #define SYM1 0x20
62 #define SPLITH 0x40
63 #define SPLITV 0x80
64 
65 #define MV_BWD_OFFS 12
66 #define MV_STRIDE 4
67 
68 enum cavs_mb {
69  I_8X8 = 0,
80  B_8X8 = 29
81 };
82 
88 };
89 
99 };
100 
109 };
110 
118 };
119 
125 };
126 
148 };
149 
150 typedef struct cavs_vector {
151  int16_t x;
152  int16_t y;
153  int16_t dist;
154  int16_t ref;
155 } cavs_vector;
156 
157 struct dec_2dvlc {
158  int8_t rltab[59][3];
159  int8_t level_add[27];
160  int8_t golomb_order;
162  int8_t max_run;
163 };
164 
165 typedef struct AVSFrame {
167  int poc;
168 } AVSFrame;
169 
170 typedef struct AVSContext {
177  AVSFrame cur; ///< currently decoded frame
178  AVSFrame DPB[2]; ///< reference frames
179  int dist[2]; ///< temporal distances from current frame to ref frames
184  int width, height;
185  int stream_revision; ///<0 for samples from 2006, 1 for rm52j encoder
188  int skip_mode_flag; ///< select between skip_count or one skip_flag per MB
191  int ref_flag;
192  int mbx, mby, mbidx; ///< macroblock coordinates
193  int flags; ///< availability flags of neighbouring macroblocks
194  int stc; ///< last start code
195  uint8_t *cy, *cu, *cv; ///< current MB sample pointers
196  int left_qp;
197  uint8_t *top_qp;
198 
199  /** mv motion vector cache
200  0: D3 B2 B3 C2
201  4: A1 X0 X1 -
202  8: A3 X2 X3 -
203 
204  X are the vectors in the current macroblock (5,6,9,10)
205  A is the macroblock to the left (4,8)
206  B is the macroblock to the top (1,2)
207  C is the macroblock to the top-right (3)
208  D is the macroblock to the top-left (0)
209 
210  the same is repeated for backward motion vectors */
214 
215  /** luma pred mode cache
216  0: -- B2 B3
217  3: A1 X0 X1
218  6: A3 X2 X3 */
219  int pred_mode_Y[3*3];
221  ptrdiff_t l_stride, c_stride;
222  int luma_scan[4];
223  int qp;
224  int qp_fixed;
226  int cbp;
227  DECLARE_ALIGNED(32, int16_t, block)[64];
228  uint8_t permutated_scantable[64];
229 
230  /** intra prediction is done with un-deblocked samples
231  they are saved here before deblocking the MB */
234  uint8_t intern_border_y[26];
236 
237  void (*intra_pred_l[8])(uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride);
238  void (*intra_pred_c[7])(uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride);
239  uint8_t *col_type_base;
240 
241  /* scaling factors for MV prediction */
242  int sym_factor; ///< for scaling in symmetrical B block
243  int direct_den[2]; ///< for scaling in direct B block
244  int scale_den[2]; ///< for scaling neighbouring MVs
245 
246  uint8_t *edge_emu_buffer;
247 
249 } AVSContext;
250 
251 extern const uint8_t ff_cavs_chroma_qp[64];
252 extern const uint8_t ff_cavs_partition_flags[30];
253 extern const cavs_vector ff_cavs_intra_mv;
254 extern const cavs_vector ff_cavs_dir_mv;
255 
256 static inline void set_mvs(cavs_vector *mv, enum cavs_block size) {
257  switch(size) {
258  case BLK_16X16:
259  mv[MV_STRIDE ] = mv[0];
260  mv[MV_STRIDE+1] = mv[0];
262  case BLK_16X8:
263  mv[1] = mv[0];
264  break;
265  case BLK_8X16:
266  mv[MV_STRIDE] = mv[0];
267  break;
268  }
269 }
270 
271 void ff_cavs_filter(AVSContext *h, enum cavs_mb mb_type);
272 void ff_cavs_load_intra_pred_luma(AVSContext *h, uint8_t *top, uint8_t **left,
273  int block);
275 void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv);
276 void ff_cavs_inter(AVSContext *h, enum cavs_mb mb_type);
277 void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC,
278  enum cavs_mv_pred mode, enum cavs_block size, int ref);
283 int ff_cavs_init(AVCodecContext *avctx);
284 int ff_cavs_end (AVCodecContext *avctx);
285 
286 #endif /* AVCODEC_CAVS_H */
BLK_16X16
@ BLK_16X16
Definition: cavs.h:121
cavs_mb
cavs_mb
Definition: cavs.h:68
AVSContext::cur
AVSFrame cur
currently decoded frame
Definition: cavs.h:177
AVSContext::mbx
int mbx
Definition: cavs.h:192
ff_cavs_inter
void ff_cavs_inter(AVSContext *h, enum cavs_mb mb_type)
Definition: cavs.c:493
MV_PRED_PSKIP
@ MV_PRED_PSKIP
Definition: cavs.h:116
ff_cavs_partition_flags
const uint8_t ff_cavs_partition_flags[30]
Definition: cavsdata.c:24
blockdsp.h
ff_cavs_chroma_qp
const uint8_t ff_cavs_chroma_qp[64]
Definition: cavsdata.c:57
MV_FWD_D3
@ MV_FWD_D3
Definition: cavs.h:128
MV_BWD_C2
@ MV_BWD_C2
Definition: cavs.h:141
mem_internal.h
ff_cavs_load_intra_pred_chroma
void ff_cavs_load_intra_pred_chroma(AVSContext *h)
Definition: cavs.c:235
AVSContext::left_border_y
uint8_t left_border_y[26]
Definition: cavs.h:233
MV_BWD_D3
@ MV_BWD_D3
Definition: cavs.h:138
AVSContext::l_stride
ptrdiff_t l_stride
Definition: cavs.h:221
AVSContext::top_border_u
uint8_t * top_border_u
Definition: cavs.h:232
AVSContext::edge_emu_buffer
uint8_t * edge_emu_buffer
Definition: cavs.h:246
MV_BWD_X0
@ MV_BWD_X0
Definition: cavs.h:143
dec_2dvlc::inc_limit
int inc_limit
Definition: cavs.h:161
AVSContext::topleft_border_y
uint8_t topleft_border_y
Definition: cavs.h:235
AVSContext::qp_fixed
int qp_fixed
Definition: cavs.h:224
mv
static const int8_t mv[256][2]
Definition: 4xm.c:81
INTRA_C_VERT
@ INTRA_C_VERT
Definition: cavs.h:104
cavs_intra_chroma
cavs_intra_chroma
Definition: cavs.h:101
MV_FWD_X0
@ MV_FWD_X0
Definition: cavs.h:133
AVSContext::cy
uint8_t * cy
Definition: cavs.h:195
AVSContext::left_qp
int left_qp
Definition: cavs.h:196
mode
Definition: swscale.c:60
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:434
AVSContext::pic_structure
int pic_structure
Definition: cavs.h:187
AVSContext::profile
int profile
Definition: cavs.h:181
AVSContext::intern_border_y
uint8_t intern_border_y[26]
Definition: cavs.h:234
AVSContext::flags
int flags
availability flags of neighbouring macroblocks
Definition: cavs.h:193
AVSContext::dist
int dist[2]
temporal distances from current frame to ref frames
Definition: cavs.h:179
B_SUB_FWD
@ B_SUB_FWD
Definition: cavs.h:85
AVSContext::intra_pred_l
void(* intra_pred_l[8])(uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
Definition: cavs.h:237
BLK_8X8
@ BLK_8X8
Definition: cavs.h:124
ff_cavs_dir_mv
const cavs_vector ff_cavs_dir_mv
mark block as "no prediction from this direction" e.g.
Definition: cavsdata.c:66
cavs_block
cavs_block
Definition: cavs.h:120
INTRA_C_HORIZ
@ INTRA_C_HORIZ
Definition: cavs.h:103
BlockDSPContext
Definition: blockdsp.h:32
DPB
Decoded Picture Buffer (DPB).
Definition: vaapi_h264.c:82
MV_STRIDE
#define MV_STRIDE
Definition: cavs.h:66
AVSContext::ref_flag
int ref_flag
Definition: cavs.h:191
AVSContext::col_mv
cavs_vector * col_mv
Definition: cavs.h:213
dec_2dvlc::rltab
int8_t rltab[59][3]
Definition: cavs.h:158
AVSContext::mby
int mby
Definition: cavs.h:192
AVSContext::mb_height
int mb_height
Definition: cavs.h:183
MV_BWD_X3
@ MV_BWD_X3
Definition: cavs.h:147
ff_cavs_init_top_lines
int ff_cavs_init_top_lines(AVSContext *h)
some predictions require data from the top-neighbouring macroblock.
Definition: cavs.c:758
set_mvs
static void set_mvs(cavs_vector *mv, enum cavs_block size)
Definition: cavs.h:256
ff_cavs_intra_mv
const cavs_vector ff_cavs_intra_mv
mark block as using intra prediction
Definition: cavsdata.c:69
AVSContext::alpha_offset
int alpha_offset
Definition: cavs.h:190
MV_FWD_A3
@ MV_FWD_A3
Definition: cavs.h:135
CAVSDSPContext
Definition: cavsdsp.h:30
INTRA_C_PLANE
@ INTRA_C_PLANE
Definition: cavs.h:105
cavs_vector::x
int16_t x
Definition: cavs.h:151
GetBitContext
Definition: get_bits.h:109
MV_BWD_A1
@ MV_BWD_A1
Definition: cavs.h:142
AVSContext::topleft_border_u
uint8_t topleft_border_u
Definition: cavs.h:235
AVSContext::topleft_border_v
uint8_t topleft_border_v
Definition: cavs.h:235
cavs_vector::dist
int16_t dist
Definition: cavs.h:153
P_16X8
@ P_16X8
Definition: cavs.h:72
ff_cavs_modify_mb_i
void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv)
Definition: cavs.c:362
AVSContext::progressive
int progressive
Definition: cavs.h:186
AVSContext::beta_offset
int beta_offset
Definition: cavs.h:190
I_8X8
@ I_8X8
Definition: cavs.h:69
AVSContext::avctx
AVCodecContext * avctx
Definition: cavs.h:171
MV_BWD_X1
@ MV_BWD_X1
Definition: cavs.h:144
ff_cavs_filter
void ff_cavs_filter(AVSContext *h, enum cavs_mb mb_type)
in-loop deblocking filter for a single macroblock
Definition: cavs.c:108
AVSContext::permutated_scantable
uint8_t permutated_scantable[64]
Definition: cavs.h:228
MV_BWD_X2
@ MV_BWD_X2
Definition: cavs.h:146
AVSContext::direct_den
int direct_den[2]
for scaling in direct B block
Definition: cavs.h:243
ff_cavs_init_pic
int ff_cavs_init_pic(AVSContext *h)
Definition: cavs.c:722
AVSContext::low_delay
int low_delay
Definition: cavs.h:180
MV_PRED_BSKIP
@ MV_PRED_BSKIP
Definition: cavs.h:117
BLK_16X8
@ BLK_16X8
Definition: cavs.h:122
AVSContext::c_stride
ptrdiff_t c_stride
Definition: cavs.h:221
INTRA_L_DOWN_RIGHT
@ INTRA_L_DOWN_RIGHT
Definition: cavs.h:95
AVSContext::top_qp
uint8_t * top_qp
Definition: cavs.h:197
AVSContext::cv
uint8_t * cv
current MB sample pointers
Definition: cavs.h:195
AVSContext::scale_den
int scale_den[2]
for scaling neighbouring MVs
Definition: cavs.h:244
get_bits.h
MV_PRED_TOPRIGHT
@ MV_PRED_TOPRIGHT
Definition: cavs.h:115
ff_cavs_mv
void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC, enum cavs_mv_pred mode, enum cavs_block size, int ref)
Definition: cavs.c:574
MV_FWD_B3
@ MV_FWD_B3
Definition: cavs.h:130
MV_BWD_OFFS
#define MV_BWD_OFFS
Definition: cavs.h:65
av_fallthrough
#define av_fallthrough
Definition: attributes.h:67
B_SUB_BWD
@ B_SUB_BWD
Definition: cavs.h:86
MV_BWD_B2
@ MV_BWD_B2
Definition: cavs.h:139
INTRA_L_LP
@ INTRA_L_LP
Definition: cavs.h:93
AVSContext::mb_width
int mb_width
Definition: cavs.h:183
AVSContext::loop_filter_disable
int loop_filter_disable
Definition: cavs.h:189
dec_2dvlc::golomb_order
int8_t golomb_order
Definition: cavs.h:160
ff_cavs_load_intra_pred_luma
void ff_cavs_load_intra_pred_luma(AVSContext *h, uint8_t *top, uint8_t **left, int block)
Definition: cavs.c:184
AVSContext::cdsp
CAVSDSPContext cdsp
Definition: cavs.h:175
P_16X16
@ P_16X16
Definition: cavs.h:71
INTRA_C_DC_128
@ INTRA_C_DC_128
Definition: cavs.h:108
INTRA_L_DC_128
@ INTRA_L_DC_128
Definition: cavs.h:98
AVSContext::width
int width
Definition: cavs.h:184
AVSContext::top_border_y
uint8_t * top_border_y
intra prediction is done with un-deblocked samples they are saved here before deblocking the MB
Definition: cavs.h:232
AVSContext::block
int16_t block[64]
Definition: cavs.h:227
AVSContext::top_pred_Y
int * top_pred_Y
Definition: cavs.h:220
MV_BWD_A3
@ MV_BWD_A3
Definition: cavs.h:145
cavs_mv_loc
cavs_mv_loc
Definition: cavs.h:127
INTRA_C_LP
@ INTRA_C_LP
Definition: cavs.h:102
INTRA_L_VERT
@ INTRA_L_VERT
Definition: cavs.h:91
AVSContext::got_keyframe
int got_keyframe
Definition: cavs.h:248
AVSContext::pic_qp_fixed
int pic_qp_fixed
Definition: cavs.h:225
AVSContext::stc
int stc
last start code
Definition: cavs.h:194
AVSContext::level
int level
Definition: cavs.h:181
B_SYM_16X16
@ B_SYM_16X16
Definition: cavs.h:79
dec_2dvlc::level_add
int8_t level_add[27]
Definition: cavs.h:159
AVSFrame::poc
int poc
Definition: cavs.h:167
AVSContext::luma_scan
int luma_scan[4]
Definition: cavs.h:222
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
MV_FWD_A1
@ MV_FWD_A1
Definition: cavs.h:132
INTRA_L_HORIZ
@ INTRA_L_HORIZ
Definition: cavs.h:92
size
int size
Definition: twinvq_data.h:10344
MV_PRED_MEDIAN
@ MV_PRED_MEDIAN
Definition: cavs.h:112
h264chroma.h
MV_FWD_B2
@ MV_FWD_B2
Definition: cavs.h:129
frame.h
AVSContext::intra_pred_c
void(* intra_pred_c[7])(uint8_t *d, uint8_t *top, uint8_t *left, ptrdiff_t stride)
Definition: cavs.h:238
P_8X8
@ P_8X8
Definition: cavs.h:74
attributes.h
cavs_intra_luma
cavs_intra_luma
Definition: cavs.h:90
AVSContext::mv
cavs_vector mv[2 *4 *3]
mv motion vector cache 0: D3 B2 B3 C2 4: A1 X0 X1 - 8: A3 X2 X3 -
Definition: cavs.h:211
BLK_8X16
@ BLK_8X16
Definition: cavs.h:123
dec_2dvlc::max_run
int8_t max_run
Definition: cavs.h:162
ff_cavs_end
int ff_cavs_end(AVCodecContext *avctx)
Definition: cavs.c:834
MV_FWD_X3
@ MV_FWD_X3
Definition: cavs.h:137
AVSContext::cu
uint8_t * cu
Definition: cavs.h:195
AVSContext::cbp
int cbp
Definition: cavs.h:226
ff_cavs_init
int ff_cavs_init(AVCodecContext *avctx)
Definition: cavs.c:791
AVSContext::mbidx
int mbidx
macroblock coordinates
Definition: cavs.h:192
AVSContext::aspect_ratio
int aspect_ratio
Definition: cavs.h:182
MV_PRED_TOP
@ MV_PRED_TOP
Definition: cavs.h:114
AVSFrame::f
AVFrame * f
Definition: cavs.h:166
cavs_vector::y
int16_t y
Definition: cavs.h:152
AVSContext::left_border_u
uint8_t left_border_u[10]
Definition: cavs.h:233
MV_FWD_X2
@ MV_FWD_X2
Definition: cavs.h:136
MV_FWD_C2
@ MV_FWD_C2
Definition: cavs.h:131
INTRA_L_DOWN_LEFT
@ INTRA_L_DOWN_LEFT
Definition: cavs.h:94
AVSContext::skip_mode_flag
int skip_mode_flag
select between skip_count or one skip_flag per MB
Definition: cavs.h:188
avcodec.h
AVSContext::sym_factor
int sym_factor
for scaling in symmetrical B block
Definition: cavs.h:242
dec_2dvlc
Definition: cavs.h:157
cavs_mv_pred
cavs_mv_pred
Definition: cavs.h:111
AVSContext::col_type_base
uint8_t * col_type_base
Definition: cavs.h:239
B_SKIP
@ B_SKIP
Definition: cavs.h:75
INTRA_L_LP_LEFT
@ INTRA_L_LP_LEFT
Definition: cavs.h:96
B_FWD_16X16
@ B_FWD_16X16
Definition: cavs.h:77
left
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:386
AVSContext::bdsp
BlockDSPContext bdsp
Definition: cavs.h:172
INTRA_C_LP_TOP
@ INTRA_C_LP_TOP
Definition: cavs.h:107
AVSContext::pred_mode_Y
int pred_mode_Y[3 *3]
luma pred mode cache 0: – B2 B3 3: A1 X0 X1 6: A3 X2 X3
Definition: cavs.h:219
ff_cavs_init_mb
void ff_cavs_init_mb(AVSContext *h)
initialise predictors for motion vectors and intra prediction
Definition: cavs.c:636
AVCodecContext
main external API structure.
Definition: avcodec.h:439
cavs_sub_mb
cavs_sub_mb
Definition: cavs.h:83
AVSContext::top_border_v
uint8_t * top_border_v
Definition: cavs.h:232
AVSContext::top_mv
cavs_vector * top_mv[2]
Definition: cavs.h:212
B_BWD_16X16
@ B_BWD_16X16
Definition: cavs.h:78
B_SUB_SYM
@ B_SUB_SYM
Definition: cavs.h:87
ff_cavs_next_mb
int ff_cavs_next_mb(AVSContext *h)
save predictors for later macroblocks and increase macroblock address
Definition: cavs.c:677
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:117
VideoDSPContext
Definition: videodsp.h:32
AVSContext
Definition: cavs.h:170
cavs_vector
Definition: cavs.h:150
cavs_vector::ref
int16_t ref
Definition: cavs.h:154
B_8X8
@ B_8X8
Definition: cavs.h:80
MV_BWD_B3
@ MV_BWD_B3
Definition: cavs.h:140
H264ChromaContext
Definition: h264chroma.h:29
P_8X16
@ P_8X16
Definition: cavs.h:73
AVSContext::vdsp
VideoDSPContext vdsp
Definition: cavs.h:174
videodsp.h
MV_PRED_LEFT
@ MV_PRED_LEFT
Definition: cavs.h:113
AVSContext::height
int height
Definition: cavs.h:184
B_SUB_DIRECT
@ B_SUB_DIRECT
Definition: cavs.h:84
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
MV_FWD_X1
@ MV_FWD_X1
Definition: cavs.h:134
AVSContext::gb
GetBitContext gb
Definition: cavs.h:176
h
h
Definition: vp9dsp_template.c:2070
stride
#define stride
Definition: h264pred_template.c:536
AVSContext::left_border_v
uint8_t left_border_v[10]
Definition: cavs.h:233
AVSContext::h264chroma
H264ChromaContext h264chroma
Definition: cavs.h:173
INTRA_C_LP_LEFT
@ INTRA_C_LP_LEFT
Definition: cavs.h:106
AVSContext::qp
int qp
Definition: cavs.h:223
B_DIRECT
@ B_DIRECT
Definition: cavs.h:76
AVSFrame
Definition: cavs.h:165
AVSContext::stream_revision
int stream_revision
0 for samples from 2006, 1 for rm52j encoder
Definition: cavs.h:185
INTRA_L_LP_TOP
@ INTRA_L_LP_TOP
Definition: cavs.h:97
P_SKIP
@ P_SKIP
Definition: cavs.h:70
cavsdsp.h