annotate cavs.h @ 12197:fbf4d5b1b664 libavcodec

Remove FF_MM_SSE2/3 flags for CPUs where this is generally not faster than regular MMX code. Examples of this are the Core1 CPU. Instead, set a new flag, FF_MM_SSE2/3SLOW, which can be checked for particular SSE2/3 functions that have been checked specifically on such CPUs and are actually faster than their MMX counterparts. In addition, use this flag to enable particular VP8 and LPC SSE2 functions that are faster than their MMX counterparts. Based on a patch by Loren Merritt <lorenm AT u washington edu>.
author rbultje
date Mon, 19 Jul 2010 22:38:23 +0000
parents 98970e51365a
children 1241c824de46
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
11369
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 11204
diff changeset
139 DECLARE_ALIGNED(8, typedef, struct) {
4944
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;
11179
9a793cb05a85 add heuristic to discern the old sample clips from streams encoded
stefang
parents: 8796
diff changeset
163 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
164 int progressive;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
165 int pic_structure;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
166 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
167 int loop_filter_disable;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
168 int alpha_offset, beta_offset;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
169 int ref_flag;
8796
c6dd98bff427 introduce a macroblock index to avoid a few x*width+y calculations
stefang
parents: 8791
diff changeset
170 int mbx, mby, mbidx; ///< macroblock coordinates
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
171 int flags; ///< availability flags of neighbouring macroblocks
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
172 int stc; ///< last start code
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
173 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
174 int left_qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
175 uint8_t *top_qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
176
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
177 /** mv motion vector cache
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
178 0: D3 B2 B3 C2
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
179 4: A1 X0 X1 -
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
180 8: A3 X2 X3 -
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
181
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
182 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
183 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
184 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
185 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
186 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
187
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
188 the same is repeated for backward motion vectors */
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
189 cavs_vector mv[2*4*3];
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
190 cavs_vector *top_mv[2];
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
191 cavs_vector *col_mv;
5236
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
192
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
193 /** luma pred mode cache
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
194 0: -- B2 B3
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
195 3: A1 X0 X1
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
196 6: A3 X2 X3 */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
197 int pred_mode_Y[3*3];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
198 int *top_pred_Y;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
199 int l_stride, c_stride;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
200 int luma_scan[4];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
201 int qp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
202 int qp_fixed;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
203 int cbp;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
204 ScanTable scantable;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
205
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
206 /** intra prediction is done with un-deblocked samples
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
207 they are saved here before deblocking the MB */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
208 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
209 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
210 uint8_t intern_border_y[26];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
211 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
212
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
213 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
214 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
215 uint8_t *col_type_base;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
216
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
217 /* scaling factors for MV prediction */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
218 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
219 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
220 int scale_den[2]; ///< for scaling neighbouring MVs
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
221
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
222 int got_keyframe;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
223 DCTELEM *block;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
224 } AVSContext;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
225
5249
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
226 extern const uint8_t ff_cavs_dequant_shift[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
227 extern const uint16_t ff_cavs_dequant_mul[64];
8331
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
228 extern const struct dec_2dvlc ff_cavs_intra_dec[7];
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
229 extern const struct dec_2dvlc ff_cavs_inter_dec[7];
0579157cbb14 Avoid POSIX-reserved _t in identifier names.
diego
parents: 7760
diff changeset
230 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
231 extern const uint8_t ff_cavs_chroma_qp[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
232 extern const uint8_t ff_cavs_scan3x3[4];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
233 extern const uint8_t ff_cavs_partition_flags[30];
5239
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
234 extern const int_fast8_t ff_left_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
235 extern const int_fast8_t ff_top_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
236 extern const int_fast8_t ff_left_modifier_c[7];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
237 extern const int_fast8_t ff_top_modifier_c[7];
8605
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
238 extern const cavs_vector ff_cavs_intra_mv;
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
239 extern const cavs_vector ff_cavs_un_mv;
33f51dd2491f rename vector_t to cavs_vector
stefang
parents: 8331
diff changeset
240 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
241
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
242 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
243 *mode = mod_table[*mode];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
244 if(*mode < 0) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
245 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
246 *mode = 0;
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 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
249
5240
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
250 static inline void set_intra_mode_default(AVSContext *h) {
11204
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
251 if(h->stream_revision > 0) {
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
252 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
253 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
254 } else {
ba1c541f7e8a fix intra prediction modes with inter-MB neighbors,
stefang
parents: 11179
diff changeset
255 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
256 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
257 }
5240
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
258 }
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
259
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
260 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
261 switch(size) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
262 case BLK_16X16:
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 mv[MV_STRIDE+1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
265 case BLK_16X8:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
266 mv[1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
267 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
268 case BLK_8X16:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
269 mv[MV_STRIDE] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
270 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
271 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
272 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
273
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
274 static inline void set_mv_intra(AVSContext *h) {
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
275 h->mv[MV_FWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
276 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
277 h->mv[MV_BWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
278 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
279 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
280 h->col_type_base[h->mbidx] = I_8X8;
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
281 }
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
282
5243
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
283 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
284 DCTELEM *dst, int mul, int shift, int coeff_num) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
285 int round = 1 << (shift - 1);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
286 int pos = -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
287 const uint8_t *scantab = h->scantable.permutated;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
288
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
289 /* inverse scan and dequantization */
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
290 while(--coeff_num >= 0){
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
291 pos += run_buf[coeff_num];
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
292 if(pos > 63) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
293 av_log(h->s.avctx, AV_LOG_ERROR,
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
294 "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
295 h->picture.poc, h->mbx, h->mby);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
296 return -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
297 }
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
298 dst[scantab[pos]] = (level_buf[coeff_num]*mul + round) >> shift;
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 return 0;
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
8606
c3a96cea3453 rename XXX_t enums to cavs_XXX to fix POSIX namespace issue
stefang
parents: 8605
diff changeset
303 void ff_cavs_filter(AVSContext *h, enum cavs_mb mb_type);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
304 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
305 int block);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
306 void ff_cavs_load_intra_pred_chroma(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
307 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
308 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
309 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
310 enum cavs_mv_pred mode, enum cavs_block size, int ref);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
311 void ff_cavs_init_mb(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
312 int ff_cavs_next_mb(AVSContext *h);
5244
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
313 void ff_cavs_init_pic(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
314 void ff_cavs_init_top_lines(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
315 int ff_cavs_init(AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
316 int ff_cavs_end (AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
317
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 5830
diff changeset
318 #endif /* AVCODEC_CAVS_H */