[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 519, Sun Sep 22 18:33:31 2002 UTC
# Line 1  Line 1 
1    /*****************************************************************************
2     *
3     *  XVID MPEG-4 VIDEO CODEC
4     *  - Custom matrix quantization functions -
5     *
6     *  Copyright(C) 2002 Michael Militzer
7     *
8     *  This program is an implementation of a part of one or more MPEG-4
9     *  Video tools as specified in ISO/IEC 14496-2 standard.  Those intending
10     *  to use this software module in hardware or software products are
11     *  advised that its use may infringe existing patents or copyrights, and
12     *  any such use would be at such party's own risk.  The original
13     *  developer of this software module and his/her company, and subsequent
14     *  editors and their companies, will have no liability for use of this
15     *  software or modifications or derivatives thereof.
16     *
17     *  This program is free software ; you can redistribute it and/or modify
18     *  it under the terms of the GNU General Public License as published by
19     *  the Free Software Foundation ; either version 2 of the License, or
20     *  (at your option) any later version.
21     *
22     *  This program is distributed in the hope that it will be useful,
23     *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
24     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25     *  GNU General Public License for more details.
26     *
27     *  You should have received a copy of the GNU General Public License
28     *  along with this program ; if not, write to the Free Software
29     *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
30     *
31     *  $Id: quant_matrix.c,v 1.9 2002-09-22 18:33:31 h Exp $
32     *
33     ****************************************************************************/
34    
35  #include "quant_matrix.h"  #include "quant_matrix.h"
36    
37  #define FIX(X) (1 << 16) / (X) + 1  #define FIX(X) (1 << 16) / (X) + 1
38    
39  uint8_t intra_matrix_changed;  /*****************************************************************************
40  uint8_t inter_matrix_changed;   * Local data
41     ****************************************************************************/
42    
43    /* ToDo : remove all this local to make this module thread safe */
44    uint8_t custom_intra_matrix = 0;
45    uint8_t custom_inter_matrix = 0;
46    
47    uint8_t default_intra_matrix[64] = {
48            8, 17, 18, 19, 21, 23, 25, 27,
49            17, 18, 19, 21, 23, 25, 27, 28,
50            20, 21, 22, 23, 24, 26, 28, 30,
51            21, 22, 23, 24, 26, 28, 30, 32,
52            22, 23, 24, 26, 28, 30, 32, 35,
53            23, 24, 26, 28, 30, 32, 35, 38,
54            25, 26, 28, 30, 32, 35, 38, 41,
55            27, 28, 30, 32, 35, 38, 41, 45
56    };
57    
58  int16_t intra_matrix[64] = {  int16_t intra_matrix[64] = {
59       8,17,18,19,21,23,25,27,       8,17,18,19,21,23,25,27,
# Line 27  Line 77 
77      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)
78  };  };
79    
80    uint8_t default_inter_matrix[64] = {
81            16, 17, 18, 19, 20, 21, 22, 23,
82            17, 18, 19, 20, 21, 22, 23, 24,
83            18, 19, 20, 21, 22, 23, 24, 25,
84            19, 20, 21, 22, 23, 24, 26, 27,
85            20, 21, 22, 23, 25, 26, 27, 28,
86            21, 22, 23, 24, 26, 27, 28, 30,
87            22, 23, 24, 26, 27, 28, 30, 31,
88            23, 24, 25, 27, 28, 30, 31, 33
89    };
90    
91  int16_t inter_matrix[64] = {  int16_t inter_matrix[64] = {
92      16,17,18,19,20,21,22,23,      16,17,18,19,20,21,22,23,
93      17,18,19,20,21,22,23,24,      17,18,19,20,21,22,23,24,
# Line 49  Line 110 
110      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)
111  };  };
112    
113  uint8_t get_intra_matrix_status(void) {  /*****************************************************************************
114          return intra_matrix_changed;   * Functions
115     ****************************************************************************/
116    
117    uint8_t
118    get_intra_matrix_status(void)
119    {
120            return custom_intra_matrix;
121  }  }
122    
123  uint8_t get_inter_matrix_status(void) {  uint8_t
124          return inter_matrix_changed;  get_inter_matrix_status(void)
125    {
126            return custom_inter_matrix;
127  }  }
128    
129  void set_intra_matrix_status(uint8_t status) {  void
130          intra_matrix_changed = status;  set_intra_matrix_status(uint8_t status)
131    {
132            custom_intra_matrix = status;
133  }  }
134    
135  void set_inter_matrix_status(uint8_t status) {  void
136          inter_matrix_changed = status;  set_inter_matrix_status(uint8_t status)
137    {
138            custom_inter_matrix = status;
139  }  }
140    
141  int16_t *get_intra_matrix(void) {  int16_t *
142    get_intra_matrix(void)
143    {
144          return intra_matrix;          return intra_matrix;
145  }  }
146    
147  int16_t *get_inter_matrix(void) {  int16_t *
148    get_inter_matrix(void)
149    {
150          return inter_matrix;          return inter_matrix;
151  }  }
152    
153  uint8_t set_intra_matrix(uint8_t *matrix)  uint8_t *
154    get_default_intra_matrix(void)
155    {
156            return default_intra_matrix;
157    }
158    
159    uint8_t *
160    get_default_inter_matrix(void)
161    {
162            return default_inter_matrix;
163    }
164    
165    uint8_t
166    set_intra_matrix(uint8_t * matrix)
167  {  {
168          int i;          int i, change = 0;
169    
170          intra_matrix_changed = 0;          custom_intra_matrix = 0;
171    
172          for(i = 0; i < 64; i++) {          for(i = 0; i < 64; i++) {
173                    if ((int16_t) default_intra_matrix[i] != matrix[i])
174                            custom_intra_matrix = 1;
175                  if(intra_matrix[i] != matrix[i])                  if(intra_matrix[i] != matrix[i])
176                          intra_matrix_changed = 1;                          change = 1;
177    
178                  intra_matrix[i] = (int16_t) matrix[i];                  intra_matrix[i] = (int16_t) matrix[i];
179                  intra_matrix_fix[i] = FIX(intra_matrix[i]);                  intra_matrix_fix[i] = FIX(intra_matrix[i]);
180          }          }
181          return intra_matrix_changed;          return /*custom_intra_matrix |*/ change;
182  }  }
183    
184    
185  uint8_t set_inter_matrix(uint8_t *matrix)  uint8_t
186    set_inter_matrix(uint8_t * matrix)
187  {  {
188          int i;          int i, change = 0;
189    
190          inter_matrix_changed = 0;          custom_inter_matrix = 0;
191    
192          for(i = 0; i < 64; i++) {          for(i = 0; i < 64; i++) {
193                    if ((int16_t) default_inter_matrix[i] != matrix[i])
194                            custom_inter_matrix = 1;
195                  if(inter_matrix[i] != matrix[i])                  if(inter_matrix[i] != matrix[i])
196                          inter_matrix_changed = 1;                          change = 1;
197    
198                  inter_matrix[i] = (int16_t) matrix[i];                  inter_matrix[i] = (int16_t) matrix[i];
199                  inter_matrix_fix[i] = FIX(inter_matrix[i]);                  inter_matrix_fix[i] = FIX(inter_matrix[i]);
200          }          }
201          return inter_matrix_changed;          return /*custom_inter_matrix |*/ change;
202  }  }

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

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