Changeset 34 in 3DVCSoftware for branches/0.3-nokia/source/App


Ignore:
Timestamp:
18 Mar 2012, 10:42:07 (13 years ago)
Author:
nokia
Message:

FlexCO upload

Location:
branches/0.3-nokia/source/App
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/0.3-nokia/source/App/TAppDecoder/TAppDecTop.cpp

    r21 r34  
    126126  NalUnitType eNalUnitType;
    127127
     128#if FLEX_CODING_ORDER
     129  Int iDepthViewIdx = 0;
     130  Bool bCountDepthViewIdx = false;              // a flag which avoid repeating assign a value to iDepthViewIdx   
     131  Bool bNewPictureType =true;
     132  Bool bFirstDepth = false;
     133#endif
    128134 
    129135  while ( !bEos )
     
    136142      if( bIsDepth )
    137143      {
     144#if FLEX_CODING_ORDER
     145                  if (!bFirstSliceDecoded) m_acTDecDepthTopList[iDepthViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx] ,bNewPictureType);
     146                  m_acTDecDepthTopList[iDepthViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx]);
     147
     148#else
    138149        if (!bFirstSliceDecoded) m_acTDecDepthTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx] );
    139150        m_acTDecDepthTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx]);
     151#endif
    140152      }
    141153      else
    142154      {
     155#if FLEX_CODING_ORDER
     156                  if (!bFirstSliceDecoded) m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx], bNewPictureType);
     157#else
    143158        if (!bFirstSliceDecoded) m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx] );
    144         m_acTDecTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx]);
     159#endif
     160                m_acTDecTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx]);
    145161      }
    146162      if( pcListPic )
     
    156172    Bool bNewPicture;
    157173    if( bIsDepth )
     174#if FLEX_CODING_ORDER
     175                  bNewPicture = m_acTDecDepthTopList[iDepthViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx], bNewPictureType);
     176#else
    158177      bNewPicture = m_acTDecDepthTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx] );
     178#endif
    159179    else
     180#if FLEX_CODING_ORDER
     181                bNewPicture = m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx], bNewPictureType );
     182#else
    160183      bNewPicture = m_acTDecTopList[iViewIdx]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx] );
     184#endif
    161185    bFirstSliceDecoded   = true;
     186
     187#if FLEX_CODING_ORDER
     188          if (eNalUnitType == NAL_UNIT_SPS)
     189          {
     190                  if( cComSPS.isDepth() && (m_bUsingDepth==false) )  // expected not using depth, but bitstream are using depth
     191                  {                                                     // know from sps
     192                          assert( cComSPS.getViewId() == 0 && iDepthViewIdx == 0 && !bIsDepth );
     193                          startUsingDepth() ;
     194                  }
     195                  if (cComSPS.isDepth())
     196                  {
     197                          if (cComSPS.getViewId() >= m_acTVideoIOYuvDepthReconFileList.size())
     198                          {
     199                                  assert( cComSPS.getViewId() == m_acTVideoIOYuvReconFileList.size() );
     200                                  increaseNumberOfViews(cComSPS.getViewId()+1);
     201                          }
     202                       
     203                          m_acTDecDepthTopList[cComSPS.getViewId()]->setSPS(cComSPS);
     204                  }
     205                  else
     206                  {
     207                          if (cComSPS.getViewId() >= m_acTVideoIOYuvReconFileList.size())
     208                          {
     209                                  assert( cComSPS.getViewId() == m_acTVideoIOYuvReconFileList.size() );
     210                                  increaseNumberOfViews(cComSPS.getViewId()+1);
     211                          }
     212                          m_acTDecTopList[cComSPS.getViewId()]->setSPS(cComSPS);
     213                  }
     214                  bEos = m_cTVideoIOBitstreamFile.readBits( pcBitstream );
     215                  assert( !bEos);
     216                  if( cComSPS.isDepth() )
     217                          m_acTDecDepthTopList[cComSPS.getViewId()]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiDepthPOCLastDisplayList[cComSPS.getViewId()], bNewPictureType); // decode PPS
     218                  else
     219                          m_acTDecTopList[cComSPS.getViewId()]->decode( bEos, pcBitstream, uiPOC, pcListPic, eNalUnitType, cComSPS, m_iSkipFrame, m_aiPOCLastDisplayList[cComSPS.getViewId()], bNewPictureType); // decode PPS
     220                  assert( eNalUnitType == NAL_UNIT_PPS );
     221          }
     222#else
    162223
    163224    if( eNalUnitType == NAL_UNIT_SPS )
     
    188249      assert( eNalUnitType == NAL_UNIT_PPS );
    189250    }
     251
     252#endif
    190253    assert( eNalUnitType != NAL_UNIT_SEI ); // not yet supported for MVC
    191254    if (bNewPicture)
    192255    {
    193256      if( bIsDepth )
     257#if FLEX_CODING_ORDER
     258        m_acTDecDepthTopList[iDepthViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iDepthViewIdx]);
     259#else
    194260        m_acTDecDepthTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiDepthPOCLastDisplayList[iViewIdx]);
     261#endif
    195262      else
    196263        m_acTDecTopList[iViewIdx]->executeDeblockAndAlf( bEos, pcBitstream, uiPOC, pcListPic, m_iSkipFrame, m_aiPOCLastDisplayList[iViewIdx]);
     
    199266      bFirstSliceDecoded = false;
    200267
    201       if( m_bUsingDepth && !bIsDepth )
    202       {
    203         bIsDepth = true;
     268#if FLEX_CODING_ORDER
     269      if (m_bUsingDepth)
     270      {
     271        bIsDepth = bNewPictureType;       
     272
     273      }
     274      if (bCountDepthViewIdx == false )
     275      {
     276        bCountDepthViewIdx = true;
     277        if (bIsDepth == true)
     278        {
     279          bFirstDepth = true;
     280          bCountDepthViewIdx = true;
     281        }
     282        if (!bFirstDepth && !bIsDepth)
     283        {
     284          iViewIdx++;
     285          bCountDepthViewIdx = false;
     286        }
     287
    204288      }
    205289      else
    206290      {
    207         bIsDepth = false;
    208         if( iViewIdx<m_acTDecTopList.size()-1)
    209         {
    210           iViewIdx++ ;
     291        if (bIsDepth)
     292        {
     293          iDepthViewIdx++;
    211294        }
    212295        else
    213296        {
     297          iViewIdx ++;
     298        }
     299
     300        if (iViewIdx >= m_acTDecTopList.size() || iDepthViewIdx >= m_acTDecDepthTopList.size())
     301        {
     302          bFirstDepth = false;
    214303          iViewIdx = 0;
    215 
     304          iDepthViewIdx = 0;
     305          bCountDepthViewIdx = false;
    216306          // end of access unit: delete extra pic buffers
    217307          Int iNumViews = (Int)m_acTVideoIOYuvReconFileList.size();
     
    244334        }
    245335      }
     336         
     337#else
     338
     339      if( m_bUsingDepth && !bIsDepth )
     340      {
     341        bIsDepth = true;
     342      }
     343      else
     344      {
     345        bIsDepth = false;
     346        if( iViewIdx<m_acTDecTopList.size()-1)
     347        {
     348          iViewIdx++ ;
     349        }
     350        else
     351        {
     352          iViewIdx = 0;
     353
     354          // end of access unit: delete extra pic buffers
     355          Int iNumViews = (Int)m_acTVideoIOYuvReconFileList.size();
     356          for( Int iVId = 0; iVId < iNumViews; iVId++ )
     357          {
     358            if( iVId < (Int)m_acTDecTopList.size() &&  m_acTDecTopList[iVId] )
     359            {
     360              m_acTDecTopList[iVId]->deleteExtraPicBuffers( (Int)uiPOC );
     361            }
     362            if( iVId < (Int)m_acTDecDepthTopList.size() && m_acTDecDepthTopList[iVId] )
     363            {
     364              m_acTDecDepthTopList[iVId]->deleteExtraPicBuffers( (Int)uiPOC );
     365            }
     366          }
     367
     368#if AMVP_BUFFERCOMPRESS
     369          // compress motion for entire access unit
     370          for( Int iVId = 0; iVId < iNumViews; iVId++ )
     371          {
     372            if( iVId < (Int)m_acTDecTopList.size() &&  m_acTDecTopList[iVId] )
     373            {
     374              m_acTDecTopList[iVId]->compressMotion( (Int)uiPOC );
     375            }
     376            if( iVId < (Int)m_acTDecDepthTopList.size() && m_acTDecDepthTopList[iVId] )
     377            {
     378              m_acTDecDepthTopList[iVId]->compressMotion( (Int)uiPOC );
     379            }
     380          }
     381#endif
     382        }
     383          }
     384#endif
    246385    }
    247386#else
     
    506645      m_acTDecDepthTopList.back()->create() ;
    507646      m_acTDecDepthTopList.back()->init( this, false );
    508       m_acTDecDepthTopList.back()->setViewIdx((Int)m_acTDecTopList.size()-1);
     647#if FLEX_CODING_ORDER
     648      Int iNumofgen = (Int)m_acTDecDepthTopList.size();
     649      m_acTDecDepthTopList.back()->setViewIdx(iNumofgen-1);
     650#else
     651          m_acTDecDepthTopList.back()->setViewIdx((Int)m_acTDecTopList.size()-1);
     652#endif
     653
    509654      m_acTDecDepthTopList.back()->setPictureDigestEnabled(m_pictureDigestEnabled);
    510655      m_acTDecDepthTopList.back()->setToDepth( true );
  • branches/0.3-nokia/source/App/TAppEncoder/TAppEncCfg.cpp

    r21 r34  
    110110    free (m_pchBitstreamFile) ;
    111111
     112#if FLEX_CODING_ORDER
     113  if (m_pchMVCJointCodingOrder != NULL)
     114  {
     115          free(m_pchMVCJointCodingOrder) ;
     116  }
     117#endif
    112118  for(Int i = 0; i< m_pchDepthReconFileList.size(); i++ )
    113119  {
     
    153159  string cfg_ReconFile;
    154160  string cfg_dQPFile;
     161
     162#if FLEX_CODING_ORDER
     163  string cfg_JointCodingOrdering;
     164#endif
     165
    155166  po::Options opts;
    156167  opts.addOptions()
     
    191202  ("NumberOfViews",         m_iNumberOfViews,    0, "Number of views")
    192203
    193 
     204#if FLEX_CODING_ORDER
     205  ("3DVFlexOrder",          m_b3DVFlexOrder,   false, "flexible coding order flag" )
     206  ("3DVCodingOrder",            cfg_JointCodingOrdering,  string(""), "The coding order for joint texture-depth coding")
     207
     208#endif
    194209  /* Unit definition parameters */
    195210  ("MaxCUWidth",          m_uiMaxCUWidth,  64u)
     
    379394  m_pchdQPFile = cfg_dQPFile.empty() ? NULL : strdup(cfg_dQPFile.c_str());
    380395
     396#if FLEX_CODING_ORDER && HHI_VSO
     397  m_pchMVCJointCodingOrder      = cfg_JointCodingOrdering.empty()?NULL:strdup(cfg_JointCodingOrdering.c_str());
     398  // If flexible order is enabled and if depth comes before the texture for a view, disable VSO
     399  Bool depthComesFirst = false;
     400  if ( m_b3DVFlexOrder )
     401  {
     402    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
     403    {
     404      for ( Int ii=1; ii<12; ii+=2 )
     405      {
     406        Int iViewIdxCfg = (Int)(m_pchMVCJointCodingOrder[ii]-'0');
     407        if ( iViewIdxCfg == iViewIdx )
     408        {
     409          if ( m_pchMVCJointCodingOrder[ii-1]=='D' ) // depth comes first for this view
     410          {
     411            depthComesFirst = true;
     412            break;
     413          }
     414          else
     415          {
     416            assert(m_pchMVCJointCodingOrder[ii-1]=='T');
     417          }
     418        }
     419      }
     420    }
     421  }
     422  if (depthComesFirst)
     423  {
     424    m_bUseVSO = false;         
     425  }
     426#endif
     427
    381428
    382429// GT FIX
  • branches/0.3-nokia/source/App/TAppEncoder/TAppEncCfg.h

    r5 r34  
    8181  Bool      m_bUsingDepthMaps ;
    8282
     83#if FLEX_CODING_ORDER
     84  char*         m_pchMVCJointCodingOrder;               ///<  texture-depth coding order
     85  Bool          m_b3DVFlexOrder;                ///<  flexible coding order flag
     86#endif
     87
    8388
    8489  // coding structure
  • branches/0.3-nokia/source/App/TAppEncoder/TAppEncTop.cpp

    r21 r34  
    235235    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
    236236    {
     237#if FLEX_CODING_ORDER
     238      // Detect whether depth comes before than texture for this view
     239      Bool isDepthFirst = false;
     240      if ( m_b3DVFlexOrder )
     241      {
     242        for ( Int ii=1; ii<12; ii+=2 )
     243        {
     244          Int iViewIdxCfg = (Int)(m_pchMVCJointCodingOrder[ii]-'0');
     245          if ( iViewIdxCfg == iViewIdx )
     246          {
     247            if ( m_pchMVCJointCodingOrder[ii-1]=='D' ) // depth comes first for this view
     248            {
     249              isDepthFirst = true;
     250            }
     251            else
     252            {
     253              assert(m_pchMVCJointCodingOrder[ii-1]=='T');
     254            }
     255            break;
     256          }
     257        }
     258      }
     259#endif
    237260      m_iDepthFrameRcvdVector.push_back(0) ;
    238261      m_acTEncDepthTopList.push_back(new TEncTop);
     
    354377      m_acTEncDepthTopList[iViewIdx]->setUseDMM( m_bUseDMM );
    355378#endif
     379#if FLEX_CODING_ORDER && HHI_DMM_PRED_TEX
     380      m_acTEncDepthTopList[iViewIdx]->setUseDMM34( (m_b3DVFlexOrder && isDepthFirst) ? false : m_bUseDMM );
     381#endif
    356382#if CONSTRAINED_INTRA_PRED
    357383      m_acTEncDepthTopList[iViewIdx]->setUseConstrainedIntraPred      ( m_bUseConstrainedIntraPred );
     
    380406#endif
    381407#if HHI_MPI
     408#if FLEX_CODING_ORDER
     409      m_acTEncDepthTopList[iViewIdx]->setUseMVI( (m_b3DVFlexOrder && isDepthFirst) ? false : m_bUseMVI );
     410#else
    382411      m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI );
    383412#endif
    384 
     413#endif
     414     
    385415      m_acTEncDepthTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled);
    386416
     
    591621  std::vector<Bool>  bDepthEos ;
    592622  std::vector<Bool>  bContinueReadingDepthPics ;
    593 
    594623  for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
    595624  {
     
    689718#endif
    690719
     720#if FLEX_CODING_ORDER
     721    if (m_b3DVFlexOrder)
     722    {
     723      Int i=0;
     724      Int iViewIdx = 0;
     725      bool bThisViewContinueReadingPics = false;
     726      bool bThisViewContinueReadingDepthPics = false;
     727      Int iNumberofDepthViews = m_bUsingDepthMaps?m_iNumberOfViews:0;
     728      for(Int j=0; j < (m_iNumberOfViews+ iNumberofDepthViews); j++ )     // Start encoding
     729      {
     730        if (m_pchMVCJointCodingOrder[i]=='T')
     731        {
     732          i++;
     733          assert(isdigit(m_pchMVCJointCodingOrder[i]));
     734          iViewIdx = (Int)(m_pchMVCJointCodingOrder[i]-'0');
     735          bThisViewContinueReadingPics = bContinueReadingPics[iViewIdx];
     736          m_acTEncTopList[iViewIdx]->encode( bEos[iViewIdx], m_cListPicYuvRecMap[iViewIdx], pcBitstream, bThisViewContinueReadingPics );
     737          bContinueReadingPics[iViewIdx]=bThisViewContinueReadingPics;
     738          bAllContinueReadingPics = bAllContinueReadingPics||bContinueReadingPics[iViewIdx];
     739
     740          if(pcBitstream->getNumberOfWrittenBits()!=0)
     741          {
     742            m_cTVideoIOBitsFile.writeBits( pcBitstream );
     743          }
     744          pcBitstream->resetBits(); //GT: also done later in ....
     745          pcBitstream->rewindStreamPacket( );
     746          // write bistream to file if necessary
     747          xWriteOutput( iViewIdx ); //GT: Write Reconfiles (when gop is complete?)
     748          i++;
     749        }
     750        else if ( m_pchMVCJointCodingOrder[i] == 'D')
     751        {
     752          i++;
     753          if( m_bUsingDepthMaps )
     754          {
     755            assert(isdigit(m_pchMVCJointCodingOrder[i]));
     756            iViewIdx = (Int)(m_pchMVCJointCodingOrder[i]-'0');
     757            bThisViewContinueReadingDepthPics = bContinueReadingDepthPics[iViewIdx];
     758            m_acTEncDepthTopList[iViewIdx]->encode( bDepthEos[iViewIdx], m_cListPicYuvDepthRecMap[iViewIdx], pcBitstream, bThisViewContinueReadingDepthPics );
     759            bContinueReadingDepthPics[iViewIdx]=bThisViewContinueReadingDepthPics;
     760
     761            bAllContinueReadingDepthPics = bAllContinueReadingDepthPics||bContinueReadingDepthPics[iViewIdx];
     762            if(pcBitstream->getNumberOfWrittenBits()!=0)
     763            {
     764              m_cTVideoIOBitsFile.writeBits( pcBitstream );
     765            }
     766            pcBitstream->resetBits();
     767            pcBitstream->rewindStreamPacket( );
     768            // write bistream to file if necessary
     769            xWriteOutput( iViewIdx, true );
     770            i++;
     771          }
     772        }
     773      }
     774    }
     775    else
     776    {
     777#endif
    691778    //GT: Encode
    692779    for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )     // Start encoding
     
    723810      }
    724811    }
    725 
     812#if FLEX_CODING_ORDER
     813        }
     814#endif
    726815    // delete extra picture buffers
    727816    if( bCurrPocCoded )
Note: See TracChangeset for help on using the changeset viewer.