Ignore:
Timestamp:
19 Nov 2012, 21:15:40 (12 years ago)
Author:
mitsubishi-htm
Message:

A second release, as planned

  • Migrate to HTM 4.1
  • Move VSP related switches to cfg file instead of #define in the source code
  • A few bug fixes
  • For VC project files, only VC9 file is updated

TODO

  • Migrate to HTM 5.0, to be used as anchor for CE1 toward Geneva meeting
Location:
branches/HTM-4.0.1-VSP-dev0/source/Lib/TLibRenderer
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-4.0.1-VSP-dev0/source/Lib/TLibRenderer/TRenModel.cpp

    r166 r193  
    4242  m_iWidth             = -1;
    4343  m_iHeight            = -1;
     44#if FIX_VSO_SETUP
     45  m_iUsedHeight        = -1;
     46#endif
    4447  m_iNumOfBaseViews    = -1;
    4548  m_iSampledWidth      = -1;
     
    434437{
    435438  AOT( iViewNum < 0 || iViewNum > m_iNumOfBaseViews );
     439#if FIX_VSO_SETUP
     440  AOF( pcPicYuvVideoData->getHeight() >= m_iUsedHeight + m_uiHorOff && pcPicYuvVideoData->getWidth() == m_iWidth );
     441  AOF( pcPicYuvDepthData->getHeight() >= m_iUsedHeight + m_uiHorOff && pcPicYuvDepthData->getWidth() == m_iWidth );
     442#else
    436443  AOF( pcPicYuvVideoData->getHeight() <= m_iHeight + m_uiHorOff || pcPicYuvVideoData->getWidth() == m_iWidth );
    437444  AOF( pcPicYuvDepthData->getHeight() <= m_iHeight + m_uiHorOff || pcPicYuvDepthData->getWidth() == m_iWidth );
     445#endif
    438446
    439447  pcPicYuvVideoData->extendPicBorder();
    440448
    441  
    442 
    443 
     449#if FIX_VSO_SETUP
     450  TRenFilter::sampleHorUp   ( m_iShiftPrec, pcPicYuvVideoData->getLumaAddr() +  m_uiHorOff        * pcPicYuvVideoData->getStride () , pcPicYuvVideoData->getStride() , m_iWidth,      m_iUsedHeight,      m_aapiCurVideoPel[ iViewNum ][0], m_aaiCurVideoStrides[iViewNum][0] );
     451  TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvVideoData->getCbAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvVideoData->getCStride() , pcPicYuvVideoData->getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, m_aapiCurVideoPel[ iViewNum ][1], m_aaiCurVideoStrides[iViewNum][1] );
     452  TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvVideoData->getCrAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvVideoData->getCStride() , pcPicYuvVideoData->getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, m_aapiCurVideoPel[ iViewNum ][2], m_aaiCurVideoStrides[iViewNum][2] );
     453  TRenFilter::copy          (               pcPicYuvDepthData->getLumaAddr() +  m_uiHorOff        * pcPicYuvDepthData->getStride () , pcPicYuvDepthData->getStride(),  m_iWidth,      m_iUsedHeight,      m_apiCurDepthPel [ iViewNum],     m_aiCurDepthStrides [iViewNum]    );
     454#else
    444455  TRenFilter::sampleHorUp   ( m_iShiftPrec, pcPicYuvVideoData->getLumaAddr() +  m_uiHorOff        * pcPicYuvVideoData->getStride () , pcPicYuvVideoData->getStride() , m_iWidth,      m_iHeight,      m_aapiCurVideoPel[ iViewNum ][0], m_aaiCurVideoStrides[iViewNum][0] );
    445456  TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvVideoData->getCbAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvVideoData->getCStride() , pcPicYuvVideoData->getCStride(), m_iWidth >> 1, m_iHeight >> 1, m_aapiCurVideoPel[ iViewNum ][1], m_aaiCurVideoStrides[iViewNum][1] );
    446457  TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvVideoData->getCrAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvVideoData->getCStride() , pcPicYuvVideoData->getCStride(), m_iWidth >> 1, m_iHeight >> 1, m_aapiCurVideoPel[ iViewNum ][2], m_aaiCurVideoStrides[iViewNum][2] );
    447458  TRenFilter::copy          (               pcPicYuvDepthData->getLumaAddr() +  m_uiHorOff        * pcPicYuvDepthData->getStride () , pcPicYuvDepthData->getStride(),  m_iWidth,      m_iHeight,      m_apiCurDepthPel [ iViewNum],     m_aiCurDepthStrides [iViewNum]    );
     459#endif
    448460
    449461  // Used for rendering reference pic from original video data
     
    453465  if ( m_abSetupVideoFromOrgForView[iViewNum] )
    454466  {
     467#if FIX_VSO_SETUP
     468    AOF( pcPicYuvOrgVideoData->getHeight() >= m_iUsedHeight + m_uiHorOff && pcPicYuvOrgVideoData->getWidth() == m_iWidth );
     469    pcPicYuvOrgVideoData->extendPicBorder();
     470    TRenFilter::sampleHorUp   ( m_iShiftPrec, pcPicYuvOrgVideoData->getLumaAddr() +  m_uiHorOff        * pcPicYuvOrgVideoData->getStride() , pcPicYuvOrgVideoData->getStride() , m_iWidth,      m_iUsedHeight,      m_aapiOrgVideoPel[ iViewNum ][0], m_aaiOrgVideoStrides[iViewNum][0] );
     471    TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvOrgVideoData->getCbAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvOrgVideoData->getCStride(), pcPicYuvOrgVideoData->getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, m_aapiOrgVideoPel[ iViewNum ][1], m_aaiOrgVideoStrides[iViewNum][1] );
     472    TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvOrgVideoData->getCrAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvOrgVideoData->getCStride(), pcPicYuvOrgVideoData->getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, m_aapiOrgVideoPel[ iViewNum ][2], m_aaiOrgVideoStrides[iViewNum][2] );
     473#else
    455474    AOF( pcPicYuvOrgVideoData->getHeight() <= m_iHeight + m_uiHorOff || pcPicYuvOrgVideoData->getWidth() == m_iWidth );
    456475    pcPicYuvOrgVideoData->extendPicBorder();
     
    458477    TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvOrgVideoData->getCbAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvOrgVideoData->getCStride(), pcPicYuvOrgVideoData->getCStride(), m_iWidth >> 1, m_iHeight >> 1, m_aapiOrgVideoPel[ iViewNum ][1], m_aaiOrgVideoStrides[iViewNum][1] );
    459478    TRenFilter::sampleCUpHorUp( m_iShiftPrec, pcPicYuvOrgVideoData->getCrAddr()   + (m_uiHorOff >> 1 ) * pcPicYuvOrgVideoData->getCStride(), pcPicYuvOrgVideoData->getCStride(), m_iWidth >> 1, m_iHeight >> 1, m_aapiOrgVideoPel[ iViewNum ][2], m_aaiOrgVideoStrides[iViewNum][2] );
     479#endif
    460480  }
    461481
    462482  if ( m_abSetupDepthFromOrgForView[iViewNum] )
    463483  {
     484#if FIX_VSO_SETUP
     485    AOF( pcPicYuvOrgDepthData->getHeight() >= m_iUsedHeight + m_uiHorOff && pcPicYuvOrgDepthData->getWidth() == m_iWidth );
     486    TRenFilter::copy          (               pcPicYuvOrgDepthData->getLumaAddr() +  m_uiHorOff        * pcPicYuvOrgDepthData->getStride() , pcPicYuvOrgDepthData->getStride(),  m_iWidth,     m_iUsedHeight,      m_apiOrgDepthPel [ iViewNum],     m_aiOrgDepthStrides [iViewNum]    );
     487#else
    464488    AOF( pcPicYuvOrgDepthData->getHeight() <= m_iHeight + m_uiHorOff || pcPicYuvOrgDepthData->getWidth() == m_iWidth );
    465489    TRenFilter::copy          (               pcPicYuvOrgDepthData->getLumaAddr() +  m_uiHorOff        * pcPicYuvOrgDepthData->getStride() , pcPicYuvOrgDepthData->getStride(),  m_iWidth,     m_iHeight,      m_apiOrgDepthPel [ iViewNum],     m_aiOrgDepthStrides [iViewNum]    );
     490#endif
    466491  }
    467492}
     
    471496{
    472497  AOT( iModelNum < 0 || iModelNum > m_iNumOfRenModels );
     498
     499#if FIX_VSO_SETUP
     500  m_apcRenModels[iModelNum]->setupPart( m_uiHorOff, m_iUsedHeight );
     501#endif
    473502
    474503  // Switch model  to original data for setup if given to render reference
     
    476505  for (Int iBaseViewIdx = 0; iBaseViewIdx < m_iNumOfBaseViews; iBaseViewIdx++ )
    477506  {
    478 
    479507    Bool bSetupFromOrgVideo = m_abSetupVideoFromOrgForView[iBaseViewIdx];
    480508    Bool bSetupFromOrgDepth = m_abSetupDepthFromOrgForView[iBaseViewIdx];
     
    492520  }
    493521
     522#if FIX_VSO_SETUP
     523  m_apcRenModels[iModelNum]->setup     ( pcPicYuvRefView, ppiShiftLutLeft, ppiBaseShiftLutLeft, ppiShiftLutRight, ppiBaseShiftLutRight, iDistToLeft, false );
     524#else
    494525  m_apcRenModels[iModelNum]->setup     ( pcPicYuvRefView, ppiShiftLutLeft, ppiBaseShiftLutLeft, ppiShiftLutRight, ppiBaseShiftLutRight, iDistToLeft, false, m_uiHorOff );
     526#endif
    495527
    496528  // Setup to Org
     
    513545
    514546    // setup keeping reference rendered from original data
     547#if FIX_VSO_SETUP
     548    m_apcRenModels[iModelNum]->setup     ( pcPicYuvRefView, ppiShiftLutLeft, ppiBaseShiftLutLeft, ppiShiftLutRight, ppiBaseShiftLutRight, iDistToLeft, true );
     549#else
    515550    m_apcRenModels[iModelNum]->setup     ( pcPicYuvRefView, ppiShiftLutLeft, ppiBaseShiftLutLeft, ppiShiftLutRight, ppiBaseShiftLutRight, iDistToLeft, true, m_uiHorOff);
     551#endif
    516552  }
    517553}
     
    543579
    544580
    545 Void 
     581#if FIX_VSO_SETUP
     582Void
     583TRenModel::setupPart ( UInt uiHorOff, Int iUsedHeight )
     584{
     585  AOT( iUsedHeight > m_iHeight );     
     586  m_uiHorOff    = uiHorOff;
     587  m_iUsedHeight = iUsedHeight;
     588}
     589#else
     590Void
    546591TRenModel::setHorOffset     ( UInt uiHorOff )
    547592{
    548     m_uiHorOff = uiHorOff;
    549 }
     593  m_uiHorOff = uiHorOff;
     594}
     595#endif
    550596
    551597#if LGE_VSO_EARLY_SKIP_A0093
     
    560606
    561607  AOT( iWidth  + iStartPosX > m_iWidth  );
     608#if FIX_VSO_SETUP
     609  AOT( iHeight + iStartPosY > m_iUsedHeight );
     610#else
    562611  AOT( iHeight + iStartPosY > m_iHeight );
     612#endif
     613
    563614  AOT( iStartPosX < 0);
    564615  AOT( iStartPosY < 0);
     
    593644
    594645  iWidth  = min(iWidth , m_iWidth  - iStartPosX );
     646#if FIX_VSO_SETUP
     647  iHeight = min(iHeight, m_iUsedHeight - iStartPosY );
     648#else
    595649  iHeight = min(iHeight, m_iHeight - iStartPosY );
     650#endif
    596651
    597652  AOT( iStartPosX < 0);
     
    629684TRenModel::getSynthVideo( Int iModelNum, Int iViewNum, TComPicYuv* pcPicYuv )
    630685{
     686#if FIX_VSO_SETUP
     687  m_apcRenModels[iModelNum]->getSynthVideo(iViewNum, pcPicYuv );
     688#else
    631689  m_apcRenModels[iModelNum]->getSynthVideo(iViewNum, pcPicYuv, m_uiHorOff );
     690#endif
    632691}
    633692
     
    635694TRenModel::getSynthDepth( Int iModelNum, Int iViewNum, TComPicYuv* pcPicYuv )
    636695{
    637 #if HHI_VSO_SPEEDUP_A0033
     696#if HHI_VSO_SPEEDUP_A0033 && !FIX_VSO_SETUP
    638697  m_apcRenModels[iModelNum]->getSynthDepth(iViewNum, pcPicYuv, m_uiHorOff );
    639698#else
     
    646705{
    647706  TComPicYuv cPicYuvSynth;
     707#if FIX_VSO_SETUP
     708  cPicYuvSynth.create( m_iWidth, m_iUsedHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth );
     709#else
    648710  cPicYuvSynth.create( m_iWidth, m_iHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth );
     711#endif
    649712
    650713  TComPicYuv cPicYuvTempRef;
     714#if FIX_VSO_SETUP
     715  cPicYuvTempRef.create( m_iWidth, m_iUsedHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth);
     716#else
    651717  cPicYuvTempRef.create( m_iWidth, m_iHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth);
     718#endif
    652719
    653720  Int64 iSSEY = 0;
     
    657724  for (Int iCurModel = 0; iCurModel < m_iNumOfCurRenModels; iCurModel++)
    658725  {
     726#if FIX_VSO_SETUP
     727    m_apcCurRenModels[iCurModel]->getSynthVideo( m_aiCurPosInModels[iCurModel], &cPicYuvSynth );   
     728    m_apcCurRenModels[iCurModel]->getRefVideo  ( m_aiCurPosInModels[iCurModel], &cPicYuvTempRef   );
     729
     730    iSSEY += TRenFilter::SSE( cPicYuvSynth.getLumaAddr(), cPicYuvSynth.getStride(),  m_iWidth,      m_iUsedHeight     , cPicYuvTempRef.getLumaAddr(), cPicYuvTempRef.getStride() );
     731    iSSEU += TRenFilter::SSE( cPicYuvSynth.getCbAddr()  , cPicYuvSynth.getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, cPicYuvTempRef.getCbAddr()  , cPicYuvTempRef.getCStride());
     732    iSSEV += TRenFilter::SSE( cPicYuvSynth.getCrAddr()  , cPicYuvSynth.getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, cPicYuvTempRef.getCrAddr()  , cPicYuvTempRef.getCStride());
     733#else
    659734    m_apcCurRenModels[iCurModel]->getSynthVideo( m_aiCurPosInModels[iCurModel], &cPicYuvSynth, 0 );
    660735    TComPicYuv* pcPicYuvRef = &cPicYuvTempRef;
     
    664739    iSSEU += TRenFilter::SSE( cPicYuvSynth.getCbAddr()  , cPicYuvSynth.getCStride(), m_iWidth >> 1, m_iHeight >> 1, pcPicYuvRef->getCbAddr()  , pcPicYuvRef->getCStride());
    665740    iSSEV += TRenFilter::SSE( cPicYuvSynth.getCrAddr()  , cPicYuvSynth.getCStride(), m_iWidth >> 1, m_iHeight >> 1, pcPicYuvRef->getCrAddr()  , pcPicYuvRef->getCStride());
     741#endif
    666742  }
    667743
     
    700776  }
    701777}
    702 
  • branches/HTM-4.0.1-VSP-dev0/source/Lib/TLibRenderer/TRenModel.h

    r101 r193  
    6262
    6363  // Set horizontal offset
     64#if FIX_VSO_SETUP
     65  Void  setupPart        ( UInt uiHorOff, Int iUsedHeight );
     66#else
    6467  Void  setHorOffset     ( UInt uiHorOff );
     68#endif
    6569
    6670  // Set Mode
    67   Void  setErrorMode     ( Int iView, Int iContent, int iPlane );
     71  Void  setErrorMode     ( Int iView, Int iContent, Int iPlane );
    6872
    6973  // Get Distortion, set Data
     
    100104  Int m_iSampledWidth;
    101105  Int m_iPad;
     106#if FIX_VSO_SETUP
     107  Int m_iUsedHeight;   // height currently used in buffer, whereas m_iHeight is the total height of the buffer
     108#endif
     109
    102110
    103111  Int m_iNumOfBaseViews;
  • branches/HTM-4.0.1-VSP-dev0/source/Lib/TLibRenderer/TRenSingleModel.cpp

    r166 r193  
    4444  m_iHeight = -1;
    4545  m_iStride = -1;
     46#if FIX_VSO_SETUP
     47  m_iUsedHeight = -1;
     48  m_iHorOffset  = -1;
     49#endif
    4650  m_iMode   = -1;
    4751  m_iPad    = PICYUV_PAD;
     
    9094{
    9195#ifdef LGE_VSO_EARLY_SKIP_A0093
    92   if (m_pbHorSkip)
     96  if ( m_pbHorSkip )
    9397  {
    9498    delete[] m_pbHorSkip;
     
    99103  if ( m_pcInputSamples [0] ) delete[] m_pcInputSamples [0];
    100104  if ( m_pcInputSamples [1] ) delete[] m_pcInputSamples [1];
     105
     106#if FIX_MEM_LEAKS
     107  if ( m_pcOutputSamples    ) delete[] m_pcOutputSamples   ;
     108#else
    101109  if ( m_pcOutputSamples    ) delete   m_pcOutputSamples   ;
     110#endif
     111
     112#if FIX_MEM_LEAKS
     113  if ( m_piInvZLUTLeft  ) delete[] m_piInvZLUTLeft ;
     114  if ( m_piInvZLUTRight ) delete[] m_piInvZLUTRight;
     115
     116  if ( m_aapiRefVideoPel[0] ) delete[] ( m_aapiRefVideoPel[0] - ( m_aiRefVideoStrides[0] * m_iPad + m_iPad ) );
     117  if ( m_aapiRefVideoPel[1] ) delete[] ( m_aapiRefVideoPel[1] - ( m_aiRefVideoStrides[1] * m_iPad + m_iPad ) );
     118  if ( m_aapiRefVideoPel[2] ) delete[] ( m_aapiRefVideoPel[2] - ( m_aiRefVideoStrides[2] * m_iPad + m_iPad ) );
     119#endif
    102120}
    103121
     
    179197  Int iOffsetX = ( iViewPos == VIEWPOS_RIGHT ) ? 1 : 0;
    180198
     199#if FIX_VSO_SETUP
     200  for ( Int iPosY = 0; iPosY < m_iUsedHeight; iPosY++ )
     201#else
    181202  for ( Int iPosY = 0; iPosY < m_iHeight; iPosY++ )
     203#endif
    182204  {
    183205    if ( iViewPos == VIEWPOS_RIGHT )
     
    223245
    224246}
    225 
    226 template <BlenMod iBM, Bool bBitInc> Void
     247#if FIX_VSO_SETUP
     248template <BlenMod iBM, Bool bBitInc> Void
     249TRenSingleModelC<iBM,bBitInc>::setupPart ( UInt uiHorOffset,       Int iUsedHeight )
     250{
     251  AOT( iUsedHeight > m_iHeight );   
     252
     253  m_iUsedHeight =       iUsedHeight;
     254  m_iHorOffset  = (Int) uiHorOffset;
     255}
     256#endif
     257
     258template <BlenMod iBM, Bool bBitInc> Void
     259#if FIX_VSO_SETUP
     260TRenSingleModelC<iBM,bBitInc>::setup( TComPicYuv* pcOrgVideo, Int** ppiShiftLutLeft, Int** ppiBaseShiftLutLeft, Int** ppiShiftLutRight,  Int** ppiBaseShiftLutRight,  Int iDistToLeft, Bool bKeepReference )
     261#else
    227262TRenSingleModelC<iBM,bBitInc>::setup( TComPicYuv* pcOrgVideo, Int** ppiShiftLutLeft, Int** ppiBaseShiftLutLeft, Int** ppiShiftLutRight,  Int** ppiBaseShiftLutRight,  Int iDistToLeft, Bool bKeepReference, UInt uiHorOff )
     263#endif
    228264{
    229265  AOT( !m_bUseOrgRef && pcOrgVideo );
     
    239275  if ( pcOrgVideo && !bKeepReference )
    240276  {
     277#if FIX_VSO_SETUP
     278    TRenFilter::copy(             pcOrgVideo->getLumaAddr() +  m_iHorOffset       * pcOrgVideo->getStride() , pcOrgVideo->getStride() , m_iWidth,      m_iUsedHeight,      m_aapiRefVideoPel[0], m_aiRefVideoStrides[0]);
     279    TRenFilter::sampleCUpHorUp(0, pcOrgVideo->getCbAddr()   + (m_iHorOffset >> 1) * pcOrgVideo->getCStride(), pcOrgVideo->getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, m_aapiRefVideoPel[1], m_aiRefVideoStrides[1]);
     280    TRenFilter::sampleCUpHorUp(0, pcOrgVideo->getCrAddr()   + (m_iHorOffset >> 1) * pcOrgVideo->getCStride(), pcOrgVideo->getCStride(), m_iWidth >> 1, m_iUsedHeight >> 1, m_aapiRefVideoPel[2], m_aiRefVideoStrides[2]);   
     281#else
    241282    TRenFilter::copy(             pcOrgVideo->getLumaAddr() +  uiHorOff       * pcOrgVideo->getStride() , pcOrgVideo->getStride() , m_iWidth,      m_iHeight,      m_aapiRefVideoPel[0], m_aiRefVideoStrides[0]);
    242283    TRenFilter::sampleCUpHorUp(0, pcOrgVideo->getCbAddr()   + (uiHorOff >> 1) * pcOrgVideo->getCStride(), pcOrgVideo->getCStride(), m_iWidth >> 1, m_iHeight >> 1, m_aapiRefVideoPel[1], m_aiRefVideoStrides[1]);
    243284    TRenFilter::sampleCUpHorUp(0, pcOrgVideo->getCrAddr()   + (uiHorOff >> 1) * pcOrgVideo->getCStride(), pcOrgVideo->getCStride(), m_iWidth >> 1, m_iHeight >> 1, m_aapiRefVideoPel[2], m_aiRefVideoStrides[2]);   
     285#endif
    244286    xSetStructRefView();
    245287  }
     
    248290  xResetStructError();
    249291  xInitSampleStructs();
    250 
     292#if FIX_VSO_SETUP
     293  switch ( m_iMode )
     294  { 
     295  case 0:   
     296#if LGE_VSO_EARLY_SKIP_A0093
     297    xRenderL<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[0], m_apiBaseDepthPel[0],false );
     298#else
     299    xRenderL<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[0], m_apiBaseDepthPel[0] );
     300#endif   
     301    break;
     302  case 1:   
     303#ifdef LGE_VSO_EARLY_SKIP_A0093
     304    xRenderR<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[1], m_apiBaseDepthPel[1],false);
     305#else
     306    xRenderR<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[1], m_apiBaseDepthPel[1] );
     307#endif
     308    break;
     309  case 2:
     310    TRenFilter::setupZLUT( true, 30, iDistToLeft, ppiBaseShiftLutLeft, ppiBaseShiftLutRight, m_iBlendZThres, m_iBlendDistWeight, m_piInvZLUTLeft, m_piInvZLUTRight );
     311#ifdef LGE_VSO_EARLY_SKIP_A0093
     312    xRenderL<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[0], m_apiBaseDepthPel[0],false);
     313    xRenderR<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[1], m_apiBaseDepthPel[1],false);
     314#else     
     315    xRenderL<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[0], m_apiBaseDepthPel[0] );
     316    xRenderR<true>( 0, 0, m_iWidth, m_iUsedHeight, m_aiBaseDepthStrides[1], m_apiBaseDepthPel[1] );
     317#endif
     318    break;
     319  default:
     320    AOT(true);
     321  }
     322#else
    251323  switch ( m_iMode )
    252324  { 
     
    278350    AOT(true);
    279351  }
     352#endif
    280353
    281354  // Get Rendered View as Reference
     
    340413#endif 
    341414
     415#if FIX_VSO_SETUP
     416  for ( Int iPosY = 0; iPosY < m_iUsedHeight; iPosY++ )
     417#else
    342418  for ( Int iPosY = 0; iPosY < m_iHeight; iPosY++ )
     419#endif
    343420  {
    344421    for ( Int iPosX = 0; iPosX < m_iWidth; iPosX++ )
     
    393470#endif
    394471
     472#if FIX_VSO_SETUP
     473  for ( Int iPosY = 0; iPosY < m_iUsedHeight; iPosY++ )
     474#else
    395475  for ( Int iPosY = 0; iPosY < m_iHeight; iPosY++ )
     476#endif
    396477  {
    397478    for ( Int iPosX = 0; iPosX < m_iWidth; iPosX++ )
     
    536617}
    537618
     619#if FIX_VSO_SETUP
     620template <BlenMod iBM, Bool bBitInc> Void
     621TRenSingleModelC<iBM,bBitInc>::getSynthVideo( Int iViewPos, TComPicYuv* pcPicYuv )
     622
     623  AOT( pcPicYuv->getWidth() != m_iWidth );
     624  AOT( pcPicYuv->getHeight() < m_iUsedHeight + m_iHorOffset );
     625
     626#if HHI_VSO_COLOR_PLANES
     627  Pel RenModelOutPels::* piText[3] = { NULL, NULL, NULL };
     628  xGetSampleStrTextPtrs(iViewPos, piText[0], piText[1], piText[2]);
     629
     630  // Temp image for chroma down sampling
     631  PelImage cTempImage( m_iWidth, m_iUsedHeight, 3, 0);
     632
     633  Int  aiStrides[3];
     634  Pel* apiData  [3];
     635
     636  cTempImage.getDataAndStrides( apiData, aiStrides );
     637
     638  for (UInt uiCurPlane = 0; uiCurPlane < 3; uiCurPlane++ )
     639  {
     640    xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, piText[uiCurPlane], apiData[uiCurPlane], aiStrides[uiCurPlane] , m_iWidth, m_iUsedHeight);
     641  } 
     642  xCopy2PicYuv( apiData, aiStrides, pcPicYuv );
     643#else
     644  Pel RenModelOutPels::* piY;
     645  xGetSampleStrTextPtrs(iViewPos, piY);
     646  xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, piY, pcPicYuv->getLumaAddr() + m_iHorOffset * pcPicYuv->getStride(), pcPicYuv->getStride(), m_iWidth, m_iUsedHeight );
     647  pcPicYuv->setChromaTo( 128 << g_uiBitIncrement );   
     648#endif 
     649}
     650#else
    538651template <BlenMod iBM, Bool bBitInc> Void
    539652TRenSingleModelC<iBM,bBitInc>::getSynthVideo( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset )
     
    548661  // Temp image for chroma down sampling
    549662  PelImage cTempImage( m_iWidth, m_iHeight, 3, 0);
     663
    550664  Int  aiStrides[3];
    551665  Pel* apiData  [3];
     
    557671    xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, piText[uiCurPlane], apiData[uiCurPlane], aiStrides[uiCurPlane] , m_iWidth, m_iHeight);
    558672  } 
    559 
    560673  xCopy2PicYuv( apiData, aiStrides, pcPicYuv, uiHorOffset );
    561674#else
     
    566679#endif 
    567680}
    568 
    569 
     681#endif
     682
     683#if FIX_VSO_SETUP
     684template <BlenMod iBM, Bool bBitInc> Void
     685TRenSingleModelC<iBM,bBitInc>::getSynthDepth( Int iViewPos, TComPicYuv* pcPicYuv )
     686
     687  AOT( iViewPos != 0 && iViewPos != 1);
     688  AOT( pcPicYuv->getWidth()  != m_iWidth  );
     689  AOT( pcPicYuv->getHeight() < m_iUsedHeight + m_iHorOffset );
     690
     691  Pel RenModelOutPels::* piD = 0;
     692  xGetSampleStrDepthPtrs(iViewPos, piD);
     693  xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, piD, pcPicYuv->getLumaAddr() + pcPicYuv->getStride() * m_iHorOffset, pcPicYuv->getStride(), m_iWidth, m_iUsedHeight );
     694  pcPicYuv->setChromaTo( 128 << g_uiBitIncrement );   
     695}
     696
     697#else
    570698template <BlenMod iBM, Bool bBitInc> Void
    571699TRenSingleModelC<iBM,bBitInc>::getSynthDepth( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOff )
    572700
    573701  AOT( iViewPos != 0 && iViewPos != 1);
    574 
    575702  AOT( pcPicYuv->getWidth()  != m_iWidth  );
    576703  AOT( pcPicYuv->getHeight() > m_iHeight + uiHorOff );
     
    581708  pcPicYuv->setChromaTo( 128 << g_uiBitIncrement );   
    582709}
    583 
     710#endif
     711
     712#if FIX_VSO_SETUP
     713template <BlenMod iBM, Bool bBitInc> Void
     714TRenSingleModelC<iBM,bBitInc>::getRefVideo ( Int iViewPos, TComPicYuv* pcPicYuv )
     715
     716  AOT( pcPicYuv->getWidth()  != m_iWidth  );
     717  AOT( pcPicYuv->getHeight() <  m_iUsedHeight + m_iHorOffset);
     718
     719#if HHI_VSO_COLOR_PLANES
     720  Pel RenModelOutPels::* piText[3];
     721  piText[0] = &RenModelOutPels::iYRef;
     722  piText[1] = &RenModelOutPels::iURef;
     723  piText[2] = &RenModelOutPels::iVRef;
     724
     725  // Temp image for chroma down sampling
     726
     727  PelImage cTempImage( m_iWidth, m_iUsedHeight, 3, 0);
     728  Int  aiStrides[3];
     729  Pel* apiData  [3];
     730
     731  cTempImage.getDataAndStrides( apiData, aiStrides );
     732
     733  for (UInt uiCurPlane = 0; uiCurPlane < 3; uiCurPlane++ )
     734  {
     735    xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, piText[uiCurPlane], apiData[uiCurPlane], aiStrides[uiCurPlane] , m_iWidth, m_iUsedHeight);
     736  } 
     737
     738  xCopy2PicYuv( apiData, aiStrides, pcPicYuv );
     739#else
     740  xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, &RenModelOutPels::iYRef, pcPicYuv->getLumaAddr() *  pcPicYuv->getStride() + m_iHorOffset, pcPicYuv->getStride(), m_iWidth, m_iUsedHeight );
     741  pcPicYuv->setChromaTo( 128 << g_uiBitIncrement );   
     742#endif 
     743}
     744#else
    584745template <BlenMod iBM, Bool bBitInc> Void
    585746TRenSingleModelC<iBM,bBitInc>::getRefVideo ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset )
     
    595756
    596757  // Temp image for chroma down sampling
     758
    597759  PelImage cTempImage( m_iWidth, m_iHeight, 3, 0);
    598760  Int  aiStrides[3];
     
    604766  {
    605767    xCopyFromSampleStruct( m_pcOutputSamples, m_iOutputSamplesStride, piText[uiCurPlane], apiData[uiCurPlane], aiStrides[uiCurPlane] , m_iWidth, m_iHeight);
    606   }  
     768  }
    607769
    608770  xCopy2PicYuv( apiData, aiStrides, pcPicYuv, uiHorOffset );
     
    612774#endif 
    613775}
    614 
     776#endif
    615777
    616778template <BlenMod iBM, Bool bBitInc> RMDist
     
    668830  // Get Data
    669831  m_ppiCurLUT      = m_appiShiftLut   [iCurViewPos];
    670 
    671832  xSetViewRow      ( iStartPosY);
    672833
     
    756917      {
    757918          break;
    758         }
     919      }
    759920
    760921      iCurPosX--;
     
    802963  iEndChangePos = m_iStartChangePosX + iWidth - 1;
    803964
    804 
    805965  for (Int iPosY = iStartPosY; iPosY < iStartPosY + iHeight; iPosY++ )
    806966  {
    807 
    808967#ifdef LGE_VSO_EARLY_SKIP_A0093
    809968    if( m_bEarlySkip && bFast )
     
    18592018}
    18602019
     2020#if FIX_VSO_SETUP
     2021template <BlenMod iBM, Bool bBitInc> Void
     2022TRenSingleModelC<iBM,bBitInc>::xCopy2PicYuv( Pel** ppiSrcVideoPel, Int* piStrides, TComPicYuv* rpcPicYuvTarget )
     2023{
     2024  TRenFilter::copy            ( ppiSrcVideoPel[0], piStrides[0], m_iWidth, m_iUsedHeight, rpcPicYuvTarget->getLumaAddr() +  m_iHorOffset       * rpcPicYuvTarget->getStride() , rpcPicYuvTarget->getStride () );
     2025  TRenFilter::sampleDown2Tap13( ppiSrcVideoPel[1], piStrides[1], m_iWidth, m_iUsedHeight, rpcPicYuvTarget->getCbAddr  () + (m_iHorOffset >> 1) * rpcPicYuvTarget->getCStride(), rpcPicYuvTarget->getCStride() );
     2026  TRenFilter::sampleDown2Tap13( ppiSrcVideoPel[2], piStrides[2], m_iWidth, m_iUsedHeight, rpcPicYuvTarget->getCrAddr  () + (m_iHorOffset >> 1) * rpcPicYuvTarget->getCStride(), rpcPicYuvTarget->getCStride() );
     2027}
     2028#else
    18612029template <BlenMod iBM, Bool bBitInc> Void
    18622030TRenSingleModelC<iBM,bBitInc>::xCopy2PicYuv( Pel** ppiSrcVideoPel, Int* piStrides, TComPicYuv* rpcPicYuvTarget, UInt uiHorOffset )
     
    18662034  TRenFilter::sampleDown2Tap13( ppiSrcVideoPel[2], piStrides[2], m_iWidth, m_iHeight, rpcPicYuvTarget->getCrAddr  () + (uiHorOffset >> 1) * rpcPicYuvTarget->getCStride(), rpcPicYuvTarget->getCStride() );
    18672035}
     2036#endif
    18682037
    18692038template class TRenSingleModelC<BLEND_NONE ,true>;
     
    19432112}
    19442113#endif
    1945 
  • branches/HTM-4.0.1-VSP-dev0/source/Lib/TLibRenderer/TRenSingleModel.h

    r105 r193  
    8080  // Set Frame dependent data
    8181  virtual Void   setLRView ( Int iViewPos, Pel** apiCurVideoPel, Int* aiCurVideoStride, Pel* piCurDepthPel, Int iCurDepthStride ) = 0;
     82#if FIX_VSO_SETUP
     83  virtual Void   setupPart ( UInt uiHorOffset,       Int iUsedHeight ) = 0;
     84  virtual Void   setup     ( TComPicYuv* pcOrgVideo, Int** ppiShiftLutLeft, Int** ppiBaseShiftLutLeft, Int** ppiShiftLutRight,  Int** ppiBaseShiftLutRight,  Int iDistToLeft, Bool bKeepReference ) = 0;
     85#else
    8286  virtual Void   setup     ( TComPicYuv* pcOrgVideo, Int** ppiShiftLutLeft, Int** ppiBaseShiftLutLeft, Int** ppiShiftLutRight,  Int** ppiBaseShiftLutRight,  Int iDistToLeft, Bool bKeepReference, UInt uiHorOffset ) = 0;
     87#endif
    8388
    8489  // Set Data
     
    98103  virtual RMDist getDistVideo  ( Int iViewPos, Int iPlane, Int iStartPosX, Int iStartPosY, Int iWidth, Int iHeight, Int iStride, Pel* piNewData ) = 0;
    99104
     105#if FIX_VSO_SETUP
     106  virtual Void   getSynthVideo  ( Int iViewPos, TComPicYuv* pcPicYuv ) = 0; 
     107  virtual Void   getSynthDepth  ( Int iViewPos, TComPicYuv* pcPicYuv ) = 0;
     108  virtual Void   getRefVideo    ( Int iViewPos, TComPicYuv* pcPicYuv ) = 0;
     109#else
    100110  virtual Void   getSynthVideo  ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset  ) = 0; 
    101111  virtual Void   getSynthDepth  ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset  ) = 0;
    102112  virtual Void   getRefVideo    ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset  ) = 0;
     113#endif
    103114};
    104115
     
    170181  // Set Frame dependent data
    171182  Void   setLRView ( Int iViewPos, Pel** apiCurVideoPel, Int* aiCurVideoStride, Pel* piCurDepthPel, Int iCurDepthStride );
     183#if FIX_VSO_SETUP
     184  Void   setupPart ( UInt uiHorOffset,       Int uiUsedHeight );
     185  Void   setup     ( TComPicYuv* pcOrgVideo, Int** ppiShiftLutLeft, Int** ppiBaseShiftLutLeft, Int** ppiShiftLutRight,  Int** ppiBaseShiftLutRight,  Int iDistToLeft, Bool bKeepReference );
     186#else
    172187  Void   setup     ( TComPicYuv* pcOrgVideo, Int** ppiShiftLutLeft, Int** ppiBaseShiftLutLeft, Int** ppiShiftLutRight,  Int** ppiBaseShiftLutRight,  Int iDistToLeft, Bool bKeepReference, UInt uiHorOffset );
     188#endif
    173189
    174190#if LGE_VSO_EARLY_SKIP_A0093
     
    187203  RMDist getDistVideo  ( Int iViewPos, Int iPlane, Int iStartPosX, Int iStartPosY, Int iWidth, Int iHeight, Int iStride, Pel* piNewData );
    188204
     205#if FIX_VSO_SETUP
     206  Void   getSynthVideo  ( Int iViewPos, TComPicYuv* pcPicYuv ); 
     207  Void   getSynthDepth  ( Int iViewPos, TComPicYuv* pcPicYuv );
     208  Void   getRefVideo    ( Int iViewPos, TComPicYuv* pcPicYuv );
     209#else
    189210  Void   getSynthVideo  ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset ); 
    190211  Void   getSynthDepth  ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset  );
    191212  Void   getRefVideo    ( Int iViewPos, TComPicYuv* pcPicYuv, UInt uiHorOffset  );
     213#endif
    192214
    193215private:
     
    198220  /////  Rendering /////
    199221  // Left to Right
    200 #ifdef LGE_VSO_EARLY_SKIP_A0093
     222#if LGE_VSO_EARLY_SKIP_A0093
    201223                      __inline Bool   xDetectEarlySkipL   ( Int iStartPosX, Int iStartPosY, Int iWidth, Int iHeight, Int iStride, Pel* piNewData,Pel* piOrgData, Int iOrgStride );
    202224                      __inline Bool   xDetectEarlySkipR   ( Int iStartPosX, Int iStartPosY, Int iWidth, Int iHeight, Int iStride, Pel* piNewData,Pel* piOrgData, Int iOrgStride );
     
    234256  __inline Void   xGetBlendedValueBM2 ( Pel iYL, Pel iYR, Pel iUL, Pel iUR, Pel iVL, Pel iVR, Pel iDepthL, Pel iDepthR, Int iFilledL, Int iFilledR, Pel& riY, Pel& riU, Pel&riV );
    235257#else
    236   __inline Void   xGetBlendedValue    ( Pel iYL,   Pel iYR, Pel iDepthL, Pel iDepthR, Int iFilledL, Int iFilledR, Pel& riY );
     258  __inline Void   xGetBlendedValue    ( Pel iYL, Pel iYR, Pel iDepthL, Pel iDepthR, Int iFilledL, Int iFilledR, Pel& riY );
    237259  __inline Void   xGetBlendedValueBM1 ( Pel iYL, Pel iYR, Pel iDepthL, Pel iDepthR, Int iFilledL, Int iFilledR, Pel& riY );
    238260  __inline Void   xGetBlendedValueBM2 ( Pel iYL, Pel iYR, Pel iDepthL, Pel iDepthR, Int iFilledL, Int iFilledR, Pel& riY );
     
    241263
    242264  // General
    243   template<Bool bSet> __inline Void xSetShiftedPelL       (Int iSourcePos,                  Int iSubSourcePos, Int iTargetSPos,                   Pel iFilled, RMDist& riError );
     265  template<Bool bSet> __inline Void xSetShiftedPelL       (Int iSourcePos,             Int iSubSourcePos, Int iTargetSPos,              Pel iFilled, RMDist& riError );
    244266  template<Bool bSet> __inline Void xSetShiftedPelBlendL  (RenModelInPels* pcInSample, Int iSubSourcePos, RenModelOutPels* pcOutSample, Pel iFilled, RMDist& riError );
    245267  template<Bool bSet> __inline Void xSetShiftedPelNoBlendL(RenModelInPels* pcInSample, Int iSubSourcePos, RenModelOutPels* pcOutSample, Pel iFilled, RMDist& riError );
    246268
    247   template<Bool bSet> __inline Void xSetShiftedPelR       (Int iSourcePos,                  Int iSubSourcePos, Int iTargetSPos,                   Pel iFilled, RMDist& riError );
     269  template<Bool bSet> __inline Void xSetShiftedPelR       (Int iSourcePos,             Int iSubSourcePos, Int iTargetSPos,              Pel iFilled, RMDist& riError );
    248270  template<Bool bSet> __inline Void xSetShiftedPelBlendR  (RenModelInPels* pcInSample, Int iSubSourcePos, RenModelOutPels* pcOutSample, Pel iFilled, RMDist& riError );
    249271  template<Bool bSet> __inline Void xSetShiftedPelNoBlendR(RenModelInPels* pcInSample, Int iSubSourcePos, RenModelOutPels* pcOutSample, Pel iFilled, RMDist& riError );
     
    271293  Void            xInitSampleStructs           ();
    272294  Void            xSetStructSynthViewAsRefView ();
     295#if FIX_VSO_SETUP
     296  Void            xCopy2PicYuv                ( Pel** ppiSrcVideoPel, Int* piStrides, TComPicYuv* rpcPicYuvTarget );
     297#else
    273298  Void            xCopy2PicYuv                ( Pel** ppiSrcVideoPel, Int* piStrides, TComPicYuv* rpcPicYuvTarget, UInt uiHorOffset );
    274 
     299#endif
    275300
    276301  template< typename S, typename T>
    277302  Void   xCopyFromSampleStruct ( S* ptSource , Int iSourceStride, T S::* ptSourceElement, T* ptTarget, Int iTargetStride, Int iWidth, Int iHeight )
    278303  {
     304#if FIX_VSO_SETUP
     305    AOT( iWidth != m_iWidth );
     306    for (Int iPosY = 0; iPosY < iHeight; iPosY++)
     307#else
    279308    for (Int iPosY = 0; iPosY < m_iHeight; iPosY++)
     309#endif
    280310    {
    281311      for (Int iPosX = 0; iPosX < m_iWidth; iPosX++)
     
    291321  Void   xCopyToSampleStruct ( T* ptSource , Int iSourceStride, S* ptTarget, Int iTargetStride, T S::* ptSourceElement, Int iWidth, Int iHeight )
    292322  {
     323#if FIX_VSO_SETUP
     324    AOT( iWidth != m_iWidth );
     325    for (Int iPosY = 0; iPosY < iHeight; iPosY++)
     326#else
    293327    for (Int iPosY = 0; iPosY < m_iHeight; iPosY++)
     328#endif
    294329    {
    295330      for (Int iPosX = 0; iPosX < m_iWidth; iPosX++)
     
    309344  Int   m_iStride;
    310345  Int   m_iPad;
     346#if FIX_VSO_SETUP
     347  Int   m_iUsedHeight;
     348  Int   m_iHorOffset;
     349#endif
    311350
    312351  Int   m_iSampledWidth;
     352#if FIX_VSO_SETUP
     353#else
    313354  Int   m_iSampledHeight;
     355#endif
    314356  Int   m_iSampledStride;
    315357
    316358  RenModelInPels* m_pcInputSamples[2];
    317   Int                  m_iInputSamplesStride;
     359  Int             m_iInputSamplesStride;
    318360
    319361  // Base
Note: See TracChangeset for help on using the changeset viewer.