[svn] / branches / dev-api-4 / xvidcore / src / quant / quant_matrix.c Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/src/quant/quant_matrix.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4, Fri Mar 8 19:17:46 2002 UTC revision 851, Sat Feb 15 15:22:19 2003 UTC
# Line 1  Line 1 
1  #include "quant_matrix.h"  #include "quant_matrix.h"
2    
3  #define FIX(X) (1 << 16) / (X) + 1  #define FIX(X)   (((X)==1) ? 0xFFFF : ((1UL << 16) / (X) + 1))
4    #define FIXL(X)    ((1UL << 16) / (X) - 1)
5    
6  uint8_t intra_matrix_changed;  uint8_t custom_intra_matrix = 0;
7  uint8_t inter_matrix_changed;  uint8_t custom_inter_matrix = 0;
8    
9    uint8_t default_intra_matrix[64] = {
10            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    };
19    
20  int16_t intra_matrix[64] = {  int16_t intra_matrix[64] = {
21       8,17,18,19,21,23,25,27,       8,17,18,19,21,23,25,27,
# Line 16  Line 28 
28      27,28,30,32,35,38,41,45      27,28,30,32,35,38,41,45
29  };  };
30    
31  int16_t intra_matrix_fix[64] = {  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       FIX(8),FIX(17),FIX(18),FIX(19),FIX(21),FIX(23),FIX(25),FIX(27),       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),      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),      FIX(20),FIX(21),FIX(22),FIX(23),FIX(24),FIX(26),FIX(28),FIX(30),
# Line 27  Line 73 
73      FIX(27),FIX(28),FIX(30),FIX(32),FIX(35),FIX(38),FIX(41),FIX(45)      FIX(27),FIX(28),FIX(30),FIX(32),FIX(35),FIX(38),FIX(41),FIX(45)
74  };  };
75    
76    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    uint8_t default_inter_matrix[64] = {
99            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    };
108    
109  int16_t inter_matrix[64] = {  int16_t inter_matrix[64] = {
110      16,17,18,19,20,21,22,23,      16,17,18,19,20,21,22,23,
111      17,18,19,20,21,22,23,24,      17,18,19,20,21,22,23,24,
# Line 37  Line 116 
116      22,23,24,26,27,28,30,31,      22,23,24,26,27,28,30,31,
117      23,24,25,27,28,30,31,33      23,24,25,27,28,30,31,33
118  };  };
119    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    
130  int16_t inter_matrix_fix[64] = {  uint16_t inter_matrix_fix[64] = {
131      FIX(16),FIX(17),FIX(18),FIX(19),FIX(20),FIX(21),FIX(22),FIX(23),      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),      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),      FIX(18),FIX(19),FIX(20),FIX(21),FIX(22),FIX(23),FIX(24),FIX(25),
# Line 49  Line 138 
138      FIX(23),FIX(24),FIX(25),FIX(27),FIX(28),FIX(30),FIX(31),FIX(33)      FIX(23),FIX(24),FIX(25),FIX(27),FIX(28),FIX(30),FIX(31),FIX(33)
139  };  };
140    
141  uint8_t get_intra_matrix_status(void) {  uint8_t
142          return intra_matrix_changed;  get_intra_matrix_status(void)
143    {
144            return custom_intra_matrix;
145  }  }
146    
147  uint8_t get_inter_matrix_status(void) {  uint8_t
148          return inter_matrix_changed;  get_inter_matrix_status(void)
149    {
150            return custom_inter_matrix;
151  }  }
152    
153  void set_intra_matrix_status(uint8_t status) {  void
154          intra_matrix_changed = status;  set_intra_matrix_status(uint8_t status)
155    {
156            custom_intra_matrix = status;
157  }  }
158    
159  void set_inter_matrix_status(uint8_t status) {  void
160          inter_matrix_changed = status;  set_inter_matrix_status(uint8_t status)
161    {
162            custom_inter_matrix = status;
163  }  }
164    
165  int16_t *get_intra_matrix(void) {  int16_t *
166    get_intra_matrix(void)
167    {
168          return intra_matrix;          return intra_matrix;
169  }  }
170    
171  int16_t *get_inter_matrix(void) {  int16_t *
172    get_inter_matrix(void)
173    {
174          return inter_matrix;          return inter_matrix;
175  }  }
176    
177  uint8_t set_intra_matrix(uint8_t *matrix)  uint8_t *
178    get_default_intra_matrix(void)
179    {
180            return default_intra_matrix;
181    }
182    
183    uint8_t *
184    get_default_inter_matrix(void)
185    {
186            return default_inter_matrix;
187    }
188    
189    uint8_t
190    set_intra_matrix(uint8_t * matrix)
191  {  {
192          int i;          int i, change = 0;
193    
194          intra_matrix_changed = 0;          custom_intra_matrix = 0;
195    
196          for(i = 0; i < 64; i++) {          for(i = 0; i < 64; i++) {
197                    if ((int16_t) default_intra_matrix[i] != matrix[i])
198                            custom_intra_matrix = 1;
199                  if(intra_matrix[i] != matrix[i])                  if(intra_matrix[i] != matrix[i])
200                          intra_matrix_changed = 1;                          change = 1;
201    
202                  intra_matrix[i] = (int16_t) matrix[i];                  intra_matrix1[i] = ((intra_matrix[i] = (int16_t) matrix[i])>>1);
203                    intra_matrix1[i] += ((intra_matrix[i] == 1) ? 1: 0);
204                  intra_matrix_fix[i] = FIX(intra_matrix[i]);                  intra_matrix_fix[i] = FIX(intra_matrix[i]);
205                    intra_matrix_fixl[i] = FIXL(intra_matrix[i]);
206          }          }
207          return intra_matrix_changed;          return custom_intra_matrix | change;
208  }  }
209    
210    
211  uint8_t set_inter_matrix(uint8_t *matrix)  uint8_t
212    set_inter_matrix(uint8_t * matrix)
213  {  {
214          int i;          int i, change = 0;
215    
216          inter_matrix_changed = 0;          custom_inter_matrix = 0;
217    
218          for(i = 0; i < 64; i++) {          for(i = 0; i < 64; i++) {
219                    if ((int16_t) default_inter_matrix[i] != matrix[i])
220                            custom_inter_matrix = 1;
221                  if(inter_matrix[i] != matrix[i])                  if(inter_matrix[i] != matrix[i])
222                          inter_matrix_changed = 1;                          change = 1;
223    
224                  inter_matrix[i] = (int16_t) matrix[i];                  inter_matrix1[i] = ((inter_matrix[i] = (int16_t) matrix[i])>>1);
225                    inter_matrix1[i] += ((inter_matrix[i] == 1) ? 1: 0);
226                  inter_matrix_fix[i] = FIX(inter_matrix[i]);                  inter_matrix_fix[i] = FIX(inter_matrix[i]);
227                    inter_matrix_fixl[i] = FIXL(inter_matrix[i]);
228          }          }
229          return inter_matrix_changed;          return custom_inter_matrix | change;
230  }  }

Legend:
Removed from v.4  
changed lines
  Added in v.851

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