⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dct.txt

📁 图象压缩程序
💻 TXT
字号:
/**************************************************************************** * DCT/IDCT functions ****************************************************************************//* be carefull that "dct" could be equal to "luma" (ie dct_4x4(dct,dct) )*/static void dct_2x2_dc( int16_t dct[2][2], int16_t chroma[2][2] ){    int tmp[2][2];    tmp[0][0] = chroma[0][0] + chroma[0][1];    tmp[1][0] = chroma[0][0] - chroma[0][1];    tmp[0][1] = chroma[1][0] + chroma[1][1];    tmp[1][1] = chroma[1][0] - chroma[1][1];    dct[0][0] = tmp[0][0] + tmp[0][1];    dct[0][1] = tmp[1][0] + tmp[1][1];    dct[1][0] = tmp[0][0] - tmp[0][1];    dct[1][1] = tmp[1][0] - tmp[1][1];}static void idct_2x2_dc( int16_t dct[2][2], int16_t chroma[2][2] ){    dct_2x2_dc( chroma, dct );}static void dct_4x4_dc( int16_t dct[4][4], int16_t luma[4][4] ){    int16_t tmp[4][4];    int i;    for( i = 0; i < 4; i++ )    {        tmp[0][i] = luma[i][0] + luma[i][1] + luma[i][2] + luma[i][3];        tmp[1][i] = luma[i][0] + luma[i][1] - luma[i][2] - luma[i][3];        tmp[2][i] = luma[i][0] - luma[i][1] - luma[i][2] + luma[i][3];        tmp[3][i] = luma[i][0] - luma[i][1] + luma[i][2] - luma[i][3];    }    for( i = 0; i < 4; i++ )    {        dct[0][i] = ( tmp[i][0] + tmp[i][1] + tmp[i][2] + tmp[i][3] + 1) / 2;        dct[1][i] = ( tmp[i][0] + tmp[i][1] - tmp[i][2] - tmp[i][3] + 1) / 2;        dct[2][i] = ( tmp[i][0] - tmp[i][1] - tmp[i][2] + tmp[i][3] + 1) / 2;        dct[3][i] = ( tmp[i][0] - tmp[i][1] + tmp[i][2] - tmp[i][3] + 1) / 2;    }}static void dct_4x4( int16_t dct[4][4], int16_t luma[4][4] ){    int16_t tmp[4][4];    int i;    for( i = 0; i < 4; i++ )    {        tmp[0][i] =   luma[i][0] +   luma[i][1] +   luma[i][2] +   luma[i][3];        tmp[1][i] = 2*luma[i][0] +   luma[i][1] -   luma[i][2] - 2*luma[i][3];        tmp[2][i] =   luma[i][0] -   luma[i][1] -   luma[i][2] +   luma[i][3];        tmp[3][i] =   luma[i][0] - 2*luma[i][1] + 2*luma[i][2] -   luma[i][3];    }    for( i = 0; i < 4; i++ )    {        dct[0][i] =   tmp[i][0] +   tmp[i][1] +   tmp[i][2] +   tmp[i][3];        dct[1][i] = 2*tmp[i][0] +   tmp[i][1] -   tmp[i][2] - 2*tmp[i][3];        dct[2][i] =   tmp[i][0] -   tmp[i][1] -   tmp[i][2] +   tmp[i][3];        dct[3][i] =   tmp[i][0] - 2*tmp[i][1] + 2*tmp[i][2] -   tmp[i][3];    }}static void idct_4x4( int16_t dct[4][4], int16_t luma[4][4] ){    int16_t tmp[4][4];    int i;    for( i = 0; i < 4; i++ )    {        tmp[0][i] = dct[0][i]   +  dct[1][i]     + dct[2][i]   + (dct[3][i]>>1);        tmp[1][i] = dct[0][i]   + (dct[1][i]>>1) - dct[2][i]   -  dct[3][i];        tmp[2][i] = dct[0][i]   - (dct[1][i]>>1) - dct[2][i]   +  dct[3][i];        tmp[3][i] = dct[0][i]   -  dct[1][i]     + dct[2][i]   - (dct[3][i]>>1);    }    for( i = 0; i < 4; i++ )    {        /* XXX XXX use >> 6 and not / 64 -> doesn't give the same result :((((((((( */        luma[i][0] = ( tmp[i][0] +  tmp[i][1]     + tmp[i][2] + (tmp[i][3]>>1) + 32 ) >> 6;        luma[i][1] = ( tmp[i][0] + (tmp[i][1]>>1) - tmp[i][2] -  tmp[i][3]     + 32 ) >> 6;        luma[i][2] = ( tmp[i][0] - (tmp[i][1]>>1) - tmp[i][2] +  tmp[i][3]     + 32 ) >> 6;        luma[i][3] = ( tmp[i][0] -  tmp[i][1]     + tmp[i][2] - (tmp[i][3]>>1) + 32 ) >> 6;    }}static void idct_4x4_dc( int16_t dct[4][4], int16_t luma[4][4] ){    int16_t tmp[4][4];    int i;    for( i = 0; i < 4; i++ )    {        tmp[0][i] = dct[0][i] + dct[1][i] + dct[2][i] + dct[3][i];        tmp[1][i] = dct[0][i] + dct[1][i] - dct[2][i] - dct[3][i];        tmp[2][i] = dct[0][i] - dct[1][i] - dct[2][i] + dct[3][i];        tmp[3][i] = dct[0][i] - dct[1][i] + dct[2][i] - dct[3][i];    }    for( i = 0; i < 4; i++ )    {        luma[i][0] = ( tmp[i][0] + tmp[i][1] + tmp[i][2] + tmp[i][3] ) ;        luma[i][1] = ( tmp[i][0] + tmp[i][1] - tmp[i][2] - tmp[i][3] ) ;        luma[i][2] = ( tmp[i][0] - tmp[i][1] - tmp[i][2] + tmp[i][3] ) ;        luma[i][3] = ( tmp[i][0] - tmp[i][1] + tmp[i][2] - tmp[i][3] ) ;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -