139 |
int16_t * dctSpace; |
int16_t * dctSpace; |
140 |
uint32_t iQuant; |
uint32_t iQuant; |
141 |
uint32_t quant_type; |
uint32_t quant_type; |
142 |
|
int * cbp; |
143 |
|
|
144 |
} SearchData; |
} SearchData; |
145 |
|
|
348 |
static int |
static int |
349 |
CountMBBitsIntra(const SearchData * const Data); |
CountMBBitsIntra(const SearchData * const Data); |
350 |
|
|
351 |
|
static int |
352 |
|
CountMBBitsGMC(const SearchData * const Data, const IMAGE * const vGMC, const int x, const int y); |
353 |
|
|
354 |
int CodeCoeffIntra_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag); |
int CodeCoeffIntra_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag); |
355 |
int CodeCoeffInter_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag); |
int CodeCoeffInter_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag); |
356 |
|
|
372 |
|
|
373 |
fdct(data); |
fdct(data); |
374 |
|
|
375 |
if (quant_type == 0) sum = quant_inter(coeff, data, quant); |
if (quant_type) sum = quant_inter(coeff, data, quant); |
376 |
else sum = quant4_inter(coeff, data, quant); |
else sum = quant4_inter(coeff, data, quant); |
377 |
|
|
378 |
if (sum > 0) { |
if (sum > 0) { |
379 |
*cbp |= 1 << (5 - block); |
*cbp |= 1 << (5 - block); |
380 |
bits = BITS_MULT * CodeCoeffInter_CalcBits(coeff, scan_tables[0]); |
bits = BITS_MULT * CodeCoeffInter_CalcBits(coeff, scan_tables[0]); |
|
} else bits = 0; |
|
381 |
|
|
382 |
if (quant_type == 0) dequant_inter(dqcoeff, coeff, quant); |
if (quant_type) dequant_inter(dqcoeff, coeff, quant); |
383 |
else dequant4_inter(dqcoeff, coeff, quant); |
else dequant4_inter(dqcoeff, coeff, quant); |
384 |
|
|
385 |
for (i = 0; i < 64; i++) { |
for (i = 0; i < 64; i++) |
386 |
distortion += (data[i] - dqcoeff[i])*(data[i] - dqcoeff[i]); |
distortion += (data[i] - dqcoeff[i])*(data[i] - dqcoeff[i]); |
387 |
|
|
388 |
|
} else { |
389 |
|
bits = 0; |
390 |
|
for (i = 0; i < 64; i++) |
391 |
|
distortion += data[i]*data[i]; |
392 |
} |
} |
393 |
|
|
394 |
|
|
395 |
bits += (LAMBDA*distortion)/(quant*quant); |
bits += (LAMBDA*distortion)/(quant*quant); |
396 |
|
|
397 |
return bits; |
return bits; |
414 |
fdct(data); |
fdct(data); |
415 |
data[0] -= 1024; |
data[0] -= 1024; |
416 |
|
|
417 |
if (quant_type == 0) quant_intra(coeff, data, quant, iDcScaler); |
if (quant_type) quant_intra(coeff, data, quant, iDcScaler); |
418 |
else quant4_intra(coeff, data, quant, iDcScaler); |
else quant4_intra(coeff, data, quant, iDcScaler); |
419 |
|
|
420 |
b_dc = coeff[0]; |
b_dc = coeff[0]; |
430 |
else bits += BITS_MULT*dcc_tab[coeff[0] + 255].len; |
else bits += BITS_MULT*dcc_tab[coeff[0] + 255].len; |
431 |
|
|
432 |
coeff[0] = b_dc; |
coeff[0] = b_dc; |
433 |
if (quant_type == 0) dequant_intra(dqcoeff, coeff, quant, iDcScaler); |
if (quant_type) dequant_intra(dqcoeff, coeff, quant, iDcScaler); |
434 |
else dequant4_intra(dqcoeff, coeff, quant, iDcScaler); |
else dequant4_intra(dqcoeff, coeff, quant, iDcScaler); |
435 |
|
|
436 |
for (i = 0; i < 64; i++) { |
for (i = 0; i < 64; i++) { |