annotate cavs.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 1241c824de46
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
1 /*
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
2 * Chinese AVS video (AVS1-P2, JiZhun profile) decoder.
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
3 * Copyright (c) 2006 Stefan Gehrer <stefan.gehrer@gmx.de>
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
4 *
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
5 * This file is part of FFmpeg.
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
6 *
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
11 *
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
15 * Lesser General Public License for more details.
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
16 *
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
5215
2b72f9bc4f06 license header consistency cosmetics
diego
parents: 4944
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
20 */
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
21
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
22 #ifndef AVCODEC_CAVS_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
23 #define AVCODEC_CAVS_H
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
24
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
25 #include "dsputil.h"
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
26 #include "mpegvideo.h"
12356
1241c824de46 Move cavs dsp functions to their own struct
mru
parents: 11369
diff changeset
27 #include "cavsdsp.h"
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
28
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
29 #define SLICE_MAX_START_CODE 0x000001af
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
30 #define EXT_START_CODE 0x000001b5
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
31 #define USER_START_CODE 0x000001b2
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
32 #define CAVS_START_CODE 0x000001b0
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
33 #define PIC_I_START_CODE 0x000001b3
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
34 #define PIC_PB_START_CODE 0x000001b6
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
35
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
36 #define A_AVAIL 1
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
37 #define B_AVAIL 2
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
38 #define C_AVAIL 4
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
39 #define D_AVAIL 8
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
40 #define NOT_AVAIL -1
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
41 #define REF_INTRA -2
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
42 #define REF_DIR -3
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
43
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
44 #define ESCAPE_CODE 59
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
45
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
46 #define FWD0 0x01
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
47 #define FWD1 0x02
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
48 #define BWD0 0x04
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
49 #define BWD1 0x08
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
50 #define SYM0 0x10
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
51 #define SYM1 0x20
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
52 #define SPLITH 0x40
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
53 #define SPLITV 0x80
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
54
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
55 #define MV_BWD_OFFS 12
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
56 #define MV_STRIDE 4
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
57
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
58 enum cavs_mb {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
59 I_8X8 = 0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
60 P_SKIP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
61 P_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
62 P_16X8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
63 P_8X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
64 P_8X8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
65 B_SKIP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
66 B_DIRECT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
67 B_FWD_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
68 B_BWD_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
69 B_SYM_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
70 B_8X8 = 29
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
71 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
72
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
73 enum cavs_sub_mb {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
74 B_SUB_DIRECT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
75 B_SUB_FWD,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
76 B_SUB_BWD,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
77 B_SUB_SYM
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
78 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
79
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
80 enum cavs_intra_luma {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
81 INTRA_L_VERT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
82 INTRA_L_HORIZ,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
83 INTRA_L_LP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
84 INTRA_L_DOWN_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
85 INTRA_L_DOWN_RIGHT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
86 INTRA_L_LP_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
87 INTRA_L_LP_TOP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
88 INTRA_L_DC_128
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
89 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
90
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
91 enum cavs_intra_chroma {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
92 INTRA_C_LP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
93 INTRA_C_HORIZ,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
94 INTRA_C_VERT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
95 INTRA_C_PLANE,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
96 INTRA_C_LP_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
97 INTRA_C_LP_TOP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
98 INTRA_C_DC_128,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
99 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
100
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
101 enum cavs_mv_pred {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
102 MV_PRED_MEDIAN,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
103 MV_PRED_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
104 MV_PRED_TOP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
105 MV_PRED_TOPRIGHT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
106 MV_PRED_PSKIP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
107 MV_PRED_BSKIP
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
108 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
109
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
110 enum cavs_block {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
111 BLK_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
112 BLK_16X8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
113 BLK_8X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
114 BLK_8X8
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
115 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
116
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
117 enum cavs_mv_loc {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
118 MV_FWD_D3 = 0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
119 MV_FWD_B2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
120 MV_FWD_B3,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
121 MV_FWD_C2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
122 MV_FWD_A1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
123 MV_FWD_X0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
124 MV_FWD_X1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
125 MV_FWD_A3 = 8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
126 MV_FWD_X2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
127 MV_FWD_X3,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
128 MV_BWD_D3 = MV_BWD_OFFS,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
129 MV_BWD_B2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
130 MV_BWD_B3,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
131 MV_BWD_C2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
132 MV_BWD_A1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
133 MV_BWD_X0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
134 MV_BWD_X1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
135 MV_BWD_A3 = MV_BWD_OFFS+8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
136 MV_BWD_X2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
137 MV_BWD_X3
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
138 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
139
11369
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 11204
diff changeset
140 DECLARE_ALIGNED(8, typedef, struct) {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
141 int16_t x;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
142 int16_t y;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
143 int16_t dist;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
144 int16_t ref;
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
145 } cavs_vector;
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
146
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
147 struct dec_2dvlc {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
148 int8_t rltab[59][3];
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
149 int8_t level_add[27];
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
150 int8_t golomb_order;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
151 int inc_limit;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
152 int8_t max_run;
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
153 };
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
154
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
155 typedef struct {
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
156 MpegEncContext s;
12356
1241c824de46 Move cavs dsp functions to their own struct
mru
parents: 11369
diff changeset
157 CAVSDSPContext cdsp;
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
158 Picture picture; ///< currently decoded frame
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
159 Picture DPB[2]; ///< reference frames
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
160 int dist[2]; ///< temporal distances from current frame to ref frames
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
161 int profile, level;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
162 int aspect_ratio;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
163 int mb_width, mb_height;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
164 int pic_type;
11179
9a793cb05a85 add heuristic to discern the old sample clips from streams encoded
stefang
parents: 8796
diff changeset
165 int stream_revision; ///<0 for samples from 2006, 1 for rm52j encoder
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
166 int progressive;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
167 int pic_structure;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
168 int skip_mode_flag; ///< select between skip_count or one skip_flag per MB
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
169 int loop_filter_disable;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
170 int alpha_offset, beta_offset;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
171 int ref_flag;
8796
c6dd98bff427 introduce a macroblock index to avoid a few x*width+y calculations
stefang
parents: 8791
diff changeset
172 int mbx, mby, mbidx; ///< macroblock coordinates
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
173 int flags; ///< availability flags of neighbouring macroblocks
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
174 int stc; ///< last start code
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
175 uint8_t *cy, *cu, *cv; ///< current MB sample pointers
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
176 int left_qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
177 uint8_t *top_qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
178
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
179 /** mv motion vector cache
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
180 0: D3 B2 B3 C2
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
181 4: A1 X0 X1 -
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
182 8: A3 X2 X3 -
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
183
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
184 X are the vectors in the current macroblock (5,6,9,10)
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
185 A is the macroblock to the left (4,8)
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
186 B is the macroblock to the top (1,2)
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
187 C is the macroblock to the top-right (3)
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
188 D is the macroblock to the top-left (0)
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
189
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
190 the same is repeated for backward motion vectors */
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
191 cavs_vector mv[2*4*3];
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
192 cavs_vector *top_mv[2];
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
193 cavs_vector *col_mv;
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
194
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
195 /** luma pred mode cache
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
196 0: -- B2 B3
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
197 3: A1 X0 X1
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
198 6: A3 X2 X3 */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
199 int pred_mode_Y[3*3];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
200 int *top_pred_Y;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
201 int l_stride, c_stride;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
202 int luma_scan[4];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
203 int qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
204 int qp_fixed;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
205 int cbp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
206 ScanTable scantable;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
207
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
208 /** intra prediction is done with un-deblocked samples
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
209 they are saved here before deblocking the MB */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
210 uint8_t *top_border_y, *top_border_u, *top_border_v;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
211 uint8_t left_border_y[26], left_border_u[10], left_border_v[10];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
212 uint8_t intern_border_y[26];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
213 uint8_t topleft_border_y, topleft_border_u, topleft_border_v;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
214
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
215 void (*intra_pred_l[8])(uint8_t *d,uint8_t *top,uint8_t *left,int stride);
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
216 void (*intra_pred_c[7])(uint8_t *d,uint8_t *top,uint8_t *left,int stride);
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
217 uint8_t *col_type_base;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
218
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
219 /* scaling factors for MV prediction */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
220 int sym_factor; ///< for scaling in symmetrical B block
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
221 int direct_den[2]; ///< for scaling in direct B block
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
222 int scale_den[2]; ///< for scaling neighbouring MVs
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
223
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
224 int got_keyframe;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
225 DCTELEM *block;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
226 } AVSContext;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
227
5249
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
228 extern const uint8_t ff_cavs_dequant_shift[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
229 extern const uint16_t ff_cavs_dequant_mul[64];
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
230 extern const struct dec_2dvlc ff_cavs_intra_dec[7];
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
231 extern const struct dec_2dvlc ff_cavs_inter_dec[7];
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
232 extern const struct dec_2dvlc ff_cavs_chroma_dec[5];
5249
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
233 extern const uint8_t ff_cavs_chroma_qp[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
234 extern const uint8_t ff_cavs_scan3x3[4];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
235 extern const uint8_t ff_cavs_partition_flags[30];
5239
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
236 extern const int_fast8_t ff_left_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
237 extern const int_fast8_t ff_top_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
238 extern const int_fast8_t ff_left_modifier_c[7];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
239 extern const int_fast8_t ff_top_modifier_c[7];
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
240 extern const cavs_vector ff_cavs_intra_mv;
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
241 extern const cavs_vector ff_cavs_un_mv;
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
242 extern const cavs_vector ff_cavs_dir_mv;
5237
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
243
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
244 static inline void modify_pred(const int_fast8_t *mod_table, int *mode) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
245 *mode = mod_table[*mode];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
246 if(*mode < 0) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
247 av_log(NULL, AV_LOG_ERROR, "Illegal intra prediction mode\n");
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
248 *mode = 0;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
249 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
250 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
251
5240
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
252 static inline void set_intra_mode_default(AVSContext *h) {
11204
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
253 if(h->stream_revision > 0) {
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
254 h->pred_mode_Y[3] = h->pred_mode_Y[6] = NOT_AVAIL;
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
255 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = NOT_AVAIL;
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
256 } else {
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
257 h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP;
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
258 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP;
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
259 }
5240
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
260 }
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
261
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
262 static inline void set_mvs(cavs_vector *mv, enum cavs_block size) {
5237
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
263 switch(size) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
264 case BLK_16X16:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
265 mv[MV_STRIDE ] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
266 mv[MV_STRIDE+1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
267 case BLK_16X8:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
268 mv[1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
269 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
270 case BLK_8X16:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
271 mv[MV_STRIDE] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
272 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
273 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
274 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
275
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
276 static inline void set_mv_intra(AVSContext *h) {
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
277 h->mv[MV_FWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
278 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
279 h->mv[MV_BWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
280 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
281 if(h->pic_type != FF_B_TYPE)
8796
c6dd98bff427 introduce a macroblock index to avoid a few x*width+y calculations
stefang
parents: 8791
diff changeset
282 h->col_type_base[h->mbidx] = I_8X8;
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
283 }
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
284
5243
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
285 static inline int dequant(AVSContext *h, DCTELEM *level_buf, uint8_t *run_buf,
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
286 DCTELEM *dst, int mul, int shift, int coeff_num) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
287 int round = 1 << (shift - 1);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
288 int pos = -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
289 const uint8_t *scantab = h->scantable.permutated;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
290
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
291 /* inverse scan and dequantization */
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
292 while(--coeff_num >= 0){
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
293 pos += run_buf[coeff_num];
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
294 if(pos > 63) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
295 av_log(h->s.avctx, AV_LOG_ERROR,
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
296 "position out of block bounds at pic %d MB(%d,%d)\n",
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
297 h->picture.poc, h->mbx, h->mby);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
298 return -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
299 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
300 dst[scantab[pos]] = (level_buf[coeff_num]*mul + round) >> shift;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
301 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
302 return 0;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
303 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
304
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
305 void ff_cavs_filter(AVSContext *h, enum cavs_mb mb_type);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
306 void ff_cavs_load_intra_pred_luma(AVSContext *h, uint8_t *top, uint8_t **left,
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
307 int block);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
308 void ff_cavs_load_intra_pred_chroma(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
309 void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv);
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
310 void ff_cavs_inter(AVSContext *h, enum cavs_mb mb_type);
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
311 void ff_cavs_mv(AVSContext *h, enum cavs_mv_loc nP, enum cavs_mv_loc nC,
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
312 enum cavs_mv_pred mode, enum cavs_block size, int ref);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
313 void ff_cavs_init_mb(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
314 int ff_cavs_next_mb(AVSContext *h);
5244
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
315 void ff_cavs_init_pic(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
316 void ff_cavs_init_top_lines(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
317 int ff_cavs_init(AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
318 int ff_cavs_end (AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
319
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
320 #endif /* AVCODEC_CAVS_H */