[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

trunk/xvidcore/src/quant/quant_matrix.c revision 21, Sun Mar 10 00:30:55 2002 UTC branches/dev-api-4/xvidcore/src/quant/quant_matrix.c revision 1054, Mon Jun 9 13:55:56 2003 UTC
# Line 1  Line 1 
1    /*****************************************************************************
2     *
3     *  XVID MPEG-4 VIDEO CODEC
4     *  - Quantization matrix management code  -
5     *
6     *  Copyright(C) 2002 Michael Militzer <isibaar@xvid.org>
7     *               2002 Peter Ross <pross@xvid.org>
8     *
9     *  This program is free software ; you can redistribute it and/or modify
10     *  it under the terms of the GNU General Public License as published by
11     *  the Free Software Foundation ; either version 2 of the License, or
12     *  (at your option) any later version.
13     *
14     *  This program is distributed in the hope that it will be useful,
15     *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
16     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17     *  GNU General Public License for more details.
18     *
19     *  You should have received a copy of the GNU General Public License
20     *  along with this program ; if not, write to the Free Software
21     *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
22     *
23     * $Id: quant_matrix.c,v 1.13.2.1 2003-06-09 13:55:19 edgomez Exp $
24     *
25     ****************************************************************************/
26    
27  #include "quant_matrix.h"  #include "quant_matrix.h"
28    
29  #define FIX(X) (1 << 16) / (X) + 1  #define FIX(X)   (((X)==1) ? 0xFFFF : ((1UL << 16) / (X) + 1))
30    #define FIXL(X)    ((1UL << 16) / (X) - 1)
31    
32  uint8_t custom_intra_matrix = 0;  uint8_t custom_intra_matrix = 0;
33  uint8_t custom_inter_matrix = 0;  uint8_t custom_inter_matrix = 0;
# Line 27  Line 54 
54      27,28,30,32,35,38,41,45      27,28,30,32,35,38,41,45
55  };  };
56    
57  int16_t intra_matrix_fix[64] = {  uint16_t intra_matrix_fixfix[64] = {
58            0, 0, 0, 0, 0, 0, 0, 0,
59            0, 0, 0, 0, 0, 0, 0, 0,
60            0, 0, 0, 0, 0, 0, 0, 0,
61            0, 0, 0, 0, 0, 0, 0, 0,
62            0, 0, 0, 0, 0, 0, 0, 0,
63            0, 0, 0, 0, 0, 0, 0, 0,
64            0, 0, 0, 0, 0, 0, 0, 0,
65            0, 0, 0, 0, 0, 0, 0, 0
66    };
67    
68    uint16_t inter_matrix_fixfix[64] = {
69            0, 0, 0, 0, 0, 0, 0, 0,
70            0, 0, 0, 0, 0, 0, 0, 0,
71            0, 0, 0, 0, 0, 0, 0, 0,
72            0, 0, 0, 0, 0, 0, 0, 0,
73            0, 0, 0, 0, 0, 0, 0, 0,
74            0, 0, 0, 0, 0, 0, 0, 0,
75            0, 0, 0, 0, 0, 0, 0, 0,
76            0, 0, 0, 0, 0, 0, 0, 0
77    };
78    
79    uint16_t intra_matrix1[64] = {
80            8>>1, 17>>1, 18>>1, 19>>1, 21>>1, 23>>1, 25>>1, 27>>1,
81            17>>1, 18>>1, 19>>1, 21>>1, 23>>1, 25>>1, 27>>1, 28>>1,
82            20>>1, 21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 28>>1, 30>>1,
83            21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 28>>1, 30>>1, 32>>1,
84            22>>1, 23>>1, 24>>1, 26>>1, 28>>1, 30>>1, 32>>1, 35>>1,
85            23>>1, 24>>1, 26>>1, 28>>1, 30>>1, 32>>1, 35>>1, 38>>1,
86            25>>1, 26>>1, 28>>1, 30>>1, 32>>1, 35>>1, 38>>1, 41>>1,
87            27>>1, 28>>1, 30>>1, 32>>1, 35>>1, 38>>1, 41>>1, 45>>1
88    };
89    
90    
91    uint16_t intra_matrix_fix[64] = {
92       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),
93      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),
94      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 99 
99      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)
100  };  };
101    
102    uint16_t intra_matrix_fixl[64] = {
103            FIXL(8), FIXL(17), FIXL(18), FIXL(19), FIXL(21), FIXL(23), FIXL(25), FIXL(27),
104            FIXL(17), FIXL(18), FIXL(19), FIXL(21), FIXL(23), FIXL(25), FIXL(27), FIXL(28),
105            FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30),
106            FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30), FIXL(32),
107            FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30), FIXL(32), FIXL(35),
108            FIXL(23), FIXL(24), FIXL(26), FIXL(28), FIXL(30), FIXL(32), FIXL(35), FIXL(38),
109            FIXL(25), FIXL(26), FIXL(28), FIXL(30), FIXL(32), FIXL(35), FIXL(38), FIXL(41),
110            FIXL(27), FIXL(28), FIXL(30), FIXL(32), FIXL(35), FIXL(38), FIXL(41), FIXL(45)
111    };
112    
113    uint16_t inter_matrix_fixl[64] = {
114            FIXL(16), FIXL(17), FIXL(18), FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23),
115            FIXL(17), FIXL(18), FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24),
116            FIXL(18), FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(25),
117            FIXL(19), FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(27),
118            FIXL(20), FIXL(21), FIXL(22), FIXL(23), FIXL(25), FIXL(26), FIXL(27), FIXL(28),
119            FIXL(21), FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(27), FIXL(28), FIXL(30),
120            FIXL(22), FIXL(23), FIXL(24), FIXL(26), FIXL(27), FIXL(28), FIXL(30), FIXL(31),
121            FIXL(23), FIXL(24), FIXL(25), FIXL(27), FIXL(28), FIXL(30), FIXL(31), FIXL(33)
122    };
123    
124  uint8_t default_inter_matrix[64] = {  uint8_t default_inter_matrix[64] = {
125      16,17,18,19,20,21,22,23,      16,17,18,19,20,21,22,23,
126      17,18,19,20,21,22,23,24,      17,18,19,20,21,22,23,24,
# Line 59  Line 142 
142      22,23,24,26,27,28,30,31,      22,23,24,26,27,28,30,31,
143      23,24,25,27,28,30,31,33      23,24,25,27,28,30,31,33
144  };  };
145    uint16_t inter_matrix1[64] = {
146            16>>1, 17>>1, 18>>1, 19>>1, 20>>1, 21>>1, 22>>1, 23>>1,
147            17>>1, 18>>1, 19>>1, 20>>1, 21>>1, 22>>1, 23>>1, 24>>1,
148            18>>1, 19>>1, 20>>1, 21>>1, 22>>1, 23>>1, 24>>1, 25>>1,
149            19>>1, 20>>1, 21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 27>>1,
150            20>>1, 21>>1, 22>>1, 23>>1, 25>>1, 26>>1, 27>>1, 28>>1,
151            21>>1, 22>>1, 23>>1, 24>>1, 26>>1, 27>>1, 28>>1, 30>>1,
152            22>>1, 23>>1, 24>>1, 26>>1, 27>>1, 28>>1, 30>>1, 31>>1,
153            23>>1, 24>>1, 25>>1, 27>>1, 28>>1, 30>>1, 31>>1, 33>>1
154    };
155    
156  int16_t inter_matrix_fix[64] = {  uint16_t inter_matrix_fix[64] = {
157      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),
158      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),
159      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 164 
164      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)
165  };  };
166    
167  uint8_t get_intra_matrix_status(void) {  uint8_t
168    get_intra_matrix_status(void)
169    {
170          return custom_intra_matrix;          return custom_intra_matrix;
171  }  }
172    
173  uint8_t get_inter_matrix_status(void) {  uint8_t
174    get_inter_matrix_status(void)
175    {
176          return custom_inter_matrix;          return custom_inter_matrix;
177  }  }
178    
179  void set_intra_matrix_status(uint8_t status) {  void
180    set_intra_matrix_status(uint8_t status)
181    {
182          custom_intra_matrix = status;          custom_intra_matrix = status;
183  }  }
184    
185  void set_inter_matrix_status(uint8_t status) {  void
186    set_inter_matrix_status(uint8_t status)
187    {
188          custom_inter_matrix = status;          custom_inter_matrix = status;
189  }  }
190    
191  int16_t *get_intra_matrix(void) {  int16_t *
192    get_intra_matrix(void)
193    {
194          return intra_matrix;          return intra_matrix;
195  }  }
196    
197  int16_t *get_inter_matrix(void) {  int16_t *
198    get_inter_matrix(void)
199    {
200          return inter_matrix;          return inter_matrix;
201  }  }
202    
203  uint8_t *get_default_intra_matrix(void) {  uint8_t *
204    get_default_intra_matrix(void)
205    {
206          return default_intra_matrix;          return default_intra_matrix;
207  }  }
208    
209  uint8_t *get_default_inter_matrix(void) {  uint8_t *
210    get_default_inter_matrix(void)
211    {
212          return default_inter_matrix;          return default_inter_matrix;
213  }  }
214    
215  uint8_t set_intra_matrix(uint8_t *matrix)  uint8_t
216    set_intra_matrix(uint8_t * matrix)
217  {  {
218          int i, change = 0;          int i, change = 0;
219    
# Line 115  Line 225 
225                  if(intra_matrix[i] != matrix[i])                  if(intra_matrix[i] != matrix[i])
226                          change = 1;                          change = 1;
227    
228                  intra_matrix[i] = (int16_t) matrix[i];                  intra_matrix1[i] = ((intra_matrix[i] = (int16_t) matrix[i])>>1);
229                    intra_matrix1[i] += ((intra_matrix[i] == 1) ? 1: 0);
230                  intra_matrix_fix[i] = FIX(intra_matrix[i]);                  intra_matrix_fix[i] = FIX(intra_matrix[i]);
231                    intra_matrix_fixl[i] = FIXL(intra_matrix[i]);
232          }          }
233          return custom_intra_matrix | change;          return custom_intra_matrix | change;
234  }  }
235    
236    
237  uint8_t set_inter_matrix(uint8_t *matrix)  uint8_t
238    set_inter_matrix(uint8_t * matrix)
239  {  {
240          int i, change = 0;          int i, change = 0;
241    
# Line 134  Line 247 
247                  if(inter_matrix[i] != matrix[i])                  if(inter_matrix[i] != matrix[i])
248                          change = 1;                          change = 1;
249    
250                  inter_matrix[i] = (int16_t) matrix[i];                  inter_matrix1[i] = ((inter_matrix[i] = (int16_t) matrix[i])>>1);
251                    inter_matrix1[i] += ((inter_matrix[i] == 1) ? 1: 0);
252                  inter_matrix_fix[i] = FIX(inter_matrix[i]);                  inter_matrix_fix[i] = FIX(inter_matrix[i]);
253                    inter_matrix_fixl[i] = FIXL(inter_matrix[i]);
254          }          }
255          return custom_inter_matrix | change;          return custom_inter_matrix | change;
256  }  }

Legend:
Removed from v.21  
changed lines
  Added in v.1054

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