📄 downconverttools.inl
字号:
{0,0,0,4,-18,68,89,-20,5,0,0,0},
{0,0,0,3,-15,57,99,-21,5,0,0,0},
{0,0,0,2,-12,46,107,-20,5,0,0,0},
{0,0,0,1,-10,36,114,-18,5,0,0,0},
{0,0,0,1,-7,26,120,-16,4,0,0,0},
{0,0,0,1,-5,16,125,-12,3,0,0,0},
{0,0,0,0,-2,7,127,-6,2,0,0,0}
},
{ // D = 1.5
{0,2,0,-14,33,86,33,-14,0,2,0,0},
{0,1,1,-14,29,85,38,-13,-1,2,0,0},
{0,1,2,-14,24,84,43,-12,-2,2,0,0},
{0,1,2,-13,19,83,48,-11,-3,2,0,0},
{0,0,3,-13,15,81,53,-10,-4,3,0,0},
{0,0,3,-12,11,79,57,-8,-5,3,0,0},
{0,0,3,-11,7,76,62,-5,-7,3,0,0},
{0,0,3,-10,3,73,65,-2,-7,3,0,0},
{0,0,3,-9,0,70,70,0,-9,3,0,0},
{0,0,3,-7,-2,65,73,3,-10,3,0,0},
{0,0,3,-7,-5,62,76,7,-11,3,0,0},
{0,0,3,-5,-8,57,79,11,-12,3,0,0},
{0,0,3,-4,-10,53,81,15,-13,3,0,0},
{0,0,2,-3,-11,48,83,19,-13,2,1,0},
{0,0,2,-2,-12,43,84,24,-14,2,1,0},
{0,0,2,-1,-13,38,85,29,-14,1,1,0}
},
#if KAISER_FLT
{ // Kaiser, N=3, D=2, beta=4
{2,0,-9,0,39,64,39,0,-9,0,2,0},
{2,0,-8,-2,36,64,41,2,-9,0,2,0},
{2,1,-8,-3,33,63,44,4,-9,-1,2,0},
{1,1,-7,-4,31,63,46,5,-9,-1,2,0},
{1,1,-7,-5,28,62,49,8,-9,-2,2,0},
{1,2,-6,-6,25,61,51,10,-9,-3,2,0},
{1,2,-6,-7,22,60,53,12,-9,-3,2,1},
{1,2,-5,-8,20,58,55,15,-9,-4,2,1},
{1,2,-4,-8,17,56,56,17,-8,-4,2,1},
{1,2,-4,-9,15,55,58,20,-8,-5,2,1},
{1,2,-3,-9,12,53,60,22,-7,-6,2,1},
{0,2,-3,-9,10,51,61,25,-6,-6,2,1},
{0,2,-2,-9,8,49,62,28,-5,-7,1,1},
{0,2,-1,-9,5,46,63,31,-4,-7,1,1},
{0,2,-1,-9,4,44,63,33,-3,-8,1,2},
{0,2,0,-9,2,41,64,36,-2,-8,0,2}
},
#else
{ // D = 2
{2,0,-10,0,40,64,40,0,-10,0,2,0},
{2,1,-9,-2,37,64,42,2,-10,-1,2,0},
{2,1,-9,-3,34,64,44,4,-10,-1,2,0},
{2,1,-8,-5,31,63,47,6,-10,-2,3,0},
{1,2,-8,-6,29,62,49,8,-10,-2,3,0},
{1,2,-7,-7,26,61,52,10,-10,-3,3,0},
{1,2,-6,-8,23,60,54,13,-10,-4,3,0},
{1,2,-6,-9,20,59,56,15,-10,-4,3,1},
{1,2,-5,-9,18,57,57,18,-9,-5,2,1},
{1,3,-4,-10,15,56,59,20,-9,-6,2,1},
{0,3,-4,-10,13,54,60,23,-8,-6,2,1},
{0,3,-3,-10,10,52,61,26,-7,-7,2,1},
{0,3,-2,-10,8,49,62,29,-6,-8,2,1},
{0,3,-2,-10,6,47,63,31,-5,-8,1,2},
{0,2,-1,-10,4,44,64,34,-3,-9,1,2},
{0,2,-1,-10,2,42,64,37,-2,-9,1,2}
},
#endif
{ // D = 2.5
#if TAP_10_FLT
{0,-4,-7,11,38,52,38,11,-7,-4,0,0},
{0,-4,-7,9,37,51,40,13,-6,-7,2,0},
{0,-3,-7,8,35,51,41,14,-5,-7,1,0},
{0,-2,-8,6,33,51,42,16,-5,-7,2,0},
{0,-2,-8,5,32,50,43,18,-4,-8,2,0},
{0,-2,-8,4,30,50,45,19,-3,-8,1,0},
{0,-1,-8,2,28,49,46,21,-2,-8,1,0},
{0,-1,-8,1,26,49,47,23,-1,-8,0,0},
{0,0,-8,0,24,48,48,24,0,-8,0,0},
{0,0,-8,-1,23,47,49,26,1,-8,-1,0},
{0,1,-8,-2,21,46,49,28,2,-8,-1,0},
{0,1,-8,-3,19,45,50,30,4,-8,-2,0},
{0,2,-8,-4,18,43,50,32,5,-8,-2,0},
{0,2,-7,-5,16,42,51,33,6,-8,-2,0},
{0,1,-7,-5,14,41,51,35,8,-7,-3,0},
{0,2,-7,-6,13,40,51,37,9,-7,-4,0}
#else
{3,-7,-7,11,38,52,38,11,-7,-7,0,3},
{3,-6,-7,9,36,51,39,13,-6,-7,0,3},
{3,-6,-7,8,35,51,41,14,-5,-7,-1,2},
{3,-5,-8,6,33,51,42,16,-5,-7,-1,3},
{3,-5,-8,5,32,50,43,18,-4,-8,-1,3},
{3,-4,-8,3,30,50,45,19,-3,-8,-2,3},
{3,-4,-8,2,28,49,46,21,-2,-8,-2,3},
{3,-4,-8,1,26,49,47,23,-1,-8,-3,3},
{3,-3,-8,0,24,48,48,24,0,-8,-3,3},
{3,-3,-8,-1,23,47,49,26,1,-8,-4,3},
{3,-2,-8,-2,21,46,49,28,2,-8,-4,3},
{3,-2,-8,-3,19,45,50,30,3,-8,-4,3},
{3,-1,-8,-4,18,43,50,32,5,-8,-5,3},
{3,-1,-7,-5,16,42,51,33,6,-8,-5,3},
{2,-1,-7,-5,14,41,51,35,8,-7,-6,3},
{3,0,-7,-6,13,39,51,36,9,-7,-6,3}
#endif
#if 0 // N=4 version tested in Nice
{5,-8,-7,11,38,51,38,11,-7,-8,0,4},// 0
{4,-7,-8,10,37,51,40,13,-7,-8,-1,4},
{4,-7,-8,8,35,51,41,15,-6,-8,-1,4},
{4,-7,-8,7,34,51,42,16,-5,-9,-1,4},
{5,-6,-9,5,32,50,44,18,-4,-9,-2,4},// 1/4
{5,-6,-9,4,31,50,45,20,-4,-10,-3,5},
{5,-5,-10,3,29,49,46,22,-3,-10,-3,5},
{5,-5,-9,1,27,48,47,23,-1,-9,-4,5},
{5,-4,-10,0,25,48,48,25,0,-10,-4,5},// 1/2
{5,-4,-9,-1,23,47,48,27,1,-9,-5,5},
{5,-3,-10,-3,22,46,49,29,3,-10,-5,5},
{5,-3,-10,-4,20,45,50,31,4,-9,-6,5},
{4,-2,-9,-4,18,44,50,32,5,-9,-6,5},
{4,-1,-9,-5,16,42,51,34,7,-8,-7,4},
{4,-1,-8,-6,15,41,51,35,8,-8,-7,4},
{4,-1,-8,-7,13,40,51,37,10,-8,-7,4}
#endif
},
{ // D = 3
{-2,-7,0,17,35,43,35,17,0,-7,-5,2},
{-2,-7,-1,16,34,43,36,18,1,-7,-5,2},
{-1,-7,-1,14,33,43,36,19,1,-6,-5,2},
{-1,-7,-2,13,32,42,37,20,3,-6,-5,2},
{0,-7,-3,12,31,42,38,21,3,-6,-5,2},
{0,-7,-3,11,30,42,39,23,4,-6,-6,1},
{0,-7,-4,10,29,42,40,24,5,-6,-6,1},
{1,-7,-4,9,27,41,40,25,6,-5,-6,1},
{1,-6,-5,7,26,41,41,26,7,-5,-6,1},
{1,-6,-5,6,25,40,41,27,9,-4,-7,1},
{1,-6,-6,5,24,40,42,29,10,-4,-7,0},
{1,-6,-6,4,23,39,42,30,11,-3,-7,0},
{2,-5,-6,3,21,38,42,31,12,-3,-7,0},
{2,-5,-6,3,20,37,42,32,13,-2,-7,-1},
{2,-5,-6,1,19,36,43,33,14,-1,-7,-1},
{2,-5,-7,1,18,36,43,34,16,-1,-7,-2}
},
{ // D = 3.5
{-6,-3,5,19,31,36,31,19,5,-3,-6,0},
{-6,-4,4,18,31,37,32,20,6,-3,-6,-1},
{-6,-4,4,17,30,36,33,21,7,-3,-6,-1},
{-5,-5,3,16,30,36,33,22,8,-2,-6,-2},
{-5,-5,2,15,29,36,34,23,9,-2,-6,-2},
{-5,-5,2,15,28,36,34,24,10,-2,-6,-3},
{-4,-5,1,14,27,36,35,24,10,-1,-6,-3},
{-4,-5,0,13,26,35,35,25,11,0,-5,-3},
{-4,-6,0,12,26,36,36,26,12,0,-6,-4},
{-3,-5,0,11,25,35,35,26,13,0,-5,-4},
{-3,-6,-1,10,24,35,36,27,14,1,-5,-4},
{-3,-6,-2,10,24,34,36,28,15,2,-5,-5},
{-2,-6,-2,9,23,34,36,29,15,2,-5,-5},
{-2,-6,-2,8,22,33,36,30,16,3,-5,-5},
{-1,-6,-3,7,21,33,36,30,17,4,-4,-6},
{-1,-6,-3,6,20,32,37,31,18,4,-4,-6}
},
{ // D = 4
{-9,0,9,20,28,32,28,20,9,0,-9,0},
{-9,0,8,19,28,32,29,20,10,0,-4,-5},
{-9,-1,8,18,28,32,29,21,10,1,-4,-5},
{-9,-1,7,18,27,32,30,22,11,1,-4,-6},
{-8,-2,6,17,27,32,30,22,12,2,-4,-6},
{-8,-2,6,16,26,32,31,23,12,2,-4,-6},
{-8,-2,5,16,26,31,31,23,13,3,-3,-7},
{-8,-3,5,15,25,31,31,24,14,4,-3,-7},
{-7,-3,4,14,25,31,31,25,14,4,-3,-7},
{-7,-3,4,14,24,31,31,25,15,5,-3,-8},
{-7,-3,3,13,23,31,31,26,16,5,-2,-8},
{-6,-4,2,12,23,31,32,26,16,6,-2,-8},
{-6,-4,2,12,22,30,32,27,17,6,-2,-8},
{-6,-4,1,11,22,30,32,27,18,7,-1,-9},
{-5,-4,1,10,21,29,32,28,18,8,-1,-9},
{-5,-4,0,10,20,29,32,28,19,8,0,-9}
},
{ // D = 6
{-6,8,13,18,20,22,20,18,13,8,4,-10},
{-6,8,13,17,20,21,20,18,13,9,4,-9},
{-6,8,12,17,20,21,20,18,14,9,4,-9},
{-7,7,12,17,20,21,21,18,14,9,5,-9},
{-7,7,12,16,20,21,21,18,14,10,5,-9},
{-7,7,12,16,20,21,21,18,14,10,5,-9},
{-8,7,11,16,20,21,21,19,15,10,5,-9},
{-8,6,11,16,19,21,21,19,15,11,6,-9},
{-8,6,11,15,19,21,21,19,15,11,6,-8},
{-9,6,11,15,19,21,21,19,16,11,6,-8},
{-9,5,10,15,19,21,21,20,16,11,7,-8},
{-9,5,10,14,18,21,21,20,16,12,7,-7},
{-9,5,10,14,18,21,21,20,16,12,7,-7},
{-9,5,9,14,18,21,21,20,17,12,7,-7},
{-9,4,9,14,18,20,21,20,17,12,8,-6},
{-9,4,9,13,18,20,21,20,17,13,8,-6}
}
};
int i, j, k, m, *px, *py, x, y, x16, y16, filter;
// initialization
px = new int[output_width];
py = new int[output_height];
//========== horizontal downsampling ===========
// if(crop_w*2 > 7*output_width) filter = 7;
//else
if(crop_w*7 > 20*output_width) filter = 6;
else if(crop_w*2 > 5*output_width) filter = 5;
else if(crop_w*1 > 2*output_width) filter = 4;
else if(crop_w*3 > 5*output_width) filter = 3;
else if(crop_w*4 > 5*output_width) filter = 2;
else if(crop_w*19 > 20*output_width) filter = 1;
else filter = 0;
for( i = 0; i < output_width; i++ )
{
px[i] = 16*crop_x0 + ( i*crop_w*16 + 4*(2+output_chroma_phase_shift_x)*crop_w - 4*(2+input_chroma_phase_shift_x)*output_width + output_width/2) / output_width;
}
for( j = 0; j < input_height; j++ )
{
int* piSrc = &m_paiImageBuffer[j*m_iImageStride];
for( i = 0; i < output_width; i++ ){
x16 = px[i]&0x0f;
x = px[i]>>4;
m_paiTmp1dBuffer[i] = 0;
for( k=0; k<12; k++) {
m = x - 5 + k;
if( m<0 ) m = 0;
else if( m>(input_width-1) ) m=input_width-1;
m_paiTmp1dBuffer[i] += filter16[filter][x16][k]*piSrc[m];
}
}
//----- copy row back to image buffer -----
::memcpy( piSrc, m_paiTmp1dBuffer, output_width*sizeof(int) );
}
//========== vertical downsampling ===========
//if (crop_h*2 > 7*output_height) filter = 7;
//else
if(crop_h*7 > 20*output_height) filter = 6;
else if(crop_h*2 > 5*output_height) filter = 5;
else if(crop_h*1 > 2*output_height) filter = 4;
else if(crop_h*3 > 5*output_height) filter = 3;
else if(crop_h*4 > 5*output_height) filter = 2;
else if(crop_h*19 > 20*output_height) filter = 1;
else filter = 0;
for( j = 0; j < output_height; j++ )
{
py[j] = 16*crop_y0 + ( j*crop_h*16 + 4*(2+output_chroma_phase_shift_y)*crop_h - 4*(2+input_chroma_phase_shift_y)*output_height + output_height/2 ) / output_height;
}
for( i = 0; i < output_width; i++ )
{
int* piSrc = &m_paiImageBuffer[i];
for( j = 0; j < output_height; j++ ){
y16 = py[j]&0x0f;
y = py[j]>>4;
m_paiTmp1dBuffer[j] = 0;
for( k=0; k<12; k++) {
m = y - 5 + k;
if( m<0 ) m = 0;
else if( m>(input_height-1) ) m=input_height-1;
m_paiTmp1dBuffer[j] += filter16[filter][y16][k]*piSrc[m*m_iImageStride];
}
}
//----- scale and copy back to image buffer -----
for( j = 0; j < output_height; j++ )
{
piSrc[j*m_iImageStride] = ( m_paiTmp1dBuffer[j] + (1<<13) ) / (1<<14);
}
}
// free memory
delete [] px;
delete [] py;
}
// =================================================================================
// INTRA 2
// =================================================================================
//TMM_ESS_UNIFIED {
__inline
void
DownConvert::xInitFilterTmm2 (int iMaxDim )
{
if(m_aiTmp1dBufferInHalfpel == NULL)
{
m_aiTmp1dBufferInHalfpel = new int [iMaxDim];
m_aiTmp1dBufferInQ1pel = new int [iMaxDim];
m_aiTmp1dBufferInQ3pel = new int [iMaxDim];
}
}
__inline
void
DownConvert::xDestroyFilterTmm2 ( )
{
if (NULL!=m_aiTmp1dBufferInHalfpel)
{
delete [] m_aiTmp1dBufferInHalfpel; m_aiTmp1dBufferInHalfpel=NULL;
delete [] m_aiTmp1dBufferInQ1pel; m_aiTmp1dBufferInQ1pel =NULL;
delete [] m_aiTmp1dBufferInQ3pel; m_aiTmp1dBufferInQ3pel =NULL;
}
}
//TMM_ESS_UNIFIED }
__inline
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -