Changeset 200 in 3DVCSoftware for branches/HTM-5.0-Nokia/source/App


Ignore:
Timestamp:
3 Dec 2012, 16:57:58 (12 years ago)
Author:
nokia
Message:

Reintegration of Flexible Coding Order to 3DV-HTM v5.1
To enable following params are required:
FCO : 1
FCOCodingOrder : T0D0D1D2T1T2
VSOConfig: [ox0 B(cc1) I(s0.25 s0.5 s0.75)][cx1 B(oo0) B(oo2) I(s0.25 s0.5 s0.75 s1.25 s1.5 s1.75)][ox2 B(cc1) I(s1.25 s1.5 s1.75)]

Location:
branches/HTM-5.0-Nokia/source/App
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-5.0-Nokia/source/App/TAppDecoder/TAppDecTop.cpp

    r195 r200  
    8888#endif
    8989 
     90#if FLEX_CODING_ORDER
     91  Int iDepthViewIdx = 0;
     92  Int iTextureViewIdx=0;
     93  Bool first_frame=1;
     94  Bool viewid_zero=true;
     95  Int FCO_index=0;  //when the current frame is not first frame,use FCO_index stand for viewDepth.
     96#endif
     97
    9098#if SONY_COLPIC_AVAILABILITY
    9199  m_tDecTop[0]->setViewOrderIdx(0);
     
    102110    pcListPic[i] = NULL;
    103111    newPicture[i] = false;
     112#if FLEX_CODING_ORDER
     113    FCO_Order[i]=NULL;
     114#endif
     115
    104116  }
    105117
     
    161173        depth = getVPSAccess()->getActiveVPS()->getDepthFlag(nalu.m_layerId);
    162174      }
    163       viewDepthId = nalu.m_layerId;   // coding order T0D0T1D1T2D2
     175#if FLEX_CODING_ORDER
     176      if (viewId>0)
     177      {
     178        viewid_zero=false;
     179      }
     180      if (viewid_zero==false&&viewId==0)
     181      {
     182        first_frame=0; //if viewId has been more than zero and now it set to zero again, we can see that it is not the first view
     183      }
     184      if (first_frame)
     185      { // if the current view is first frame, we set the viewDepthId as texture plus depth and get the FCO order
     186        viewDepthId = iDepthViewIdx+iTextureViewIdx;
     187        FCO_viewDepthId=viewDepthId;
     188      }
     189      else
     190      {//if current view is not first frame, we set the viewDepthId depended on the FCO order
     191        viewDepthId=0;
     192        if (depth)
     193        {
     194          for (FCO_index=0;FCO_index<2*MAX_VIEW_NUM;FCO_index++ )
     195          {
     196            if (FCO_Order[FCO_index]=='D')
     197            {
     198              if (viewId==viewDepthId)
     199                break;
     200              else
     201                viewDepthId++;
     202            }
     203          }
     204        }
     205        else
     206        {
     207          for (FCO_index=0;FCO_index<2*MAX_VIEW_NUM;FCO_index++ )
     208          {
     209            if (FCO_Order[FCO_index]=='T')
     210            {
     211              if (viewId==viewDepthId)
     212                break;
     213              else
     214                viewDepthId++;
     215            }
     216          }
     217        }
     218
     219        viewDepthId=FCO_index;
     220
     221      }
     222
     223
     224#else
     225       viewDepthId = nalu.m_layerId;   // coding order T0D0T1D1T2D2
     226#endif
     227   
    164228#else
    165229      Int viewId = nalu.m_viewId;
    166230      Int depth = nalu.m_isDepth ? 1 : 0;
    167       viewDepthId = viewId * 2 + depth;   // coding order T0D0T1D1T2D2
     231#if FLEX_CODING_ORDER
     232      if (viewId>0)
     233      {
     234        viewid_zero=false;
     235      }
     236      if (viewid_zero==false&&viewId==0)
     237      {
     238        first_frame=0;
     239      }
     240      if (first_frame)
     241      {
     242        viewDepthId = iDepthViewIdx+iTextureViewIdx;
     243        FCO_viewDepthId=viewDepthId;
     244      }
     245      else
     246      {
     247        viewDepthId=0;
     248        if (depth)
     249        {
     250          for (FCO_index=0;FCO_index<2*MAX_VIEW_NUM;FCO_index++ )
     251          {
     252            if (FCO_Order[FCO_index]=='D')
     253            {
     254              if (viewId==viewDepthId)
     255                break;
     256              else
     257                viewDepthId++;
     258            }
     259          }
     260        }
     261        else
     262        {
     263          for (FCO_index=0;FCO_index<2*MAX_VIEW_NUM;FCO_index++ )
     264          {
     265            if (FCO_Order[FCO_index]=='T')
     266            {
     267              if (viewId==viewDepthId)
     268                break;
     269              else
     270                viewDepthId++;
     271            }
     272          }
     273        }
     274
     275        viewDepthId=FCO_index;
     276
     277      }
     278#else
     279  viewDepthId = viewId * 2 + depth;   // coding order T0D0T1D1T2D2
     280#endif
     281     
    168282#endif
    169283#endif     
     
    224338        {
    225339          previousPictureDecoded = true;
     340#if FLEX_CODING_ORDER
     341          if (first_frame)
     342          {
     343            if (depth)
     344            {
     345                iDepthViewIdx++;
     346                FCO_Order[viewDepthId]='D';
     347            }
     348            else
     349           {
     350                iTextureViewIdx++;
     351                FCO_Order[viewDepthId]='T';
     352           }
     353          }
     354
     355#endif
    226356        }
    227357      }
     
    527657TDecTop* TAppDecTop::getTDecTop( Int viewId, Bool isDepth )
    528658{
     659#if FLEX_CODING_ORDER
     660  Int viewnumber=0;
     661  Int i=0;
     662  Bool FCO_flag=0;
     663  if (viewId>FCO_viewDepthId)
     664  {
     665    return NULL;
     666  }
     667  else
     668  {
     669    if (isDepth)
     670   {
     671      for ( i=0; i<=FCO_viewDepthId;i++)
     672      {
     673         if (FCO_Order[i]=='D')
     674         {
     675           if (viewnumber==viewId)
     676           {
     677             FCO_flag=1;
     678             break;
     679           }
     680           else
     681             viewnumber++;
     682         }
     683      }
     684    }
     685    else
     686    {
     687      for ( i=0; i<=FCO_viewDepthId;i++)
     688      {
     689        if (FCO_Order[i]=='T')
     690        {
     691          if (viewnumber==viewId)
     692          {
     693            FCO_flag=1;
     694            break;
     695          }
     696          else
     697            viewnumber++;
     698        }
     699      }
     700    }
     701    if (FCO_flag)
     702    {
     703      return m_tDecTop[i];
     704    }
     705    else
     706      return NULL;
     707   
     708  }
     709
     710    // coding order T0D0T1D1T2D2
     711#else
    529712  return m_tDecTop[(isDepth ? 1 : 0) + viewId * 2];  // coding order T0D0T1D1T2D2
     713#endif
     714 
    530715}
    531716
     
    546731  assert( ( viewId >= 0 ) );
    547732
     733#if FLEX_CODING_ORDER
     734if (getTDecTop(viewId,isDepth))
     735{
     736   TComList<TComPic*>* apcListPic = getTDecTop( viewId, isDepth )->getListPic();
     737   TComPic* pcPic = NULL;
     738   for( TComList<TComPic*>::iterator it=apcListPic->begin(); it!=apcListPic->end(); it++ )
     739   {
     740     if( (*it)->getPOC() == poc )
     741     {
     742       pcPic = *it;
     743       break;
     744     }
     745   }
     746   return pcPic;
     747}
     748else
     749  return NULL;
     750#else
     751
    548752  TComList<TComPic*>* apcListPic = getTDecTop( viewId, isDepth )->getListPic();
    549753  TComPic* pcPic = NULL;
     
    557761  }
    558762  return pcPic;
     763#endif
    559764}
    560765//! \}
  • branches/HTM-5.0-Nokia/source/App/TAppDecoder/TAppDecTop.h

    r195 r200  
    7171  Bool                            m_useDepth;
    7272
     73#if FLEX_CODING_ORDER
     74  Int  FCO_viewDepthId;
     75  Char FCO_Order[MAX_VIEW_NUM*2];
     76#endif
     77
    7378  FILE*                           m_pScaleOffsetFile;
    7479  CamParsCollector                m_cCamParsCollector;
  • branches/HTM-5.0-Nokia/source/App/TAppEncoder/TAppEncCfg.cpp

    r197 r200  
    111111  if (m_pchBitstreamFile != NULL)
    112112    free (m_pchBitstreamFile) ;
     113
     114#if FLEX_CODING_ORDER
     115  if (m_pchMVCJointCodingOrder != NULL)
     116  {
     117    free(m_pchMVCJointCodingOrder) ;
     118  }
     119#endif
     120
    113121#if HHI_VSO
    114122  if (  m_pchVSOConfig != NULL)
     
    203211  string cfg_RowHeight;
    204212  string cfg_ScalingListFile;
     213
     214 #if FLEX_CODING_ORDER
     215  string cfg_JointCodingOrdering;
     216#endif
     217
    205218  po::Options opts;
    206219  opts.addOptions()
     
    246259 
    247260  ("NumberOfViews",         m_iNumberOfViews,    0, "Number of views")
     261
     262#if FLEX_CODING_ORDER
     263  ("FCO",               m_b3DVFlexOrder,   false, "flexible coding order flag" )
     264  ("FCOCodingOrder",   cfg_JointCodingOrdering,  string(""), "The coding order for joint texture-depth coding")
     265#endif
     266
    248267  /* Unit definition parameters */
    249268  ("MaxCUWidth",          m_uiMaxCUWidth,  64u)
     
    533552  m_pchBitstreamFile = cfg_BitstreamFile.empty() ? NULL : strdup(cfg_BitstreamFile.c_str());
    534553  m_pchdQPFile = cfg_dQPFile.empty() ? NULL : strdup(cfg_dQPFile.c_str());
     554 
     555#if FLEX_CODING_ORDER
     556  m_pchMVCJointCodingOrder= cfg_JointCodingOrdering.empty()?NULL:strdup(cfg_JointCodingOrdering.c_str());
     557  // If flexible order is enabled and if depth comes before the texture for a view, disable VSO
     558#if HHI_VSO && DISABLE_FCO_FOR_VSO
     559  Bool depthComesFirst = false;
     560  int iter = 0;
     561  if ( m_b3DVFlexOrder )
     562  {
     563    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
     564    {
     565      iter = 0;
     566      for ( Int ii=1; ii<12; ii+=2 )
     567      {
     568        Int iViewIdxCfg = (Int)(m_pchMVCJointCodingOrder[ii]-'0');
     569        if ( iViewIdxCfg == iViewIdx )
     570        {
     571          iter ++;
     572          if ( m_pchMVCJointCodingOrder[ii-1]=='D' ) // depth comes first for this view
     573          {
     574            if(iter == 1)
     575           {
     576            depthComesFirst = true;
     577            break;
     578           }
     579          }
     580          else
     581          {
     582            assert(m_pchMVCJointCodingOrder[ii-1]=='T');
     583          }
     584        }
     585      }
     586    }
     587  }
     588  if (depthComesFirst)
     589  {
     590    m_bUseVSO = false;
     591  }
     592#endif
     593#endif
     594
     595
     596
     597
    535598 
    536599  m_pchColumnWidth = cfg_ColumnWidth.empty() ? NULL: strdup(cfg_ColumnWidth.c_str());
  • branches/HTM-5.0-Nokia/source/App/TAppEncoder/TAppEncCfg.h

    r197 r200  
    8888  Int       m_iNumberOfViews;                                 ///< number Views to Encode
    8989  Bool      m_bUsingDepthMaps;
     90 
     91#if FLEX_CODING_ORDER
     92  char*  m_pchMVCJointCodingOrder;      ///<  texture-depth coding order
     93  Bool    m_b3DVFlexOrder;    ///<  flexible coding order flag
     94#endif
     95
    9096  // coding structure
    9197  Int       m_iIntraPeriod;                                   ///< period of I-slice (random access period)
  • branches/HTM-5.0-Nokia/source/App/TAppEncoder/TAppEncTop.cpp

    r197 r200  
    400400    for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
    401401    {
     402
     403#if FLEX_CODING_ORDER
     404      // Detect whether depth comes before than texture for this view
     405      Bool isDepthFirst = false;
     406      if ( m_b3DVFlexOrder )
     407      {
     408        for ( Int ii=1; ii<12; ii+=2 )
     409        {
     410          Int iViewIdxCfg = (Int)(m_pchMVCJointCodingOrder[ii]-'0');
     411          if ( iViewIdxCfg == iViewIdx )
     412          {
     413            if ( m_pchMVCJointCodingOrder[ii-1]=='D' ) // depth comes first for this view
     414            {
     415              isDepthFirst = true;
     416            }
     417            else
     418            {
     419              assert(m_pchMVCJointCodingOrder[ii-1]=='T');
     420            }
     421            break;
     422          }
     423        }
     424      }
     425#endif
     426
    402427      m_depthFrameRcvd.push_back(0);
    403428      m_acTEncDepthTopList.push_back(new TEncTop);
     
    682707    m_acTEncDepthTopList[iViewIdx]->setUseDMM                     ( m_bUseDMM );
    683708#endif
     709
     710#if FLEX_CODING_ORDER && HHI_DMM_PRED_TEX
     711    m_acTEncDepthTopList[iViewIdx]->setUseDMM34( (m_b3DVFlexOrder && isDepthFirst) ? false : m_bUseDMM );
     712#endif
     713
    684714#if OL_QTLIMIT_PREDCODING_B0068
    685715    m_acTEncDepthTopList[iViewIdx]->setUseQTLPC                   (m_bUseQTLPC);
    686716#endif
     717
    687718#if HHI_MPI
    688      m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI );
    689 #endif
     719#if FLEX_CODING_ORDER
     720    m_acTEncDepthTopList[iViewIdx]->setUseMVI( (m_b3DVFlexOrder && isDepthFirst) ? false : m_bUseMVI );
     721#else
     722    m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI );
     723#endif
     724#endif
     725
     726
    690727#if RWTH_SDC_DLT_B0036
    691728      m_acTEncDepthTopList[iViewIdx]->setUseDLT                   ( m_bUseDLT );
     
    10031040      }
    10041041#endif
     1042
     1043#if FLEX_CODING_ORDER
     1044      if (m_b3DVFlexOrder)
     1045      {
     1046        Int  iNumDepthEncoded = 0;
     1047        iNumEncoded = 0;
     1048        Int i=0;
     1049        Int iViewIdx=0;
     1050        Int iNumberofDepthViews = m_bUsingDepthMaps?m_iNumberOfViews:0;
     1051        for (Int j=0; j < (m_iNumberOfViews+ iNumberofDepthViews); j++ )
     1052        {
     1053          if (m_pchMVCJointCodingOrder[i]=='T')
     1054          {
     1055
     1056            i++;
     1057            assert(isdigit(m_pchMVCJointCodingOrder[i]));
     1058            iViewIdx = (Int)(m_pchMVCJointCodingOrder[i]-'0');
     1059
     1060            m_acTEncTopList[iViewIdx]->encode( eos[iViewIdx], pcPicYuvOrg, *m_picYuvRec[iViewIdx], outputAccessUnits, iNumEncoded, gopId );
     1061            xWriteOutput(bitstreamFile, iNumEncoded, outputAccessUnits, iViewIdx, false);
     1062            outputAccessUnits.clear();
     1063            i++;
     1064          }
     1065          else if ( m_pchMVCJointCodingOrder[i] == 'D')
     1066          {
     1067
     1068            i++;
     1069            if( m_bUsingDepthMaps )
     1070            {
     1071              assert(isdigit(m_pchMVCJointCodingOrder[i]));
     1072              iViewIdx = (Int)(m_pchMVCJointCodingOrder[i]-'0');
     1073#if SAIT_VSO_EST_A0033
     1074              if( m_bUseVSO && iNextPoc < m_iFrameToBeEncoded )
     1075              {
     1076                m_cCameraData.xSetDispCoeff( iNextPoc, iViewIdx );
     1077                m_acTEncDepthTopList[iViewIdx]->setDispCoeff( m_cCameraData.getDispCoeff() );
     1078              }
     1079#endif
     1080              m_acTEncDepthTopList[iViewIdx]->encode( depthEos[iViewIdx], pcDepthPicYuvOrg, *m_picYuvDepthRec[iViewIdx], outputAccessUnits, iNumDepthEncoded, gopId );
     1081              xWriteOutput(bitstreamFile, iNumDepthEncoded, outputAccessUnits, iViewIdx, true);
     1082              outputAccessUnits.clear();
     1083              i++;
     1084            }
     1085          }
     1086        }
     1087      }
     1088      else
     1089      {
     1090
     1091#endif
     1092
     1093//original code
     1094
     1095
     1096
     1097
     1098
     1099
    10051100      for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
    10061101      {
     
    10261121        }
    10271122      }
     1123 
     1124#if FLEX_CODING_ORDER
     1125      }
     1126#endif
     1127
    10281128#if HHI_INTERVIEW_SKIP || HHI_INTER_VIEW_MOTION_PRED || HHI_INTER_VIEW_RESIDUAL_PRED
    10291129      for( Int iViewIdx = 0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
Note: See TracChangeset for help on using the changeset viewer.