[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 20, Sat Mar 9 21:44:47 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 custom_intra_matrix = 0;  uint8_t custom_intra_matrix = 0;
7  uint8_t custom_inter_matrix = 0;  uint8_t custom_inter_matrix = 0;
# Line 27  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 38  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] = {  uint8_t default_inter_matrix[64] = {
99      16,17,18,19,20,21,22,23,      16,17,18,19,20,21,22,23,
100      17,18,19,20,21,22,23,24,      17,18,19,20,21,22,23,24,
# Line 59  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 71  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    get_intra_matrix_status(void)
143    {
144          return custom_intra_matrix;          return custom_intra_matrix;
145  }  }
146    
147  uint8_t get_inter_matrix_status(void) {  uint8_t
148    get_inter_matrix_status(void)
149    {
150          return custom_inter_matrix;          return custom_inter_matrix;
151  }  }
152    
153  void set_intra_matrix_status(uint8_t status) {  void
154    set_intra_matrix_status(uint8_t status)
155    {
156          custom_intra_matrix = status;          custom_intra_matrix = status;
157  }  }
158    
159  void set_inter_matrix_status(uint8_t status) {  void
160    set_inter_matrix_status(uint8_t status)
161    {
162          custom_inter_matrix = status;          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  uint8_t *get_default_intra_matrix(void) {  int16_t *
172    get_inter_matrix(void)
173    {
174            return inter_matrix;
175    }
176    
177    uint8_t *
178    get_default_intra_matrix(void)
179    {
180          return default_intra_matrix;          return default_intra_matrix;
181  }  }
182    
183  uint8_t *get_default_inter_matrix(void) {  uint8_t *
184    get_default_inter_matrix(void)
185    {
186          return default_inter_matrix;          return default_inter_matrix;
187  }  }
188    
189  uint8_t set_intra_matrix(uint8_t *matrix)  uint8_t
190    set_intra_matrix(uint8_t * matrix)
191  {  {
192          int i, change = 0;          int i, change = 0;
193    
# Line 111  Line 199 
199                  if(intra_matrix[i] != matrix[i])                  if(intra_matrix[i] != matrix[i])
200                          change = 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 custom_intra_matrix | change;          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, change = 0;          int i, change = 0;
215    
# Line 130  Line 221 
221                  if(inter_matrix[i] != matrix[i])                  if(inter_matrix[i] != matrix[i])
222                          change = 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 custom_inter_matrix | change;          return custom_inter_matrix | change;
230  }  }

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

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