annotate cavs.h @ 5876:731ee5ad6bde libavcodec

Correct assignment of interlaced_frame; was being set on output frames, in display order, based on decoding information in decoding order. Now set properly, immediately upon completion of decode. Based on original patch from Reinhard Nissl, rnisssl % gmx , de Original Thread: [FFmpeg-devel] H.264 + PAFF: BBC HD recording shows extreme interlacing artefacts, Thu, 01 Nov 2007 22:43:09
author heydowns
date Mon, 05 Nov 2007 18:16:42 +0000
parents 1d83e9c34641
children c4a4495715dd
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
5830
1d83e9c34641 Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 5401
diff changeset
22 #ifndef FFMPEG_CAVS_H
1d83e9c34641 Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 5401
diff changeset
23 #define FFMPEG_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_MIN_START_CODE 0x00000101
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
58 enum mb_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
73 enum sub_mb_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
80 enum intra_luma_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
91 enum intra_chroma_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
101 enum mv_pred_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
110 enum block_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
117 enum mv_loc_t {
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
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
140 DECLARE_ALIGNED_8(typedef, struct) {
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;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
145 } vector_t;
5d4544d7cbbc move defines and enums out of cavsdata.h
aurel
parents:
diff changeset
146
5242
deb5b8213d4e cosmetic: rename VLC tables to make clear they
stefang
parents: 5241
diff changeset
147 typedef struct dec_2dvlc_t {
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;
5242
deb5b8213d4e cosmetic: rename VLC tables to make clear they
stefang
parents: 5241
diff changeset
153 } dec_2dvlc_t;
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;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
157 Picture picture; ///< currently decoded frame
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
158 Picture DPB[2]; ///< reference frames
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
159 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
160 int profile, level;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
161 int aspect_ratio;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
162 int mb_width, mb_height;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
163 int pic_type;
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;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
170 int mbx, mby; ///< macroblock coordinates
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 */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
189 vector_t mv[2*4*3];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
190 vector_t *top_mv[2];
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
191 vector_t *col_mv;
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 uint8_t *col_type;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
217
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
218 /* scaling factors for MV prediction */
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
219 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
220 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
221 int scale_den[2]; ///< for scaling neighbouring MVs
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
222
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
223 int got_keyframe;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
224 DCTELEM *block;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
225 } AVSContext;
1e80bd238744 move context structure definition from cavs.c to cavs.h
stefang
parents: 5215
diff changeset
226
5249
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
227 extern const uint8_t ff_cavs_dequant_shift[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
228 extern const uint16_t ff_cavs_dequant_mul[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
229 extern const dec_2dvlc_t ff_cavs_intra_dec[7];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
230 extern const dec_2dvlc_t ff_cavs_inter_dec[7];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
231 extern const dec_2dvlc_t ff_cavs_chroma_dec[5];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
232 extern const uint8_t ff_cavs_chroma_qp[64];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
233 extern const uint8_t ff_cavs_scan3x3[4];
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
234 extern const uint8_t ff_cavs_partition_flags[30];
5239
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
235 extern const int_fast8_t ff_left_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
236 extern const int_fast8_t ff_top_modifier_l[8];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
237 extern const int_fast8_t ff_left_modifier_c[7];
5760ab0250aa move modification of intra prediction modes into
stefang
parents: 5238
diff changeset
238 extern const int_fast8_t ff_top_modifier_c[7];
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
239 extern const vector_t ff_cavs_intra_mv;
5237
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
240 extern const vector_t ff_cavs_un_mv;
5249
dc2579bede07 prepare splitting decoder-only parts into own file:
stefang
parents: 5244
diff changeset
241 extern const vector_t ff_cavs_dir_mv;
5237
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
242
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
243 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
244 *mode = mod_table[*mode];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
245 if(*mode < 0) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
246 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
247 *mode = 0;
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 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
250
5240
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
251 static inline void set_intra_mode_default(AVSContext *h) {
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
252 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
253 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
254 }
1701ce572fed setting intra prediction modes to default values
stefang
parents: 5239
diff changeset
255
5237
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
256 static inline void set_mvs(vector_t *mv, enum block_t size) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
257 switch(size) {
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
258 case BLK_16X16:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
259 mv[MV_STRIDE ] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
260 mv[MV_STRIDE+1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
261 case BLK_16X8:
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
262 mv[1] = mv[0];
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
263 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
264 case BLK_8X16:
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 break;
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
267 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
268 }
6aa42985b8e9 move existing inline functions from cavs.c to cavs.h
stefang
parents: 5236
diff changeset
269
5241
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
270 static inline void set_mv_intra(AVSContext *h) {
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
271 h->mv[MV_FWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
272 set_mvs(&h->mv[MV_FWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
273 h->mv[MV_BWD_X0] = ff_cavs_intra_mv;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
274 set_mvs(&h->mv[MV_BWD_X0], BLK_16X16);
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
275 if(h->pic_type != FF_B_TYPE)
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
276 *h->col_type = I_8X8;
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
277 }
74b6423a5a0d setting special motion vectors in intra macroblocks
stefang
parents: 5240
diff changeset
278
5243
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
279 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
280 DCTELEM *dst, int mul, int shift, int coeff_num) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
281 int round = 1 << (shift - 1);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
282 int pos = -1;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
283 const uint8_t *scantab = h->scantable.permutated;
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
284
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
285 /* inverse scan and dequantization */
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
286 while(--coeff_num >= 0){
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
287 pos += run_buf[coeff_num];
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
288 if(pos > 63) {
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
289 av_log(h->s.avctx, AV_LOG_ERROR,
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
290 "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
291 h->picture.poc, h->mbx, h->mby);
dd11d0b32cc9 move dequantization into its own inline function
stefang
parents: 5242
diff changeset
292 return -1;
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 dst[scantab[pos]] = (level_buf[coeff_num]*mul + round) >> shift;
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 return 0;
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
5244
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
299 void ff_cavs_filter(AVSContext *h, enum mb_t mb_type);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
300 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
301 int block);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
302 void ff_cavs_load_intra_pred_chroma(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
303 void ff_cavs_modify_mb_i(AVSContext *h, int *pred_mode_uv);
5244
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
304 void ff_cavs_inter(AVSContext *h, enum mb_t mb_type);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
305 void ff_cavs_mv(AVSContext *h, enum mv_loc_t nP, enum mv_loc_t nC,
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
306 enum mv_pred_t mode, enum block_t size, int ref);
5401
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
307 void ff_cavs_init_mb(AVSContext *h);
cb5d5d2ee6fd have less functions as inline
stefang
parents: 5254
diff changeset
308 int ff_cavs_next_mb(AVSContext *h);
5244
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
309 void ff_cavs_init_pic(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
310 void ff_cavs_init_top_lines(AVSContext *h);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
311 int ff_cavs_init(AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
312 int ff_cavs_end (AVCodecContext *avctx);
eeba62cd2181 prepare splitting decoder-only parts into own file:
stefang
parents: 5243
diff changeset
313
5830
1d83e9c34641 Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 5401
diff changeset
314 #endif /* FFMPEG_CAVS_H */