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
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.