[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 447, Sat Sep 7 14:16:13 2002 UTC branches/dev-api-4/xvidcore/src/quant/quant_matrix.c revision 886, Fri Feb 21 14:49:29 2003 UTC
# Line 1  Line 1 
 /*****************************************************************************  
  *  
  *  XVID MPEG-4 VIDEO CODEC  
  *  - Custom matrix quantization functions -  
  *  
  *  Copyright(C) 2002 Michael Militzer  
  *  
  *  This program is an implementation of a part of one or more MPEG-4  
  *  Video tools as specified in ISO/IEC 14496-2 standard.  Those intending  
  *  to use this software module in hardware or software products are  
  *  advised that its use may infringe existing patents or copyrights, and  
  *  any such use would be at such party's own risk.  The original  
  *  developer of this software module and his/her company, and subsequent  
  *  editors and their companies, will have no liability for use of this  
  *  software or modifications or derivatives thereof.  
  *  
  *  This program is free software ; you can redistribute it and/or modify  
  *  it under the terms of the GNU General Public License as published by  
  *  the Free Software Foundation ; either version 2 of the License, or  
  *  (at your option) any later version.  
  *  
  *  This program is distributed in the hope that it will be useful,  
  *  but WITHOUT ANY WARRANTY ; without even the implied warranty of  
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
  *  GNU General Public License for more details.  
  *  
  *  You should have received a copy of the GNU General Public License  
  *  along with this program ; if not, write to the Free Software  
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  
  *  
  *  $Id: quant_matrix.c,v 1.7 2002-09-07 14:16:13 edgomez Exp $  
  *  
  ****************************************************************************/  
   
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)
 /*****************************************************************************  
  * Local data  
  ****************************************************************************/  
5    
 /* ToDo : remove all this local to make this module thread safe */  
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;
8    
9  uint8_t const default_intra_matrix[64] = {  uint8_t default_intra_matrix[64] = {
10          8, 17, 18, 19, 21, 23, 25, 27,          8, 17, 18, 19, 21, 23, 25, 27,
11          17, 18, 19, 21, 23, 25, 27, 28,          17, 18, 19, 21, 23, 25, 27, 28,
12          20, 21, 22, 23, 24, 26, 28, 30,          20, 21, 22, 23, 24, 26, 28, 30,
# Line 66  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 77  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  uint8_t const default_inter_matrix[64] = {  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,          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,
101          18, 19, 20, 21, 22, 23, 24, 25,          18, 19, 20, 21, 22, 23, 24, 25,
# Line 98  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 110  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    
 /*****************************************************************************  
  * Functions  
  ****************************************************************************/  
   
141  uint8_t  uint8_t
142  get_intra_matrix_status(void)  get_intra_matrix_status(void)
143  {  {
# Line 175  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  }  }
# Line 195  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.447  
changed lines
  Added in v.886

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