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

📄 downconverttools.inl

📁 JVT-S203 contains the JSVM 6 reference software. It corresponds to CVS tag “JSVM_5_12_1”. For obt
💻 INL
📖 第 1 页 / 共 4 页
字号:
                                      {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 + -