79 |
quant_mpeg_intra_c(int16_t * coeff, |
quant_mpeg_intra_c(int16_t * coeff, |
80 |
const int16_t * data, |
const int16_t * data, |
81 |
const uint32_t quant, |
const uint32_t quant, |
82 |
const uint32_t dcscalar) |
const uint32_t dcscalar, |
83 |
|
const uint16_t * mpeg_quant_matrices) |
84 |
{ |
{ |
85 |
const uint32_t quantd = ((VM18P * quant) + (VM18Q / 2)) / VM18Q; |
const uint32_t quantd = ((VM18P * quant) + (VM18Q / 2)) / VM18Q; |
86 |
const uint32_t mult = multipliers[quant]; |
const uint32_t mult = multipliers[quant]; |
87 |
const int16_t *intra_matrix = get_intra_matrix(); |
const uint16_t *intra_matrix = get_intra_matrix(mpeg_quant_matrices); |
|
uint32_t sum = 0; |
|
88 |
int i; |
int i; |
89 |
|
|
90 |
coeff[0] = DIV_DIV(data[0], (int32_t) dcscalar); |
coeff[0] = DIV_DIV(data[0], (int32_t) dcscalar); |
|
sum += coeff[0]; |
|
91 |
|
|
92 |
for (i = 1; i < 64; i++) { |
for (i = 1; i < 64; i++) { |
93 |
if (data[i] < 0) { |
if (data[i] < 0) { |
95 |
|
|
96 |
level = ((level << 4) + (intra_matrix[i] >> 1)) / intra_matrix[i]; |
level = ((level << 4) + (intra_matrix[i] >> 1)) / intra_matrix[i]; |
97 |
level = ((level + quantd) * mult) >> SCALEBITS; |
level = ((level + quantd) * mult) >> SCALEBITS; |
|
sum += level; |
|
98 |
coeff[i] = -(int16_t) level; |
coeff[i] = -(int16_t) level; |
99 |
} else if (data[i] > 0) { |
} else if (data[i] > 0) { |
100 |
uint32_t level = data[i]; |
uint32_t level = data[i]; |
101 |
|
|
102 |
level = ((level << 4) + (intra_matrix[i] >> 1)) / intra_matrix[i]; |
level = ((level << 4) + (intra_matrix[i] >> 1)) / intra_matrix[i]; |
103 |
level = ((level + quantd) * mult) >> SCALEBITS; |
level = ((level + quantd) * mult) >> SCALEBITS; |
|
sum += level; |
|
104 |
coeff[i] = level; |
coeff[i] = level; |
105 |
} else { |
} else { |
106 |
coeff[i] = 0; |
coeff[i] = 0; |
107 |
} |
} |
108 |
} |
} |
109 |
|
|
110 |
return(sum); |
return(0); |
111 |
} |
} |
112 |
|
|
113 |
/* quantize inter-block |
/* quantize inter-block |
120 |
uint32_t |
uint32_t |
121 |
quant_mpeg_inter_c(int16_t * coeff, |
quant_mpeg_inter_c(int16_t * coeff, |
122 |
const int16_t * data, |
const int16_t * data, |
123 |
const uint32_t quant) |
const uint32_t quant, |
124 |
|
const uint16_t * mpeg_quant_matrices) |
125 |
{ |
{ |
126 |
const uint32_t mult = multipliers[quant]; |
const uint32_t mult = multipliers[quant]; |
127 |
const int16_t *inter_matrix = get_inter_matrix(); |
const uint16_t *inter_matrix = get_inter_matrix(mpeg_quant_matrices); |
128 |
uint32_t sum = 0; |
uint32_t sum = 0; |
129 |
int i; |
int i; |
130 |
|
|
160 |
dequant_mpeg_intra_c(int16_t * data, |
dequant_mpeg_intra_c(int16_t * data, |
161 |
const int16_t * coeff, |
const int16_t * coeff, |
162 |
const uint32_t quant, |
const uint32_t quant, |
163 |
const uint32_t dcscalar) |
const uint32_t dcscalar, |
164 |
|
const uint16_t * mpeg_quant_matrices) |
165 |
{ |
{ |
166 |
const int16_t *intra_matrix = get_intra_matrix(); |
const uint16_t *intra_matrix = get_intra_matrix(mpeg_quant_matrices); |
167 |
int i; |
int i; |
168 |
|
|
169 |
data[0] = coeff[0] * dcscalar; |
data[0] = coeff[0] * dcscalar; |
200 |
uint32_t |
uint32_t |
201 |
dequant_mpeg_inter_c(int16_t * data, |
dequant_mpeg_inter_c(int16_t * data, |
202 |
const int16_t * coeff, |
const int16_t * coeff, |
203 |
const uint32_t quant) |
const uint32_t quant, |
204 |
|
const uint16_t * mpeg_quant_matrices) |
205 |
{ |
{ |
206 |
uint32_t sum = 0; |
uint32_t sum = 0; |
207 |
const int16_t *inter_matrix = get_inter_matrix(); |
const uint16_t *inter_matrix = get_inter_matrix(mpeg_quant_matrices); |
208 |
int i; |
int i; |
209 |
|
|
210 |
for (i = 0; i < 64; i++) { |
for (i = 0; i < 64; i++) { |