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

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

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