懒人李冰

记录我的生活、学习

X264源码解析之x264_quant_init函数

本文主要记录 X264 中使用到的量化。该函数主要对x264_quant_functions_t结构体中的函数指针进行赋值,

首先看其中的一个例子quant_8x8函数,它的定义位于common/quant.c中,定义如下:

1
2
3
4
5
6
7
static int quant_8x8( dctcoef dct[64], udctcoef mf[64], udctcoef bias[64] )
{
    int nz = 0;
    for( int i = 0; i < 64; i++ )
        QUANT_ONE( dct[i], mf[i], bias[i] );
    return !!nz;
}

其中QUANT_ONE定义如下:

1
2
3
4
5
6
7
8
#define QUANT_ONE( coef, mf, f ) \
{ \
    if( (coef) > 0 ) \
        (coef) = (f + (coef)) * (mf) >> 16; \
    else \
        (coef) = - ((f - (coef)) * (mf) >> 16); \
    nz |= (coef); \
}