📄 simplequantize.cpp
字号:
/* Open H.264
*
* #include <standard_disclaimer>
*
* Authors: aitorgaray@yifan.net
* _
*/
#define __SIMPLEQUANTIZE_CC
#include "SimpleQuantize.h"
#include "../BlockIndexer.h"
#define ABS( value) ( ( ( int)( value)) < 0? -value: value)
void SimpleQuantize::do4x4Quantization( Block& sourceBlock, Block& targetBlock, int qp, bool intra, bool chroma) {
ASSERT( qp >=0 && qp <= 52);
if( chroma) {
qp = _qp_scale_cr[ qp];
}
int qp_per = qp / 6, // qp / 6 == ( 43 * qp) >> 8 [ for qp = 0..130]
qp_rem = qp % 6,
q_bits = _Q_BITS + qp_per,
qp_const;
if( intra) {
qp_const = ( 1 << q_bits) / 3;
} else {
qp_const = ( 1 << q_bits) / 6;
}
byte **source = BlockIndexer< 4>( sourceBlock).getSampleArray(),
**result = BlockIndexer< 4>( targetBlock).getSampleArray();
for( int y = 0; y < 4; y++) {
for( int x = 0; x < 4; x++) {
result[ y][ x] = ( ABS( source[ y][ x]) * _quant_coeff[ qp_rem][ y][ x] + qp_const) >> q_bits;
result[ y][ x] *= ( source[ y][ x] < 0)? -1: 1;
}
}
}
/* $Log:$
*
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -