Changeset 200 in 3DVCSoftware for branches/HTM-5.0-Nokia/source/App
- Timestamp:
- 3 Dec 2012, 16:57:58 (12 years ago)
- 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 88 88 #endif 89 89 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 90 98 #if SONY_COLPIC_AVAILABILITY 91 99 m_tDecTop[0]->setViewOrderIdx(0); … … 102 110 pcListPic[i] = NULL; 103 111 newPicture[i] = false; 112 #if FLEX_CODING_ORDER 113 FCO_Order[i]=NULL; 114 #endif 115 104 116 } 105 117 … … 161 173 depth = getVPSAccess()->getActiveVPS()->getDepthFlag(nalu.m_layerId); 162 174 } 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 164 228 #else 165 229 Int viewId = nalu.m_viewId; 166 230 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 168 282 #endif 169 283 #endif … … 224 338 { 225 339 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 226 356 } 227 357 } … … 527 657 TDecTop* TAppDecTop::getTDecTop( Int viewId, Bool isDepth ) 528 658 { 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 529 712 return m_tDecTop[(isDepth ? 1 : 0) + viewId * 2]; // coding order T0D0T1D1T2D2 713 #endif 714 530 715 } 531 716 … … 546 731 assert( ( viewId >= 0 ) ); 547 732 733 #if FLEX_CODING_ORDER 734 if (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 } 748 else 749 return NULL; 750 #else 751 548 752 TComList<TComPic*>* apcListPic = getTDecTop( viewId, isDepth )->getListPic(); 549 753 TComPic* pcPic = NULL; … … 557 761 } 558 762 return pcPic; 763 #endif 559 764 } 560 765 //! \} -
branches/HTM-5.0-Nokia/source/App/TAppDecoder/TAppDecTop.h
r195 r200 71 71 Bool m_useDepth; 72 72 73 #if FLEX_CODING_ORDER 74 Int FCO_viewDepthId; 75 Char FCO_Order[MAX_VIEW_NUM*2]; 76 #endif 77 73 78 FILE* m_pScaleOffsetFile; 74 79 CamParsCollector m_cCamParsCollector; -
branches/HTM-5.0-Nokia/source/App/TAppEncoder/TAppEncCfg.cpp
r197 r200 111 111 if (m_pchBitstreamFile != NULL) 112 112 free (m_pchBitstreamFile) ; 113 114 #if FLEX_CODING_ORDER 115 if (m_pchMVCJointCodingOrder != NULL) 116 { 117 free(m_pchMVCJointCodingOrder) ; 118 } 119 #endif 120 113 121 #if HHI_VSO 114 122 if ( m_pchVSOConfig != NULL) … … 203 211 string cfg_RowHeight; 204 212 string cfg_ScalingListFile; 213 214 #if FLEX_CODING_ORDER 215 string cfg_JointCodingOrdering; 216 #endif 217 205 218 po::Options opts; 206 219 opts.addOptions() … … 246 259 247 260 ("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 248 267 /* Unit definition parameters */ 249 268 ("MaxCUWidth", m_uiMaxCUWidth, 64u) … … 533 552 m_pchBitstreamFile = cfg_BitstreamFile.empty() ? NULL : strdup(cfg_BitstreamFile.c_str()); 534 553 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 535 598 536 599 m_pchColumnWidth = cfg_ColumnWidth.empty() ? NULL: strdup(cfg_ColumnWidth.c_str()); -
branches/HTM-5.0-Nokia/source/App/TAppEncoder/TAppEncCfg.h
r197 r200 88 88 Int m_iNumberOfViews; ///< number Views to Encode 89 89 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 90 96 // coding structure 91 97 Int m_iIntraPeriod; ///< period of I-slice (random access period) -
branches/HTM-5.0-Nokia/source/App/TAppEncoder/TAppEncTop.cpp
r197 r200 400 400 for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++) 401 401 { 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 402 427 m_depthFrameRcvd.push_back(0); 403 428 m_acTEncDepthTopList.push_back(new TEncTop); … … 682 707 m_acTEncDepthTopList[iViewIdx]->setUseDMM ( m_bUseDMM ); 683 708 #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 684 714 #if OL_QTLIMIT_PREDCODING_B0068 685 715 m_acTEncDepthTopList[iViewIdx]->setUseQTLPC (m_bUseQTLPC); 686 716 #endif 717 687 718 #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 690 727 #if RWTH_SDC_DLT_B0036 691 728 m_acTEncDepthTopList[iViewIdx]->setUseDLT ( m_bUseDLT ); … … 1003 1040 } 1004 1041 #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 1005 1100 for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ ) 1006 1101 { … … 1026 1121 } 1027 1122 } 1123 1124 #if FLEX_CODING_ORDER 1125 } 1126 #endif 1127 1028 1128 #if HHI_INTERVIEW_SKIP || HHI_INTER_VIEW_MOTION_PRED || HHI_INTER_VIEW_RESIDUAL_PRED 1029 1129 for( Int iViewIdx = 0; iViewIdx < m_iNumberOfViews; iViewIdx++ )
Note: See TracChangeset for help on using the changeset viewer.