annotate cavs.h @ 11060:daff45175333 libavcodec

Make the jump-table section-relative for x86_64 with PIC enabled. This allows to get rid of the macho64 specific hack that moves them to rodata (with worse cache behaviour) and avoids textrels which e.g. Gentoo does not allow for x86_64 libraries.
author reimar
date Sat, 30 Jan 2010 19:26:47 +0000
parents c6dd98bff427
children 9a793cb05a85
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"
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
27
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
28 #define SLICE_MAX_START_CODE 0x000001af
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
29 #define EXT_START_CODE 0x000001b5
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
30 #define USER_START_CODE 0x000001b2
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
31 #define CAVS_START_CODE 0x000001b0
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
32 #define PIC_I_START_CODE 0x000001b3
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
33 #define PIC_PB_START_CODE 0x000001b6
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
34
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
35 #define A_AVAIL 1
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
36 #define B_AVAIL 2
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
37 #define C_AVAIL 4
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
38 #define D_AVAIL 8
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
39 #define NOT_AVAIL -1
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
40 #define REF_INTRA -2
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
41 #define REF_DIR -3
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
42
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
43 #define ESCAPE_CODE 59
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
44
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
45 #define FWD0 0x01
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
46 #define FWD1 0x02
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
47 #define BWD0 0x04
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
48 #define BWD1 0x08
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
49 #define SYM0 0x10
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
50 #define SYM1 0x20
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
51 #define SPLITH 0x40
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
52 #define SPLITV 0x80
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
53
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
54 #define MV_BWD_OFFS 12
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
55 #define MV_STRIDE 4
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
56
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
57 enum cavs_mb {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
58 I_8X8 = 0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
59 P_SKIP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
60 P_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
61 P_16X8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
62 P_8X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
63 P_8X8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
64 B_SKIP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
65 B_DIRECT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
66 B_FWD_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
67 B_BWD_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
68 B_SYM_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
69 B_8X8 = 29
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
70 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
71
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
72 enum cavs_sub_mb {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
73 B_SUB_DIRECT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
74 B_SUB_FWD,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
75 B_SUB_BWD,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
76 B_SUB_SYM
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
77 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
78
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
79 enum cavs_intra_luma {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
80 INTRA_L_VERT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
81 INTRA_L_HORIZ,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
82 INTRA_L_LP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
83 INTRA_L_DOWN_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
84 INTRA_L_DOWN_RIGHT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
85 INTRA_L_LP_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
86 INTRA_L_LP_TOP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
87 INTRA_L_DC_128
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
88 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
89
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
90 enum cavs_intra_chroma {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
91 INTRA_C_LP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
92 INTRA_C_HORIZ,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
93 INTRA_C_VERT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
94 INTRA_C_PLANE,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
95 INTRA_C_LP_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
96 INTRA_C_LP_TOP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
97 INTRA_C_DC_128,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
98 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
99
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
100 enum cavs_mv_pred {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
101 MV_PRED_MEDIAN,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
102 MV_PRED_LEFT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
103 MV_PRED_TOP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
104 MV_PRED_TOPRIGHT,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
105 MV_PRED_PSKIP,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
106 MV_PRED_BSKIP
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
107 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
108
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
109 enum cavs_block {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
110 BLK_16X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
111 BLK_16X8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
112 BLK_8X16,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
113 BLK_8X8
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
114 };
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
115
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
116 enum cavs_mv_loc {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
117 MV_FWD_D3 = 0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
118 MV_FWD_B2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
119 MV_FWD_B3,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
120 MV_FWD_C2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
121 MV_FWD_A1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
122 MV_FWD_X0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
123 MV_FWD_X1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
124 MV_FWD_A3 = 8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
125 MV_FWD_X2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
126 MV_FWD_X3,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
127 MV_BWD_D3 = MV_BWD_OFFS,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
128 MV_BWD_B2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
129 MV_BWD_B3,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
130 MV_BWD_C2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
131 MV_BWD_A1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
132 MV_BWD_X0,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
133 MV_BWD_X1,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
134 MV_BWD_A3 = MV_BWD_OFFS+8,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
135 MV_BWD_X2,
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
136 MV_BWD_X3
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
137 };
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 DECLARE_ALIGNED_8(typedef, struct) {
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
140 int16_t x;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
141 int16_t y;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
142 int16_t dist;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
143 int16_t ref;
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
144 } cavs_vector;
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
145
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
146 struct dec_2dvlc {
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
147 int8_t rltab[59][3];
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
148 int8_t level_add[27];
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
149 int8_t golomb_order;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
150 int inc_limit;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
151 int8_t max_run;
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
152 };
4944
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
153
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
154 typedef struct {
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
155 MpegEncContext s;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
156 Picture picture; ///< currently decoded frame
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
157 Picture DPB[2]; ///< reference frames
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
158 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
159 int profile, level;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
160 int aspect_ratio;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
161 int mb_width, mb_height;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
162 int pic_type;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
163 int progressive;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
164 int pic_structure;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
165 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
166 int loop_filter_disable;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
167 int alpha_offset, beta_offset;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
168 int ref_flag;
8796
c6dd98bff427 introduce a macroblock index to avoid a few x*width+y calculations
stefang
parents: 8791
diff changeset
169 int mbx, mby, mbidx; ///< macroblock coordinates
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
170 int flags; ///< availability flags of neighbouring macroblocks
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
171 int stc; ///< last start code
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
172 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
173 int left_qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
174 uint8_t *top_qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
175
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
176 /** mv motion vector cache
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
177 0: D3 B2 B3 C2
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
178 4: A1 X0 X1 -
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
179 8: A3 X2 X3 -
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
180
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
181 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
182 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
183 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
184 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
185 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
186
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
187 the same is repeated for backward motion vectors */
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
188 cavs_vector mv[2*4*3];
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
189 cavs_vector *top_mv[2];
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
190 cavs_vector *col_mv;
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
191
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
192 /** luma pred mode cache
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
193 0: -- B2 B3
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
194 3: A1 X0 X1
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
195 6: A3 X2 X3 */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
196 int pred_mode_Y[3*3];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
197 int *top_pred_Y;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
198 int l_stride, c_stride;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
199 int luma_scan[4];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
200 int qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
201 int qp_fixed;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
202 int cbp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
203 ScanTable scantable;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
204
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
205 /** intra prediction is done with un-deblocked samples
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
206 they are saved here before deblocking the MB */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
207 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
208 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
209 uint8_t intern_border_y[26];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
210 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
211
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
212 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
213 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
214 uint8_t *col_type_base;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
215
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
216 /* scaling factors for MV prediction */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
217 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
218 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
219 int scale_den[2]; ///< for scaling neighbouring MVs
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
220
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
221 int got_keyframe;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
222 DCTELEM *block;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
223 } AVSContext;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
224
5249
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
225 extern const uint8_t ff_cavs_dequant_shift[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
226 extern const uint16_t ff_cavs_dequant_mul[64];
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
227 extern const struct dec_2dvlc ff_cavs_intra_dec[7];
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
228 extern const struct dec_2dvlc ff_cavs_inter_dec[7];
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
229 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
230 extern const uint8_t ff_cavs_chroma_qp[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
231 extern const uint8_t ff_cavs_scan3x3[4];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
232 extern const uint8_t ff_cavs_partition_flags[30];
5239
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
233 extern const int_fast8_t ff_left_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
234 extern const int_fast8_t ff_top_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
235 extern const int_fast8_t ff_left_modifier_c[7];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
236 extern const int_fast8_t ff_top_modifier_c[7];
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
237 extern const cavs_vector ff_cavs_intra_mv;
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
238 extern const cavs_vector ff_cavs_un_mv;
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
239 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
240
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
241 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
242 *mode = mod_table[*mode];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
243 if(*mode < 0) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
244 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
245 *mode = 0;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
246 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
247 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
248
5240
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
249 static inline void set_intra_mode_default(AVSContext *h) {
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
250 h->pred_mode_Y[3] = h->pred_mode_Y[6] = INTRA_L_LP;
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
251 h->top_pred_Y[h->mbx*2+0] = h->top_pred_Y[h->mbx*2+1] = INTRA_L_LP;
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
252 }
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
253
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
254 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
255 switch(size) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
256 case BLK_16X16:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
257 mv[MV_STRIDE ] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
258 mv[MV_STRIDE+1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
259 case BLK_16X8:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
260 mv[1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
261 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
262 case BLK_8X16:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
263 mv[MV_STRIDE] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
264 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
265 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
266 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
267
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
268 static inline void set_mv_intra(AVSContext *h) {
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
269 h->mv[MV_FWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
270 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
271 h->mv[MV_BWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
272 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
273 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
274 h->col_type_base[h->mbidx] = I_8X8;
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
275 }
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
276
5243
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
277 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
278 DCTELEM *dst, int mul, int shift, int coeff_num) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
279 int round = 1 << (shift - 1);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
280 int pos = -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
281 const uint8_t *scantab = h->scantable.permutated;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
282
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
283 /* inverse scan and dequantization */
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
284 while(--coeff_num >= 0){
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
285 pos += run_buf[coeff_num];
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
286 if(pos > 63) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
287 av_log(h->s.avctx, AV_LOG_ERROR,
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
288 "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
289 h->picture.poc, h->mbx, h->mby);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
290 return -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
291 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
292 dst[scantab[pos]] = (level_buf[coeff_num]*mul + round) >> shift;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
293 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
294 return 0;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
295 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
296
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
297 void ff_cavs_filter(AVSContext *h, enum cavs_mb mb_type);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
298 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
299 int block);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
300 void ff_cavs_load_intra_pred_chroma(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
301 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
302 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
303 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
304 enum cavs_mv_pred mode, enum cavs_block size, int ref);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
305 void ff_cavs_init_mb(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
306 int ff_cavs_next_mb(AVSContext *h);
5244
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
307 void ff_cavs_init_pic(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
308 void ff_cavs_init_top_lines(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
309 int ff_cavs_init(AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
310 int ff_cavs_end (AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
311
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
312 #endif /* AVCODEC_CAVS_H */