[cvs] / xvidcore / src / quant / quant_matrix.c Repository:
ViewVC logotype

Annotation of /xvidcore/src/quant/quant_matrix.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (view) (download)

1 : Isibaar 1.2 #include "quant_matrix.h"
2 : Isibaar 1.1
3 : edgomez 1.13 #define FIX(X) (((X)==1) ? 0xFFFF : ((1UL << 16) / (X) + 1))
4 :     #define FIXL(X) ((1UL << 16) / (X) - 1)
5 : edgomez 1.6
6 : Isibaar 1.3 uint8_t custom_intra_matrix = 0;
7 :     uint8_t custom_inter_matrix = 0;
8 :    
9 : edgomez 1.8 uint8_t default_intra_matrix[64] = {
10 : edgomez 1.5 8, 17, 18, 19, 21, 23, 25, 27,
11 :     17, 18, 19, 21, 23, 25, 27, 28,
12 :     20, 21, 22, 23, 24, 26, 28, 30,
13 :     21, 22, 23, 24, 26, 28, 30, 32,
14 :     22, 23, 24, 26, 28, 30, 32, 35,
15 :     23, 24, 26, 28, 30, 32, 35, 38,
16 :     25, 26, 28, 30, 32, 35, 38, 41,
17 :     27, 28, 30, 32, 35, 38, 41, 45
18 : Isibaar 1.3 };
19 : Isibaar 1.1
20 : edgomez 1.7 int16_t intra_matrix[64] = {
21 : edgomez 1.5 8, 17, 18, 19, 21, 23, 25, 27,
22 :     17, 18, 19, 21, 23, 25, 27, 28,
23 :     20, 21, 22, 23, 24, 26, 28, 30,
24 :     21, 22, 23, 24, 26, 28, 30, 32,
25 :     22, 23, 24, 26, 28, 30, 32, 35,
26 :     23, 24, 26, 28, 30, 32, 35, 38,
27 :     25, 26, 28, 30, 32, 35, 38, 41,
28 :     27, 28, 30, 32, 35, 38, 41, 45
29 : Isibaar 1.1 };
30 :    
31 : edgomez 1.13 uint16_t intra_matrix_fixfix[64] = {
32 :     0, 0, 0, 0, 0, 0, 0, 0,
33 :     0, 0, 0, 0, 0, 0, 0, 0,
34 :     0, 0, 0, 0, 0, 0, 0, 0,
35 :     0, 0, 0, 0, 0, 0, 0, 0,
36 :     0, 0, 0, 0, 0, 0, 0, 0,
37 :     0, 0, 0, 0, 0, 0, 0, 0,
38 :     0, 0, 0, 0, 0, 0, 0, 0,
39 :     0, 0, 0, 0, 0, 0, 0, 0
40 :     };
41 :    
42 :     uint16_t inter_matrix_fixfix[64] = {
43 :     0, 0, 0, 0, 0, 0, 0, 0,
44 :     0, 0, 0, 0, 0, 0, 0, 0,
45 :     0, 0, 0, 0, 0, 0, 0, 0,
46 :     0, 0, 0, 0, 0, 0, 0, 0,
47 :     0, 0, 0, 0, 0, 0, 0, 0,
48 :     0, 0, 0, 0, 0, 0, 0, 0,
49 :     0, 0, 0, 0, 0, 0, 0, 0,
50 :     0, 0, 0, 0, 0, 0, 0, 0
51 :     };
52 :    
53 :     uint16_t intra_matrix1[64] = {
54 :     8>>1, 17>>1, 18>>1, 19>>1, 21>>1, 23>>1, 25>>1, 27>>1,
55 :     17>>1, 18>>1, 19>>1, 21>>1, 23>>1, 25>>1, 27>>1, 28>>1,
56 :     20>>1, 21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 28>>1, 30>>1,
57 :     21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 28>>1, 30>>1, 32>>1,
58 :     22>>1, 23>>1, 24>>1, 26>>1, 28>>1, 30>>1, 32>>1, 35>>1,
59 :     23>>1, 24>>1, 26>>1, 28>>1, 30>>1, 32>>1, 35>>1, 38>>1,
60 :     25>>1, 26>>1, 28>>1, 30>>1, 32>>1, 35>>1, 38>>1, 41>>1,
61 :     27>>1, 28>>1, 30>>1, 32>>1, 35>>1, 38>>1, 41>>1, 45>>1
62 :     };
63 :    
64 :    
65 :     uint16_t intra_matrix_fix[64] = {
66 : edgomez 1.5 FIX(8), FIX(17), FIX(18), FIX(19), FIX(21), FIX(23), FIX(25), FIX(27),
67 :     FIX(17), FIX(18), FIX(19), FIX(21), FIX(23), FIX(25), FIX(27), FIX(28),
68 :     FIX(20), FIX(21), FIX(22), FIX(23), FIX(24), FIX(26), FIX(28), FIX(30),
69 :     FIX(21), FIX(22), FIX(23), FIX(24), FIX(26), FIX(28), FIX(30), FIX(32),
70 :     FIX(22), FIX(23), FIX(24), FIX(26), FIX(28), FIX(30), FIX(32), FIX(35),
71 :     FIX(23), FIX(24), FIX(26), FIX(28), FIX(30), FIX(32), FIX(35), FIX(38),
72 :     FIX(25), FIX(26), FIX(28), FIX(30), FIX(32), FIX(35), FIX(38), FIX(41),
73 :     FIX(27), FIX(28), FIX(30), FIX(32), FIX(35), FIX(38), FIX(41), FIX(45)
74 : Isibaar 1.2 };
75 :    
76 : edgomez 1.13 uint16_t intra_matrix_fixl[64] = {
77 :     FIXL(8), FIXL(17), FIXL(18), FIXL(19), FIXL(21), FIXL(23), FIXL(25), FIXL(27),
78 :     FIXL(17), FIXL(18), FIXL(19), FIXL(21), FIXL(23), FIXL(25), FIXL(27), FIXL(28),
79 :     FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30),
80 :     FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30), FIXL(32),
81 :     FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30), FIXL(32), FIXL(35),
82 :     FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30), FIXL(32), FIXL(35), FIXL(38),
83 :     FIXL(25), FIXL(26), FIXL(28), FIXL(30), FIXL(32), FIXL(35), FIXL(38), FIXL(41),
84 :     FIXL(27), FIXL(28), FIXL(30), FIXL(32), FIXL(35), FIXL(38), FIXL(41), FIXL(45)
85 :     };
86 :    
87 :     uint16_t inter_matrix_fixl[64] = {
88 :     FIXL(16), FIXL(17), FIXL(18), FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23),
89 :     FIXL(17), FIXL(18), FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24),
90 :     FIXL(18), FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(25),
91 :     FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(27),
92 :     FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(25), FIXL(26), FIXL(27), FIXL(28),
93 :     FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(27), FIXL(28), FIXL(30),
94 :     FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(27), FIXL(28), FIXL(30), FIXL(31),
95 :     FIXL(23), FIXL(24), FIXL(25), FIXL(27), FIXL(28), FIXL(30), FIXL(31), FIXL(33)
96 :     };
97 :    
98 : edgomez 1.8 uint8_t default_inter_matrix[64] = {
99 : edgomez 1.5 16, 17, 18, 19, 20, 21, 22, 23,
100 :     17, 18, 19, 20, 21, 22, 23, 24,
101 :     18, 19, 20, 21, 22, 23, 24, 25,
102 :     19, 20, 21, 22, 23, 24, 26, 27,
103 :     20, 21, 22, 23, 25, 26, 27, 28,
104 :     21, 22, 23, 24, 26, 27, 28, 30,
105 :     22, 23, 24, 26, 27, 28, 30, 31,
106 :     23, 24, 25, 27, 28, 30, 31, 33
107 : Isibaar 1.3 };
108 :    
109 : edgomez 1.7 int16_t inter_matrix[64] = {
110 : edgomez 1.5 16, 17, 18, 19, 20, 21, 22, 23,
111 :     17, 18, 19, 20, 21, 22, 23, 24,
112 :     18, 19, 20, 21, 22, 23, 24, 25,
113 :     19, 20, 21, 22, 23, 24, 26, 27,
114 :     20, 21, 22, 23, 25, 26, 27, 28,
115 :     21, 22, 23, 24, 26, 27, 28, 30,
116 :     22, 23, 24, 26, 27, 28, 30, 31,
117 :     23, 24, 25, 27, 28, 30, 31, 33
118 : Isibaar 1.1 };
119 : edgomez 1.13 uint16_t inter_matrix1[64] = {
120 :     16>>1, 17>>1, 18>>1, 19>>1, 20>>1, 21>>1, 22>>1, 23>>1,
121 :     17>>1, 18>>1, 19>>1, 20>>1, 21>>1, 22>>1, 23>>1, 24>>1,
122 :     18>>1, 19>>1, 20>>1, 21>>1, 22>>1, 23>>1, 24>>1, 25>>1,
123 :     19>>1, 20>>1, 21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 27>>1,
124 :     20>>1, 21>>1, 22>>1, 23>>1, 25>>1, 26>>1, 27>>1, 28>>1,
125 :     21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 27>>1, 28>>1, 30>>1,
126 :     22>>1, 23>>1, 24>>1, 26>>1, 27>>1, 28>>1, 30>>1, 31>>1,
127 :     23>>1, 24>>1, 25>>1, 27>>1, 28>>1, 30>>1, 31>>1, 33>>1
128 :     };
129 : Isibaar 1.1
130 : edgomez 1.13 uint16_t inter_matrix_fix[64] = {
131 : edgomez 1.5 FIX(16), FIX(17), FIX(18), FIX(19), FIX(20), FIX(21), FIX(22), FIX(23),
132 :     FIX(17), FIX(18), FIX(19), FIX(20), FIX(21), FIX(22), FIX(23), FIX(24),
133 :     FIX(18), FIX(19), FIX(20), FIX(21), FIX(22), FIX(23), FIX(24), FIX(25),
134 :     FIX(19), FIX(20), FIX(21), FIX(22), FIX(23), FIX(24), FIX(26), FIX(27),
135 :     FIX(20), FIX(21), FIX(22), FIX(23), FIX(25), FIX(26), FIX(27), FIX(28),
136 :     FIX(21), FIX(22), FIX(23), FIX(24), FIX(26), FIX(27), FIX(28), FIX(30),
137 :     FIX(22), FIX(23), FIX(24), FIX(26), FIX(27), FIX(28), FIX(30), FIX(31),
138 :     FIX(23), FIX(24), FIX(25), FIX(27), FIX(28), FIX(30), FIX(31), FIX(33)
139 : Isibaar 1.2 };
140 : edgomez 1.6
141 : edgomez 1.5 uint8_t
142 :     get_intra_matrix_status(void)
143 :     {
144 : Isibaar 1.3 return custom_intra_matrix;
145 : Isibaar 1.2 }
146 : Isibaar 1.1
147 : edgomez 1.5 uint8_t
148 :     get_inter_matrix_status(void)
149 :     {
150 : Isibaar 1.3 return custom_inter_matrix;
151 : Isibaar 1.2 }
152 :    
153 : edgomez 1.5 void
154 :     set_intra_matrix_status(uint8_t status)
155 :     {
156 : Isibaar 1.3 custom_intra_matrix = status;
157 : Isibaar 1.2 }
158 : Isibaar 1.1
159 : edgomez 1.5 void
160 :     set_inter_matrix_status(uint8_t status)
161 :     {
162 : Isibaar 1.3 custom_inter_matrix = status;
163 : Isibaar 1.2 }
164 : Isibaar 1.1
165 : edgomez 1.5 int16_t *
166 :     get_intra_matrix(void)
167 :     {
168 : Isibaar 1.2 return intra_matrix;
169 : Isibaar 1.1 }
170 :    
171 : edgomez 1.5 int16_t *
172 :     get_inter_matrix(void)
173 :     {
174 : Isibaar 1.4 return inter_matrix;
175 :     }
176 :    
177 : edgomez 1.5 uint8_t *
178 :     get_default_intra_matrix(void)
179 :     {
180 : Isibaar 1.3 return default_intra_matrix;
181 :     }
182 :    
183 : edgomez 1.5 uint8_t *
184 :     get_default_inter_matrix(void)
185 :     {
186 : Isibaar 1.3 return default_inter_matrix;
187 : Isibaar 1.2 }
188 : Isibaar 1.1
189 : edgomez 1.5 uint8_t
190 :     set_intra_matrix(uint8_t * matrix)
191 : Isibaar 1.1 {
192 : Isibaar 1.3 int i, change = 0;
193 : edgomez 1.5
194 : Isibaar 1.3 custom_intra_matrix = 0;
195 : Isibaar 1.2
196 : edgomez 1.5 for (i = 0; i < 64; i++) {
197 :     if ((int16_t) default_intra_matrix[i] != matrix[i])
198 : Isibaar 1.3 custom_intra_matrix = 1;
199 : edgomez 1.5 if (intra_matrix[i] != matrix[i])
200 : Isibaar 1.3 change = 1;
201 : Isibaar 1.2
202 : edgomez 1.13 intra_matrix1[i] = ((intra_matrix[i] = (int16_t) matrix[i])>>1);
203 :     intra_matrix1[i] += ((intra_matrix[i] == 1) ? 1: 0);
204 : Isibaar 1.2 intra_matrix_fix[i] = FIX(intra_matrix[i]);
205 : edgomez 1.13 intra_matrix_fixl[i] = FIXL(intra_matrix[i]);
206 : Isibaar 1.1 }
207 : edgomez 1.13 return custom_intra_matrix | change;
208 : Isibaar 1.2 }
209 : Isibaar 1.1
210 : Isibaar 1.2
211 : edgomez 1.5 uint8_t
212 :     set_inter_matrix(uint8_t * matrix)
213 : Isibaar 1.2 {
214 : Isibaar 1.3 int i, change = 0;
215 : edgomez 1.5
216 : Isibaar 1.3 custom_inter_matrix = 0;
217 : Isibaar 1.2
218 : edgomez 1.5 for (i = 0; i < 64; i++) {
219 :     if ((int16_t) default_inter_matrix[i] != matrix[i])
220 : Isibaar 1.3 custom_inter_matrix = 1;
221 : edgomez 1.5 if (inter_matrix[i] != matrix[i])
222 : Isibaar 1.3 change = 1;
223 : Isibaar 1.2
224 : edgomez 1.13 inter_matrix1[i] = ((inter_matrix[i] = (int16_t) matrix[i])>>1);
225 :     inter_matrix1[i] += ((inter_matrix[i] == 1) ? 1: 0);
226 : Isibaar 1.2 inter_matrix_fix[i] = FIX(inter_matrix[i]);
227 : edgomez 1.13 inter_matrix_fixl[i] = FIXL(inter_matrix[i]);
228 : Isibaar 1.2 }
229 : edgomez 1.13 return custom_inter_matrix | change;
230 : Isibaar 1.1 }

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4