Changeset 11 in 3DVCSoftware for branches/0.2-poznan-univ/source/Lib/TLibDecoder


Ignore:
Timestamp:
5 Feb 2012, 22:00:22 (13 years ago)
Author:
poznan-univ
Message:

Poznan disocclusion coding - CU Skip

Location:
branches/0.2-poznan-univ/source/Lib/TLibDecoder
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r5 r11  
    285285        for( UInt uiBaseId = 0; uiBaseId < uiViewId; uiBaseId++ )
    286286        {
    287           xReadSvlc( iCode );   m_aaiTempScale [ uiBaseId ][ uiViewId ] = iCode;
    288           xReadSvlc( iCode );   m_aaiTempOffset[ uiBaseId ][ uiViewId ] = iCode;
     287          xReadSvlc( iCode );   m_aaiTempScale [ uiBaseId ][ uiViewId ] = iCode; //printf("SPS Scale: %d\n",iCode);
     288          xReadSvlc( iCode );   m_aaiTempOffset[ uiBaseId ][ uiViewId ] = iCode; //printf("SPS Offset: %d\n",iCode);
    289289          xReadSvlc( iCode );   m_aaiTempScale [ uiViewId ][ uiBaseId ] = iCode - m_aaiTempScale [ uiBaseId ][ uiViewId ];
    290290          xReadSvlc( iCode );   m_aaiTempOffset[ uiViewId ][ uiBaseId ] = iCode - m_aaiTempOffset[ uiBaseId ][ uiViewId ];
     
    517517      for( UInt uiBaseId = 0; uiBaseId < uiViewId; uiBaseId++ )
    518518      {
    519         xReadSvlc( iCode );   m_aaiTempScale [ uiBaseId ][ uiViewId ] = iCode;
    520         xReadSvlc( iCode );   m_aaiTempOffset[ uiBaseId ][ uiViewId ] = iCode;
     519        xReadSvlc( iCode );   m_aaiTempScale [ uiBaseId ][ uiViewId ] = iCode; printf("Scale: %d\n",iCode);
     520        xReadSvlc( iCode );   m_aaiTempOffset[ uiBaseId ][ uiViewId ] = iCode; printf("Offset: %d\n",iCode);
    521521        xReadSvlc( iCode );   m_aaiTempScale [ uiViewId ][ uiBaseId ] = iCode - m_aaiTempScale [ uiBaseId ][ uiViewId ];
    522522        xReadSvlc( iCode );   m_aaiTempOffset[ uiViewId ][ uiBaseId ] = iCode - m_aaiTempOffset[ uiBaseId ][ uiViewId ];
  • branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCu.cpp

    r5 r11  
    4949  m_ppcYuvReco    = NULL;
    5050  m_ppcYuvResPred = NULL;
     51#if POZNAN_AVAIL_MAP
     52  m_ppcYuvAvail   = NULL;
     53#endif
     54#if POZNAN_SYNTH_VIEW
     55  m_ppcYuvSynth   = NULL;
     56#endif
    5157  m_ppcCU         = NULL;
    5258}
     
    7581  m_ppcYuvReco    = new TComYuv*    [m_uiMaxDepth-1];
    7682  m_ppcYuvResPred = new TComYuv*    [m_uiMaxDepth-1];
     83#if POZNAN_AVAIL_MAP
     84  m_ppcYuvAvail   = new TComYuv*    [m_uiMaxDepth-1];
     85#endif
     86#if POZNAN_SYNTH_VIEW
     87  m_ppcYuvSynth   = new TComYuv*    [m_uiMaxDepth-1];
     88#endif
    7789  m_ppcCU         = new TComDataCU* [m_uiMaxDepth-1];
    7890 
     
    8799    m_ppcYuvReco   [ui] = new TComYuv;    m_ppcYuvReco   [ui]->create( uiWidth, uiHeight );
    88100    m_ppcYuvResPred[ui] = new TComYuv;    m_ppcYuvResPred[ui]->create( uiWidth, uiHeight );
     101#if POZNAN_AVAIL_MAP
     102    m_ppcYuvAvail  [ui] = new TComYuv;    m_ppcYuvAvail  [ui]->create( uiWidth, uiHeight );
     103#endif
     104#if POZNAN_SYNTH_VIEW
     105    m_ppcYuvSynth  [ui] = new TComYuv;    m_ppcYuvSynth  [ui]->create( uiWidth, uiHeight );
     106#endif
     107
    89108    m_ppcCU        [ui] = new TComDataCU; m_ppcCU        [ui]->create( uiNumPartitions, uiWidth, uiHeight, true );
    90109  }
     
    106125    m_ppcYuvReco   [ui]->destroy(); delete m_ppcYuvReco   [ui]; m_ppcYuvReco   [ui] = NULL;
    107126    m_ppcYuvResPred[ui]->destroy(); delete m_ppcYuvResPred[ui]; m_ppcYuvResPred[ui] = NULL;
     127#if POZNAN_AVAIL_MAP
     128    m_ppcYuvAvail  [ui]->destroy(); delete m_ppcYuvAvail  [ui]; m_ppcYuvAvail  [ui] = NULL;
     129#endif
     130#if POZNAN_SYNTH_VIEW
     131    m_ppcYuvSynth  [ui]->destroy(); delete m_ppcYuvSynth  [ui]; m_ppcYuvSynth  [ui] = NULL;
     132#endif
    108133    m_ppcCU        [ui]->destroy(); delete m_ppcCU        [ui]; m_ppcCU        [ui] = NULL;
    109134  }
     
    112137  delete [] m_ppcYuvReco;    m_ppcYuvReco    = NULL;
    113138  delete [] m_ppcYuvResPred; m_ppcYuvResPred = NULL;
     139#if POZNAN_AVAIL_MAP
     140  delete [] m_ppcYuvAvail;   m_ppcYuvAvail   = NULL;
     141#endif
     142#if POZNAN_SYNTH_VIEW
     143  delete [] m_ppcYuvSynth;   m_ppcYuvSynth   = NULL;
     144#endif
     145
    114146  delete [] m_ppcCU;         m_ppcCU         = NULL;
    115147}
     
    184216{
    185217  TComPic* pcPic = pcCU->getPic();
     218
     219#if POZNAN_ENCODE_ONLY_DISOCCLUDED_CU
     220  Bool bWholeCUCanBeSynthesized = false;
     221  Bool bOneSubCUCanNotBeSynthesied = false;
     222  Bool bSubCUCanBeSynthesized[4];
     223  Bool * pbSubCUCanBeSynthesized = bSubCUCanBeSynthesized;
     224  pcPic->checkSynthesisAvailability(pcCU, pcCU->getAddr(), uiAbsPartIdx, uiDepth, pbSubCUCanBeSynthesized); //KUBA SYNTH
     225  Int  iSubCUCanNotBeSynthesized = 0;
     226  Int  iSubCUCanBeSynthesizedCnt = 0;
     227  for(Int i = 0; i < 4; i++)
     228  {
     229    if (!bSubCUCanBeSynthesized[i])
     230    {
     231      iSubCUCanNotBeSynthesized = i;
     232    }
     233    else
     234    {
     235      iSubCUCanBeSynthesizedCnt ++;
     236    }
     237  }
     238  if(iSubCUCanBeSynthesizedCnt == 4)
     239  {
     240    bWholeCUCanBeSynthesized = true;
     241  }
     242  else if(iSubCUCanBeSynthesizedCnt == 3)
     243  {
     244    bOneSubCUCanNotBeSynthesied = true;
     245  }
     246
     247  if(bWholeCUCanBeSynthesized)
     248  {
     249    pcCU->setPredModeSubParts( MODE_SYNTH, uiAbsPartIdx, uiDepth );
     250    pcCU->setDepthSubParts( uiDepth, uiAbsPartIdx );
     251    pcCU->setPartSizeSubParts( SIZE_2Nx2N, uiAbsPartIdx, uiDepth );
     252    pcCU->setSizeSubParts( g_uiMaxCUWidth>>uiDepth, g_uiMaxCUHeight>>uiDepth, uiAbsPartIdx, uiDepth );
     253    //pcCU->setSizeSubParts( pcCU->getSlice()->getSPS()->getMaxCUWidth()>>uiDepth, pcCU->getSlice()->getSPS()->getMaxCUHeight()>>uiDepth, uiAbsPartIdx, uiDepth );
     254    return;   
     255  }
     256#endif
     257
    186258  UInt uiCurNumParts    = pcPic->getNumPartInCU() >> (uiDepth<<1);
    187259  UInt uiQNumParts      = uiCurNumParts>>2;
     
    195267  if( ( uiRPelX < pcCU->getSlice()->getSPS()->getWidth() ) && ( uiBPelY < pcCU->getSlice()->getSPS()->getHeight() ) )
    196268  {
     269#if POZNAN_ENCODE_ONLY_DISOCCLUDED_CU
     270    if(bOneSubCUCanNotBeSynthesied && (uiDepth < g_uiMaxCUDepth - g_uiAddCUDepth )) // KUBA SYNTH check if CU has 3 synthesied subCU - no split flag is send in that case and CU split is assumed
     271    {
     272      pcCU->setDepthSubParts( uiDepth + 1, uiAbsPartIdx );
     273    }
     274    else
     275#endif
    197276#if HHI_MPI
    198277    if( pcCU->getTextureModeDepth( uiAbsPartIdx ) == -1 || uiDepth < pcCU->getTextureModeDepth( uiAbsPartIdx ) )
     
    367446{
    368447  TComPic* pcPic = pcCU->getPic();
     448#if POZNAN_SYNTH_VIEW
     449  if(pcPic->getPicYuvSynth())  m_ppcYuvSynth[uiDepth]->copyFromPicYuv( pcPic->getPicYuvSynth(), pcCU->getAddr(), uiAbsPartIdx );
     450#endif
     451#if POZNAN_AVAIL_MAP
     452  if(pcPic->getPicYuvAvail())  m_ppcYuvAvail[uiDepth]->copyFromPicYuv( pcPic->getPicYuvAvail(), pcCU->getAddr(), uiAbsPartIdx );
     453#endif
    369454 
    370455  Bool bBoundary = false;
     
    411496      xReconIntraQT( m_ppcCU[uiDepth], uiAbsPartIdx, uiDepth );
    412497      break;
     498#if POZNAN_ENCODE_ONLY_DISOCCLUDED_CU
     499    case MODE_SYNTH:
     500    //  break;
     501#if POZNAN_FILL_OCCLUDED_CU_WITH_SYNTHESIS
     502      m_ppcYuvReco[uiDepth]->copyFromPicYuv(pcPic->getPicYuvSynth(), pcCU->getAddr(), uiAbsPartIdx);
     503#else
     504      m_ppcYuvReco[uiDepth]->copyFromPicYuv(pcPic->getPicYuvAvail(), pcCU->getAddr(), uiAbsPartIdx); //Poprawiæ
     505#endif
     506      //m_ppcYuvReco[uiDepth]->clear();
     507      break;
     508#endif
    413509    default:
    414510      assert(0);
  • branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCu.h

    r5 r11  
    6161  TComYuv**           m_ppcYuvReco;       ///< array of prediction & reconstruction buffer
    6262  TComYuv**           m_ppcYuvResPred;    ///< residual prediction buffer
     63#if POZNAN_AVAIL_MAP
     64  TComYuv**           m_ppcYuvAvail;      ///< array of available map buffer
     65#endif
     66#if POZNAN_SYNTH_VIEW
     67  TComYuv**           m_ppcYuvSynth;      ///< array of synth buffer
     68#endif
    6369  TComDataCU**        m_ppcCU;            ///< CU data array
    6470 
  • branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecTop.cpp

    r5 r11  
    5353    m_aaiCodedScale       [ uiId ] = new Int [ MAX_NUMBER_VIEWS ];
    5454  }
     55#if POZNAN_SYNTH
     56  xCreateLUTs   ( (UInt)MAX_NUMBER_VIEWS, (UInt)MAX_NUMBER_VIEWS,  m_adBaseViewShiftLUT,  m_aiBaseViewShiftLUT);
     57
     58  m_iLog2Precision   = LOG2_DISP_PREC_LUT;
     59  m_uiBitDepthForLUT = 8; //fixed
     60#endif
    5561}
    5662
     
    6672  delete [] m_aiViewOrderIndex;
    6773  delete [] m_aiViewReceived;
     74
     75#if POZNAN_SYNTH
     76  xDeleteArray( m_adBaseViewShiftLUT,        MAX_NUMBER_VIEWS, MAX_NUMBER_VIEWS,  2 );
     77  xDeleteArray( m_aiBaseViewShiftLUT,        MAX_NUMBER_VIEWS, MAX_NUMBER_VIEWS,  2 );
     78#endif
    6879}
    6980
     
    7990  m_uiMaxViewId             = 0;
    8091}
     92
     93#if POZNAN_SYNTH
     94/*
     95Void
     96CamParsCollector::initLUT(TComSPS &cComSPS)
     97{
     98    //===== create arrays =====
     99  //xCreateLUTs   ( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_adBaseViewShiftLUT,  m_aiBaseViewShiftLUT,  m_adBaseViewShiftParameter,  m_aiBaseViewShiftParameter  );
     100 
     101 
     102  //xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_aaiCodedScale           );
     103  //xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_aaiCodedOffset          );
     104  //xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_aaiScaleAndOffsetSet    );
     105  //xInit2dArray  ( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_aaiScaleAndOffsetSet, 0 );
     106
     107  //xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_aaiPdmScaleNomDelta     );
     108  //xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews,  m_aaiPdmOffset            );
     109
     110  //===== init disparity to virtual depth conversion parameters =====
     111  //xSetPdmConversionParams();
     112
     113  //===== init arrays for first frame =====
     114  //xSetShiftParametersAndLUT( m_uiFirstFrameId );
     115}//*/
     116
     117Void
     118CamParsCollector::xCreateLUTs( UInt uiNumberSourceViews, UInt uiNumberTargetViews, Double****& radLUT, Int****& raiLUT)
     119{
     120  //AOF( m_uiBitDepthForLUT == 8 );
     121  //AOF(radLUT == NULL && raiLUT == NULL );
     122
     123  uiNumberSourceViews = Max( 1, uiNumberSourceViews );
     124  uiNumberTargetViews = Max( 1, uiNumberTargetViews );
     125
     126  radLUT         = new Double***[ uiNumberSourceViews ];
     127  raiLUT         = new Int   ***[ uiNumberSourceViews ];
     128
     129  for( UInt uiSourceView = 0; uiSourceView < uiNumberSourceViews; uiSourceView++ )
     130  {
     131    radLUT        [ uiSourceView ] = new Double**[ uiNumberTargetViews ];
     132    raiLUT        [ uiSourceView ] = new Int   **[ uiNumberTargetViews ];
     133
     134    for( UInt uiTargetView = 0; uiTargetView < uiNumberTargetViews; uiTargetView++ )
     135    {
     136      radLUT        [ uiSourceView ][ uiTargetView ]      = new Double*[ 2 ];
     137      radLUT        [ uiSourceView ][ uiTargetView ][ 0 ] = new Double [ 257 ];
     138      radLUT        [ uiSourceView ][ uiTargetView ][ 1 ] = new Double [ 257 ];
     139
     140      raiLUT        [ uiSourceView ][ uiTargetView ]      = new Int*   [ 2 ];
     141      raiLUT        [ uiSourceView ][ uiTargetView ][ 0 ] = new Int    [ 257 ];
     142      raiLUT        [ uiSourceView ][ uiTargetView ][ 1 ] = new Int    [ 257 ];
     143    }
     144  }
     145}
     146
     147Void
     148CamParsCollector::xInitLUTs( UInt uiSourceView, UInt uiTargetView, Int iScale, Int iOffset, Double****& radLUT, Int****& raiLUT)
     149{
     150  Int     iLog2DivLuma   = m_uiBitDepthForLUT + m_uiCamParsCodedPrecision + 1 - m_iLog2Precision;   AOF( iLog2DivLuma > 0 );
     151  Int     iLog2DivChroma = iLog2DivLuma + 1;
     152
     153  iOffset <<= m_uiBitDepthForLUT;
     154
     155  Double dScale  = (Double) iScale  / (( Double ) ( 1 << iLog2DivLuma ));
     156  Double dOffset = (Double) iOffset / (( Double ) ( 1 << iLog2DivLuma ));
     157
     158  // offsets including rounding offsets
     159  Int64 iOffsetLuma   = iOffset + ( ( 1 << iLog2DivLuma   ) >> 1 );
     160  Int64 iOffsetChroma = iOffset + ( ( 1 << iLog2DivChroma ) >> 1 );
     161
     162  for( UInt uiDepthValue = 0; uiDepthValue < 256; uiDepthValue++ )
     163  {
     164    // real-valued look-up tables
     165    Double  dShiftLuma      = ( (Double)uiDepthValue * dScale + dOffset ) * Double( 1 << m_iLog2Precision );
     166    Double  dShiftChroma    = dShiftLuma / 2;
     167    radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ uiDepthValue ] = dShiftLuma;
     168    radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ uiDepthValue ] = dShiftChroma;
     169
     170    // integer-valued look-up tables
     171    Int64   iTempScale      = (Int64)uiDepthValue * iScale;
     172    Int64   iTestScale      = ( iTempScale + iOffset       );   // for checking accuracy of camera parameters
     173    Int64   iShiftLuma      = ( iTempScale + iOffsetLuma   ) >> iLog2DivLuma;
     174    Int64   iShiftChroma    = ( iTempScale + iOffsetChroma ) >> iLog2DivChroma;
     175    raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ uiDepthValue ] = (Int)iShiftLuma;
     176    raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ uiDepthValue ] = (Int)iShiftChroma;
     177
     178    // maximum deviation
     179    //dMaxDispDev     = Max( dMaxDispDev,    fabs( Double( (Int) iTestScale   ) - dShiftLuma * Double( 1 << iLog2DivLuma ) ) / Double( 1 << iLog2DivLuma ) );
     180    //dMaxRndDispDvL  = Max( dMaxRndDispDvL, fabs( Double( (Int) iShiftLuma   ) - dShiftLuma   ) );
     181    //dMaxRndDispDvC  = Max( dMaxRndDispDvC, fabs( Double( (Int) iShiftChroma ) - dShiftChroma ) );
     182  }
     183
     184  radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 256 ] = radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 255 ];
     185  radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 256 ] = radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 255 ];
     186  raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 256 ] = raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 255 ];
     187  raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 256 ] = raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 255 ];
     188}
     189
     190Bool
     191CamParsCollector::getNearestBaseView( Int iSynthViewIdx, Int &riNearestViewIdx, Int &riRelDistToLeft, Bool& rbRenderFromLeft)
     192{
     193  /*
     194  riNearestViewIdx = 0;
     195
     196  Bool bDecencdingVN = ( m_aiSortedBaseViews.size() >= 2 && m_aiSortedBaseViews[ 0 ] > m_aiSortedBaseViews[ 1 ] );
     197  Int  iFactor       = ( bDecencdingVN ? -1 : 1 );
     198
     199  if( ( m_aiBaseId2SortedId[iSynthViewIdx] - m_aiBaseId2SortedId[riNearestViewIdx] ) * iFactor  <= 0 )
     200  {
     201    rbRenderFromLeft = true;
     202  }
     203  else
     204  {
     205    rbRenderFromLeft = false;
     206  }
     207
     208  riRelDistToLeft = 128; //Not used for now;
     209//*/
     210  return true;
     211}
     212
     213#endif
    81214
    82215Void
     
    161294        m_aaiCodedScale [ uiViewId ][ uiBaseId ]  = pcSlice->getInvCodedScale () [ uiBaseId ];
    162295        m_aaiCodedOffset[ uiViewId ][ uiBaseId ]  = pcSlice->getInvCodedOffset() [ uiBaseId ];
     296#if POZNAN_SYNTH
     297        xInitLUTs(uiBaseId,uiViewId,m_aaiCodedScale [ uiBaseId ][ uiViewId ],m_aaiCodedOffset[ uiBaseId ][ uiViewId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT);
     298        xInitLUTs(uiViewId,uiBaseId,m_aaiCodedScale [ uiViewId ][ uiBaseId ],m_aaiCodedOffset[ uiViewId ][ uiBaseId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT);
     299#endif
    163300      }
    164301      else
     
    168305        m_aaiCodedScale [ uiViewId ][ uiBaseId ]  = pcSlice->getSPS()->getInvCodedScale () [ uiBaseId ];
    169306        m_aaiCodedOffset[ uiViewId ][ uiBaseId ]  = pcSlice->getSPS()->getInvCodedOffset() [ uiBaseId ];
     307#if POZNAN_SYNTH
     308        xInitLUTs(uiBaseId,uiViewId,m_aaiCodedScale [ uiBaseId ][ uiViewId ],m_aaiCodedOffset[ uiBaseId ][ uiViewId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT);
     309        xInitLUTs(uiViewId,uiBaseId,m_aaiCodedScale [ uiViewId ][ uiBaseId ],m_aaiCodedOffset[ uiViewId ][ uiBaseId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT);
     310#endif
    170311      }
    171312    }
     
    182323        m_aaiCodedScale [ uiViewId ][ uiBaseId ]  = pcSlice->getInvCodedScale () [ uiBaseId ];
    183324        m_aaiCodedOffset[ uiViewId ][ uiBaseId ]  = pcSlice->getInvCodedOffset() [ uiBaseId ];
     325#if POZNAN_SYNTH
     326        xInitLUTs(uiBaseId,uiViewId,m_aaiCodedScale [ uiBaseId ][ uiViewId ],m_aaiCodedOffset[ uiBaseId ][ uiViewId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT);
     327        xInitLUTs(uiViewId,uiBaseId,m_aaiCodedScale [ uiViewId ][ uiBaseId ],m_aaiCodedOffset[ uiViewId ][ uiBaseId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT);
     328#endif
    184329      }
    185330    }
     
    458603#if HHI_INTERVIEW_SKIP
    459604    pcPic->removeUsedPelsMapBuffer();
     605#endif
     606#if POZNAN_AVAIL_MAP
     607    pcPic->removeAvailabilityBuffer();
     608#endif
     609#if POZNAN_SYNTH_VIEW
     610    pcPic->removeSynthesisBuffer();
    460611#endif
    461612  }
     
    724875#endif
    725876
     877#if POZNAN_SYNTH
     878      if( m_pcCamParsCollector)
     879      {
     880        m_pcCamParsCollector->setSlice( pcSlice );
     881      }
     882      //if(!getIsDepth())
     883      getDecTop()->storeSynthPicsInBuffer(pcSlice->getViewIdx(),pcSlice->getSPS()->getViewOrderIdx(),pcSlice->getPOC(),getIsDepth());
     884#endif
     885
    726886      //  Decode a picture
    727887      m_cGopDecoder.decompressGop ( bEos, pcBitstream, pcPic, false );
  • branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecTop.h

    r5 r11  
    7171  Void  uninit      ();
    7272  Void  setSlice    ( TComSlice* pcSlice );
     73#if POZNAN_SYNTH
     74  Double****          getBaseViewShiftLUTD      ()  { return m_adBaseViewShiftLUT;   }
     75  Int****             getBaseViewShiftLUTI      ()  { return m_aiBaseViewShiftLUT;   }
     76
     77  Int**               getBaseViewOffsetI        ()  { return m_aaiCodedOffset;   }
     78  Int**               getBaseViewScaleI         ()  { return m_aaiCodedScale;   }
     79
     80  Bool                getNearestBaseView        ( Int iSynthViewIdx, Int &riNearestViewIdx, Int &riRelDistToLeft, Bool& rbRenderFromLeft);
     81#endif
    7382
    7483private:
     
    8998  Int     m_iLastPOC;
    9099  UInt    m_uiMaxViewId;
    91 };
     100
     101#if POZNAN_SYNTH
     102
     103  UInt    m_uiBitDepthForLUT;
     104  UInt    m_iLog2Precision;
     105  UInt    m_uiInputBitDepth;
     106
     107  // look-up tables
     108  Double****          m_adBaseViewShiftLUT;                                                                             ///< Disparity LUT
     109  Int****             m_aiBaseViewShiftLUT;                                                                       ///< Disparity LUT
     110
     111  Void xCreateLUTs( UInt uiNumberSourceViews, UInt uiNumberTargetViews, Double****& radLUT, Int****& raiLUT);
     112  Void xInitLUTs( UInt uiSourceView, UInt uiTargetView, Int iScale, Int iOffset, Double****& radLUT, Int****& raiLUT);
     113
     114  template<class T> Void  xDeleteArray  ( T*& rpt, UInt uiSize1, UInt uiSize2, UInt uiSize3 );
     115  template<class T> Void  xDeleteArray  ( T*& rpt, UInt uiSize1, UInt uiSize2 );
     116  template<class T> Void  xDeleteArray  ( T*& rpt, UInt uiSize );
     117#endif
     118};
     119
     120#if POZNAN_SYNTH
     121  template <class T>
     122Void CamParsCollector::xDeleteArray( T*& rpt, UInt uiSize1, UInt uiSize2, UInt uiSize3 )
     123{
     124  if( rpt )
     125  {
     126    for( UInt uiK = 0; uiK < uiSize1; uiK++ )
     127    {
     128      for( UInt uiL = 0; uiL < uiSize2; uiL++ )
     129      {
     130        for( UInt uiM = 0; uiM < uiSize3; uiM++ )
     131        {
     132          delete[] rpt[ uiK ][ uiL ][ uiM ];
     133        }
     134        delete[] rpt[ uiK ][ uiL ];
     135      }
     136      delete[] rpt[ uiK ];
     137    }
     138    delete[] rpt;
     139  }
     140  rpt = NULL;
     141};
     142
     143
     144template <class T>
     145Void CamParsCollector::xDeleteArray( T*& rpt, UInt uiSize1, UInt uiSize2 )
     146{
     147  if( rpt )
     148  {
     149    for( UInt uiK = 0; uiK < uiSize1; uiK++ )
     150    {
     151      for( UInt uiL = 0; uiL < uiSize2; uiL++ )
     152      {
     153        delete[] rpt[ uiK ][ uiL ];
     154      }
     155      delete[] rpt[ uiK ];
     156    }
     157    delete[] rpt;
     158  }
     159  rpt = NULL;
     160};
     161
     162
     163template <class T>
     164Void CamParsCollector::xDeleteArray( T*& rpt, UInt uiSize )
     165{
     166  if( rpt )
     167  {
     168    for( UInt uiK = 0; uiK < uiSize; uiK++ )
     169    {
     170      delete[] rpt[ uiK ];
     171    }
     172    delete[] rpt;
     173  }
     174  rpt = NULL;
     175};
     176#endif
    92177
    93178
Note: See TracChangeset for help on using the changeset viewer.