Changeset 1191 in 3DVCSoftware for branches/HTM-14.0-MV-draft-3/source/App/TAppEncoder
- Timestamp:
- 15 Apr 2015, 11:36:33 (10 years ago)
- Location:
- branches/HTM-14.0-MV-draft-3/source/App/TAppEncoder
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.0-MV-draft-3/source/App/TAppEncoder/TAppEncCfg.cpp
r1179 r1191 148 148 } 149 149 #endif 150 #if H_3D151 #if H_3D_VSO152 if ( m_pchVSOConfig != NULL)153 free ( m_pchVSOConfig );154 #endif155 if ( m_pchCameraParameterFile != NULL )156 free ( m_pchCameraParameterFile );157 158 if ( m_pchBaseViewCameraNumbers != NULL )159 free ( m_pchBaseViewCameraNumbers );160 #endif161 150 } 162 151 … … 225 214 } 226 215 #endif 227 #if HHI_INTER_COMP_PRED_K0052228 #if H_3D229 in>>entry.m_interCompPredFlag;230 #endif231 #endif232 216 return in; 233 217 } … … 243 227 #if H_MV 244 228 {"multiview-main", Profile::MULTIVIEWMAIN}, 245 #if H_3D246 {"3d-main" , Profile::MAIN3D},247 #endif248 229 249 230 #endif … … 337 318 string cfg_levels; 338 319 string cfg_tiers; 339 #if H_3D340 cfg_dimensionLength.push_back( 2 ); // depth341 cfg_dimensionLength.push_back( 32 ); // texture342 #else343 320 cfg_dimensionLength.push_back( 64 ); 344 #endif345 321 #endif 346 322 string cfg_dQPFile; … … 370 346 #if H_MV 371 347 ("NumberOfLayers", m_numberOfLayers , 1, "Number of layers") 372 #if !H_3D373 348 ("ScalabilityMask", m_scalabilityMask , 2 , "Scalability Mask: 2: Multiview, 8: Auxiliary, 10: Multiview + Auxiliary") 374 #else375 ("ScalabilityMask", m_scalabilityMask , 3 , "Scalability Mask, 1: Texture 3: Texture + Depth ")376 #endif377 349 ("DimensionIdLen", m_dimensionIdLen , cfg_dimensionLength , "Number of bits used to store dimensions Id") 378 350 ("ViewOrderIndex", m_viewOrderIndex , std::vector<Int>(1,0), "View Order Index per layer") 379 351 ("ViewId", m_viewId , std::vector<Int>(1,0), "View Id per View Order Index") 380 352 ("AuxId", m_auxId , std::vector<Int>(1,0), "AuxId per layer") 381 #if H_3D382 ("DepthFlag", m_depthFlag , std::vector<Int>(1,0), "Depth Flag")383 #if H_3D_DIM384 ("DLT", m_useDLT, true, "Depth lookup table")385 #endif386 #if H_3D387 #endif388 #endif389 353 ("TargetEncLayerIdList", m_targetEncLayerIdList, std::vector<Int>(0,0), "LayerIds in Nuh to be encoded") 390 354 ("LayerIdInNuh", m_layerIdInNuh , std::vector<Int>(1,0), "LayerId in Nuh") … … 535 499 ("DeblockingFilterMetric", m_DeblockingFilterMetric, false ) 536 500 537 #if H_3D_IC538 ("IlluCompEnable", m_abUseIC, true, "Enable illumination compensation")539 ("IlluCompLowLatencyEnc", m_bUseLowLatencyICEnc, false, "Enable low-latency illumination compensation encoding")540 #endif541 501 // Coding tools 542 502 ("AMP", m_enableAMP, true, "Enable asymmetric motion partitions") … … 754 714 ("OutputVpsInfo", m_outputVpsInfo, false ,"Output information about the layer dependencies and layer sets") 755 715 #endif 756 #if H_3D757 ("CameraParameterFile,cpf", m_pchCameraParameterFile, (Char *) 0, "Camera Parameter File Name")758 ("BaseViewCameraNumbers" , m_pchBaseViewCameraNumbers, (Char *) 0, "Numbers of base views")759 ("CodedCamParsPrecision", m_iCodedCamParPrecision, STD_CAM_PARAMETERS_PRECISION, "precision for coding of camera parameters (in units of 2^(-x) luma samples)" )760 /* View Synthesis Optimization */761 762 #if H_3D_VSO763 ("VSOConfig", m_pchVSOConfig , (Char *) 0 , "VSO configuration")764 ("VSO", m_bUseVSO , false , "Use VSO" )765 ("VSOMode", m_uiVSOMode , (UInt) 4 , "VSO Mode")766 ("LambdaScaleVSO", m_dLambdaScaleVSO , (Double) 1 , "Lambda Scaling for VSO")767 ("VSOLSTable", m_bVSOLSTable , true , "Depth QP dependent video/depth rate allocation by Lagrange multiplier" )768 ("ForceLambdaScaleVSO", m_bForceLambdaScaleVSO , false , "Force using Lambda Scale VSO also in non-VSO-Mode")769 ("AllowNegDist", m_bAllowNegDist , true , "Allow negative Distortion in VSO")770 771 ("UseEstimatedVSD", m_bUseEstimatedVSD , true , "Model based VSD estimation instead of rendering based for some encoder decisions" )772 ("VSOEarlySkip", m_bVSOEarlySkip , true , "Early skip of VSO computation if synthesis error assumed to be zero" )773 774 ("WVSO", m_bUseWVSO , true , "Use depth fidelity term for VSO" )775 ("VSOWeight", m_iVSOWeight , 10 , "Synthesized View Distortion Change weight" )776 ("VSDWeight", m_iVSDWeight , 1 , "View Synthesis Distortion estimate weight" )777 ("DWeight", m_iDWeight , 1 , "Depth Distortion weight" )778 779 #endif //HHI_VSO780 ("QTL", m_bUseQTL , true , "Use depth quad tree limitation (encoder only)" )781 782 ("IvMvPredFlag" , m_ivMvPredFlag , std::vector< Bool >(2,true) , "Inter-view motion prediction" )783 ("IvMvScalingFlag" , m_ivMvScalingFlag , std::vector< Bool >(2,true) , "Inter-view motion vector scaling" )784 ("Log2SubPbSizeMinus3" , m_log2SubPbSizeMinus3 , 0 , "Log2 minus 3 of sub Pb size" )785 ("IvResPredFlag" , m_ivResPredFlag , true , "Inter-view residual prediction" )786 ("DepthRefinementFlag" , m_depthRefinementFlag , true , "Depth to refine disparity" )787 ("ViewSynthesisPredFlag" , m_viewSynthesisPredFlag , true , "View synthesis prediction" )788 ("DepthBasedBlkPartFlag" , m_depthBasedBlkPartFlag , true , "Depth base block partitioning" )789 ("MpiFlag" , m_mpiFlag , true , "Motion inheritance from texture to depth" )790 ("Log2MpiSubPbSizeMinus3", m_log2MpiSubPbSizeMinus3, 0 , "Log2 minus 3 of sub Pb size for MPI" )791 ("IntraContourFlag" , m_intraContourFlag , true , "Intra contour mode" )792 ("IntraWedgeFlag" , m_intraWedgeFlag , true , "Intra wedge mode and segmental depth DCs" )793 ("IntraSdcFlag" , m_intraSdcFlag , true , "Intra depth DCs" )794 ("QtPredFlag" , m_qtPredFlag , true , "Quad tree prediction from texture to depth")795 ("InterSdcFlag" , m_interSdcFlag , true , "Inter depth DCs" )796 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033797 ("DepthIntraSkip" , m_depthIntraSkipFlag , true , "Depth intra skip mode" )798 #else799 ("IntraSingleFlag" , m_intraSingleFlag , true , "Intra single mode" )800 #endif801 #endif //H_3D802 716 ; 803 717 … … 1047 961 xResizeVector( m_auxId ); 1048 962 1049 #if H_3D1050 xResizeVector( m_depthFlag );1051 #endif1052 963 xResizeVector( m_fQP ); 1053 964 … … 1195 1106 if( cfg_profiles.empty() ) 1196 1107 { 1197 #if H_3D1198 cfg_profiles = string("main main 3d-main");1199 #else1200 1108 cfg_profiles = string("main main multiview-main"); 1201 #endif1202 1109 fprintf(stderr, "\nWarning: No profiles given, using defaults: %s", cfg_profiles.c_str() ); 1203 1110 anyEmpty = true; … … 1238 1145 xReadStrToEnum( cfg_tiers , m_levelTier ); 1239 1146 #endif 1240 #if H_3D 1147 // check validity of input parameters 1148 xCheckParameter(); 1149 1241 1150 // set global varibles 1242 1151 xSetGlobal(); 1243 #if H_3D_VSO1244 // Table base optimization1245 // Q&D1246 Double adLambdaScaleTable[] =1247 { 0.031250, 0.031639, 0.032029, 0.032418, 0.032808, 0.033197, 0.033586, 0.033976, 0.034365, 0.034755,1248 0.035144, 0.035533, 0.035923, 0.036312, 0.036702, 0.037091, 0.037480, 0.037870, 0.038259, 0.038648,1249 0.039038, 0.039427, 0.039817, 0.040206, 0.040595, 0.040985, 0.041374, 0.041764, 0.042153, 0.042542,1250 0.042932, 0.043321, 0.043711, 0.044100, 0.044194, 0.053033, 0.061872, 0.070711, 0.079550, 0.088388,1251 0.117851, 0.147314, 0.176777, 0.235702, 0.294628, 0.353553, 0.471405, 0.589256, 0.707107, 0.707100,1252 0.753550, 0.8000001253 };1254 if ( m_bUseVSO && m_bVSOLSTable )1255 {1256 Int firstDepthLayer = -1;1257 for (Int layer = 0; layer < m_numberOfLayers; layer++ )1258 {1259 if ( m_depthFlag[ layer ])1260 {1261 firstDepthLayer = layer;1262 break;1263 }1264 }1265 AOT( firstDepthLayer == -1 );1266 AOT( (m_iQP[firstDepthLayer] < 0) || (m_iQP[firstDepthLayer] > 51));1267 m_dLambdaScaleVSO *= adLambdaScaleTable[m_iQP[firstDepthLayer]];1268 }1269 #endif1270 #if H_3D_VSO1271 if ( m_bUseVSO && m_uiVSOMode == 4)1272 {1273 m_cRenModStrParser.setString( m_iNumberOfViews, m_pchVSOConfig );1274 m_cCameraData .init ( ((UInt) m_iNumberOfViews ),1275 g_bitDepthY,1276 (UInt)m_iCodedCamParPrecision,1277 m_FrameSkip,1278 (UInt)m_framesToBeEncoded,1279 m_pchCameraParameterFile,1280 m_pchBaseViewCameraNumbers,1281 NULL,1282 m_cRenModStrParser.getSynthViews(),1283 LOG2_DISP_PREC_LUT );1284 }1285 else if ( m_bUseVSO && m_uiVSOMode != 4 )1286 {1287 m_cCameraData .init ( ((UInt) m_iNumberOfViews ),1288 g_bitDepthY,1289 (UInt)m_iCodedCamParPrecision,1290 m_FrameSkip,1291 (UInt)m_framesToBeEncoded,1292 m_pchCameraParameterFile,1293 m_pchBaseViewCameraNumbers,1294 m_pchVSOConfig,1295 NULL,1296 LOG2_DISP_PREC_LUT );1297 }1298 else1299 {1300 m_cCameraData .init ( ((UInt) m_iNumberOfViews ),1301 g_bitDepthY,1302 (UInt) m_iCodedCamParPrecision,1303 m_FrameSkip,1304 (UInt) m_framesToBeEncoded,1305 m_pchCameraParameterFile,1306 m_pchBaseViewCameraNumbers,1307 NULL,1308 NULL,1309 LOG2_DISP_PREC_LUT );1310 }1311 #else1312 m_cCameraData .init ( ((UInt) m_iNumberOfViews ),1313 g_bitDepthY,1314 (UInt) m_iCodedCamParPrecision,1315 m_FrameSkip,1316 (UInt) m_framesToBeEncoded,1317 m_pchCameraParameterFile,1318 m_pchBaseViewCameraNumbers,1319 NULL,1320 NULL,1321 LOG2_DISP_PREC_LUT );1322 #endif1323 m_cCameraData.check( false, true );1324 #endif1325 // check validity of input parameters1326 xCheckParameter();1327 1328 #if !H_3D1329 // set global varibles1330 xSetGlobal();1331 #endif1332 1152 1333 1153 // print-out parameters … … 1383 1203 xConfirmPara( (m_layerIdInNuh.size()!=1) && (m_layerIdInNuh.size() < m_numberOfLayers) , "LayerIdInNuh must be given for all layers. "); 1384 1204 1385 #if H_3D1386 xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 3, "Scalability Mask must be equal to 2 or 3. ");1387 #else1388 1205 xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 8 && m_scalabilityMask != 10, "Scalability Mask must be equal to 2, 8 or 10"); 1389 #endif 1390 1391 #if H_3D 1392 if ( m_scalabilityMask & ( 1 << DEPTH_ID ) ) 1393 { 1394 m_dimIds.push_back( m_depthFlag ); 1395 } 1396 #endif 1206 1397 1207 1398 1208 m_dimIds.push_back( m_viewOrderIndex ); … … 1461 1271 xConfirmPara( allEqual , "Each layer shall have a different position in scalability space." ); 1462 1272 1463 #if !H_3D_FCO1464 1273 if ( numDiff == 1 ) 1465 1274 { … … 1472 1281 xConfirmPara( shallBeButIsNotIncreasing, "DimensionIds shall be increasing within one dimension. " ); 1473 1282 } 1474 #endif1475 1283 } 1476 1284 } … … 1559 1367 { 1560 1368 xConfirmPara( m_directRefLayers[i][j] < 0 || m_directRefLayers[i][j] >= i , "Reference layer id shall be greater than or equal to 0 and less than dependent layer id"); 1561 #if H_3D_DIRECT_DEP_TYPE1562 xConfirmPara( m_dependencyTypes[i][j] < 0 || m_dependencyTypes[i][j] > 6 , "Dependency type shall be greater than or equal to 0 and less than 7");1563 #else1564 1369 xConfirmPara( m_dependencyTypes[i][j] < 0 || m_dependencyTypes[i][j] > 2 , "Dependency type shall be greater than or equal to 0 and less than 3"); 1565 #endif1566 1370 } 1567 1371 } … … 1646 1450 xConfirmPara( m_maxNumMergeCand > 5, "MaxNumMergeCand must be 5 or smaller."); 1647 1451 1648 #if H_3D_ARP1649 #endif1650 #if H_3D_SPIVMP1651 xConfirmPara( m_log2SubPbSizeMinus3 < 0, "Log2SubPbSizeMinus3 must be equal to 0 or greater.");1652 xConfirmPara( m_log2SubPbSizeMinus3 > 3, "Log2SubPbSizeMinus3 must be equal to 3 or smaller.");1653 xConfirmPara( (1<< ( m_log2SubPbSizeMinus3 + 3) ) > m_uiMaxCUWidth, "Log2SubPbSizeMinus3 must be equal to log2(maxCUSize)-3 or smaller.");1654 1655 xConfirmPara( m_log2MpiSubPbSizeMinus3 < 0, "Log2MpiSubPbSizeMinus3 must be equal to 0 or greater.");1656 xConfirmPara( m_log2MpiSubPbSizeMinus3 > 3, "Log2MpiSubPbSizeMinus3 must be equal to 3 or smaller.");1657 xConfirmPara( (1<< (m_log2MpiSubPbSizeMinus3 + 3)) > m_uiMaxCUWidth, "Log2MpiSubPbSizeMinus3 must be equal to log2(maxCUSize)-3 or smaller.");1658 #endif1659 1452 #if ADAPTIVE_QP_SELECTION 1660 1453 #if H_MV … … 1713 1506 } 1714 1507 1715 #if H_3D1716 xConfirmPara( m_pchCameraParameterFile == 0 , "CameraParameterFile must be given");1717 xConfirmPara( m_pchBaseViewCameraNumbers == 0 , "BaseViewCameraNumbers must be given" );1718 #if BUG_FIX_TK651719 #if HHI_CAM_PARA_K00521720 xConfirmPara( m_iNumberOfViews != m_cCameraData.getBaseViewNumbers().size() , "Number of Views in BaseViewCameraNumbers must be equal to NumberOfViews" );1721 #else1722 xConfirmPara( ( ((UInt) m_numberOfLayers >> 1 ) != m_cCameraData.getBaseViewNumbers().size() ) && ( m_numberOfLayers != m_cCameraData.getBaseViewNumbers().size() ), "Number of Views in BaseViewCameraNumbers must be equal to NumberOfViews" );1723 #endif1724 #else1725 xConfirmPara( ((UInt) m_numberOfLayers >> 1 ) != m_cCameraData.getBaseViewNumbers().size(), "Number of Views in BaseViewCameraNumbers must be equal to NumberOfViews" );1726 #endif1727 xConfirmPara ( m_iCodedCamParPrecision < 0 || m_iCodedCamParPrecision > 5, "CodedCamParsPrecision must be in range of 0..5" );1728 #if H_3D_VSO1729 if( m_bUseVSO )1730 {1731 xConfirmPara( m_pchVSOConfig == 0 , "VSO Setup string must be given");1732 xConfirmPara( m_uiVSOMode > 4 , "VSO Mode must be less than 5");1733 }1734 #endif1735 #endif1736 1508 // max CU width and height should be power of 2 1737 1509 UInt ui = m_uiMaxCUWidth; … … 2442 2214 xPrintParaVector( "AuxId", m_auxId ); 2443 2215 #endif 2444 #if H_3D2445 xPrintParaVector( "DepthFlag", m_depthFlag );2446 printf("Coded Camera Param. Precision: %d\n", m_iCodedCamParPrecision);2447 #endif2448 2216 #if H_MV 2449 2217 xPrintParaVector( "QP" , m_fQP ); … … 2529 2297 } 2530 2298 printf("Max Num Merge Candidates : %d\n", m_maxNumMergeCand); 2531 #if H_3D2532 printf("BaseViewCameraNumbers : %s\n", m_pchBaseViewCameraNumbers );2533 printf("Coded Camera Param. Precision: %d\n", m_iCodedCamParPrecision);2534 #if H_3D_VSO2535 printf("Force use of Lambda Scale : %d\n", m_bForceLambdaScaleVSO );2536 2537 if ( m_bUseVSO )2538 {2539 printf("VSO Lambda Scale : %5.2f\n", m_dLambdaScaleVSO );2540 printf("VSO Mode : %d\n", m_uiVSOMode );2541 printf("VSO Config : %s\n", m_pchVSOConfig );2542 printf("VSO Negative Distortion : %d\n", m_bAllowNegDist ? 1 : 0);2543 printf("VSO LS Table : %d\n", m_bVSOLSTable ? 1 : 0);2544 printf("VSO Estimated VSD : %d\n", m_bUseEstimatedVSD ? 1 : 0);2545 printf("VSO Early Skip : %d\n", m_bVSOEarlySkip ? 1 : 0);2546 if ( m_bUseWVSO )2547 printf("Dist. Weights (VSO/VSD/SAD) : %d/%d/%d\n ", m_iVSOWeight, m_iVSDWeight, m_iDWeight );2548 }2549 #endif //HHI_VSO2550 #endif //H_3D2551 2299 printf("\n"); 2552 2300 #if H_MV … … 2606 2354 printf(" SignBitHidingFlag:%d ", m_signHideFlag); 2607 2355 printf("RecalQP:%d ", m_recalculateQPAccordingToLambda ? 1 : 0 ); 2608 #if H_3D_VSO2609 printf("VSO:%d ", m_bUseVSO );2610 printf("WVSO:%d ", m_bUseWVSO );2611 #endif2612 #if H_3D2613 printf( "QTL:%d " , m_bUseQTL);2614 printf( "IlluCompEnable:%d " , m_abUseIC);2615 printf( "IlluCompLowLatencyEnc:%d ", m_bUseLowLatencyICEnc);2616 printf( "DLT:%d ", m_useDLT );2617 2618 2619 printf( "IvMvPred:%d %d " , m_ivMvPredFlag[0] ? 1 : 0, m_ivMvPredFlag[1] ? 1 : 0);2620 printf( "IvMvScaling:%d %d " , m_ivMvScalingFlag[0] ? 1 : 0 , m_ivMvScalingFlag[1] ? 1 : 0);2621 2622 printf( "Log2SubPbSizeMinus3:%d " , m_log2SubPbSizeMinus3 );2623 printf( "IvResPred:%d " , m_ivResPredFlag ? 1 : 0 );2624 printf( "DepthRefinement:%d " , m_depthRefinementFlag ? 1 : 0 );2625 printf( "ViewSynthesisPred:%d " , m_viewSynthesisPredFlag ? 1 : 0 );2626 printf( "DepthBasedBlkPart:%d " , m_depthBasedBlkPartFlag ? 1 : 0 );2627 printf( "Mpi:%d " , m_mpiFlag ? 1 : 0 );2628 printf( "Log2MpiSubPbSizeMinus3:%d " , m_log2MpiSubPbSizeMinus3 );2629 printf( "IntraContour:%d " , m_intraContourFlag ? 1 : 0 );2630 printf( "IntraWedge:%d " , m_intraWedgeFlag ? 1 : 0 );2631 printf( "IntraSdc:%d " , m_intraSdcFlag ? 1 : 0 );2632 printf( "QtPred:%d " , m_qtPredFlag ? 1 : 0 );2633 printf( "InterSdc:%d " , m_interSdcFlag ? 1 : 0 );2634 #if SEC_DEPTH_INTRA_SKIP_MODE_K00332635 printf( "DepthIntraSkip:%d " , m_depthIntraSkipFlag ? 1 : 0 );2636 #else2637 printf( "IntraSingle:%d " , m_intraSingleFlag ? 1 : 0 );2638 #endif2639 #endif2640 2356 2641 2357 printf("\n\n"); -
branches/HTM-14.0-MV-draft-3/source/App/TAppEncoder/TAppEncCfg.h
r1179 r1191 44 44 #include <sstream> 45 45 #include <vector> 46 #if H_3D47 #include "TAppCommon/TAppComCamPara.h"48 #include "TLibRenderer/TRenModel.h"49 #include "TLibRenderer/TRenModSetupStrParser.h"50 #endif51 46 //! \ingroup TAppEncoder 52 47 //! \{ … … 80 75 std::vector<Int> m_viewOrderIndex; ///< view order index 81 76 std::vector<Int> m_auxId; ///< auxiliary id 82 #if H_3D83 std::vector<Int> m_depthFlag; ///< depth flag84 #endif85 77 std::vector<Int> m_targetEncLayerIdList; ///< layer Ids in Nuh to be encoded 86 78 std::vector<Int> m_layerIdInNuh; ///< layer Id in Nuh for each layer … … 133 125 134 126 135 #if H_3D_IC136 Bool m_abUseIC;137 Bool m_bUseLowLatencyICEnc;138 #endif139 127 140 128 #endif … … 437 425 Bool m_outputVpsInfo; 438 426 #endif 439 #if H_3D440 // Camera parameters441 Char* m_pchCameraParameterFile; ///< camera parameter file442 Char* m_pchBaseViewCameraNumbers;443 TAppComCamPara m_cCameraData;444 Int m_iCodedCamParPrecision; ///< precision for coding of camera parameters445 #if H_3D_VSO446 Char* m_pchVSOConfig;447 Bool m_bUseVSO; ///< flag for using View Synthesis Optimization448 Bool m_bVSOLSTable; ///< Depth QP dependent Lagrange parameter optimization (m23714)449 Bool m_bVSOEarlySkip; ///< Early skip of VSO computation (JCT3V-A0093 modification 4)450 451 //// Used for development by GT, might be removed later452 Double m_dLambdaScaleVSO; ///< Scaling factor for Lambda in VSO mode453 Bool m_bForceLambdaScaleVSO; ///< Use Lambda Scale for depth even if VSO is turned off454 Bool m_bAllowNegDist; ///< Allow negative distortion in VSO455 UInt m_uiVSOMode; ///< Number of VSO Mode, 1 = , 2 = simple, org vs. ren, 3 = simple, ren vs. ren, 4 = full456 457 // SAIT_VSO_EST_A0033458 Bool m_bUseEstimatedVSD; ///< Flag for using model based VSD estimation instead of VSO for some encoder decisions (JCT3V-A0033 modification 3)459 460 // LGE_WVSO_A0119461 Bool m_bUseWVSO; ///< flag for using View Synthesis Optimization462 Int m_iVSOWeight;463 Int m_iVSDWeight;464 Int m_iDWeight;465 466 // Ren Model String467 TRenModSetupStrParser m_cRenModStrParser;468 #endif469 #if H_3D_DIM470 Bool m_useDLT; ///< flag for using DLT471 #endif472 #if H_3D_QTLPC473 Bool m_bUseQTL; ///< flag for using depth QuadTree Limitation474 #endif475 476 std::vector< Bool > m_ivMvPredFlag;477 std::vector< Bool > m_ivMvScalingFlag;478 Int m_log2SubPbSizeMinus3;479 Bool m_ivResPredFlag;480 Bool m_depthRefinementFlag;481 Bool m_viewSynthesisPredFlag;482 Bool m_depthBasedBlkPartFlag;483 Bool m_mpiFlag;484 Int m_log2MpiSubPbSizeMinus3;485 Bool m_intraContourFlag;486 Bool m_intraWedgeFlag;487 Bool m_intraSdcFlag;488 Bool m_qtPredFlag;489 Bool m_interSdcFlag;490 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033491 Bool m_depthIntraSkipFlag;492 #else493 Bool m_intraSingleFlag;494 #endif495 #endif496 427 // internal member functions 497 428 Void xSetGlobal (); ///< set global variables -
branches/HTM-14.0-MV-draft-3/source/App/TAppEncoder/TAppEncTop.cpp
r1179 r1191 86 86 #endif 87 87 88 #if H_3D89 vps.createCamPars(m_iNumberOfViews);90 TComDLT& dlt = m_dlt;91 #endif92 88 93 89 #if H_MV … … 139 135 xSetDpbSize ( vps ); 140 136 xSetVPSVUI ( vps ); 141 #if H_3D142 #if HHI_CAM_PARA_K0052143 xSetCamPara ( vps );144 #endif145 #endif146 #if H_3D147 m_ivPicLists.setVPS ( &vps );148 xDeriveDltArray ( vps, dlt );149 #endif150 137 if ( m_targetEncLayerIdList.size() == 0 ) 151 138 { … … 178 165 } 179 166 180 #if H_3D181 // Set 3d tool parameters182 183 for (Int d = 0; d < 2; d++)184 {185 m_sps3dExtension.setIvMvPredFlag ( d, m_ivMvPredFlag[d] );186 m_sps3dExtension.setIvMvScalingFlag ( d, m_ivMvScalingFlag[d] );187 if (d == 0 )188 {189 m_sps3dExtension.setLog2SubPbSizeMinus3 ( d, m_log2SubPbSizeMinus3 );190 m_sps3dExtension.setIvResPredFlag ( d, m_ivResPredFlag );191 m_sps3dExtension.setDepthRefinementFlag ( d, m_depthRefinementFlag );192 m_sps3dExtension.setViewSynthesisPredFlag ( d, m_viewSynthesisPredFlag );193 m_sps3dExtension.setDepthBasedBlkPartFlag ( d, m_depthBasedBlkPartFlag );194 }195 else196 {197 m_sps3dExtension.setMpiFlag ( d, m_mpiFlag );198 m_sps3dExtension.setLog2MpiSubPbSizeMinus3( d, m_log2MpiSubPbSizeMinus3);199 m_sps3dExtension.setIntraContourFlag ( d, m_intraContourFlag );200 m_sps3dExtension.setIntraSdcWedgeFlag ( d, m_intraSdcFlag || m_intraWedgeFlag );201 m_sps3dExtension.setQtPredFlag ( d, m_qtPredFlag );202 m_sps3dExtension.setInterSdcFlag ( d, m_interSdcFlag );203 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033204 m_sps3dExtension.setDepthIntraSkipFlag ( d, m_depthIntraSkipFlag );205 #else206 m_sps3dExtension.setIntraSingleFlag ( d, m_intraSingleFlag );207 #endif208 }209 }210 #endif211 167 for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++) 212 168 { … … 224 180 m_cTEncTop.setViewId ( vps.getViewId ( layerId ) ); 225 181 m_cTEncTop.setViewIndex ( vps.getViewIndex ( layerId ) ); 226 #if H_3D227 Bool isDepth = ( vps.getDepthId ( layerId ) != 0 ) ;228 m_cTEncTop.setIsDepth ( isDepth );229 //====== Camera Parameters =========230 m_cTEncTop.setCameraParameters ( &m_cCameraData );231 #if !HHI_CAM_PARA_K0052232 m_cTEncTop.setCamParPrecision ( m_cCameraData.getCamParsCodedPrecision () );233 m_cTEncTop.setCamParInSliceHeader ( m_cCameraData.getVaryingCameraParameters() );234 235 m_cTEncTop.setCodedScale ( m_cCameraData.getCodedScale () );236 m_cTEncTop.setCodedOffset ( m_cCameraData.getCodedOffset () );237 #endif238 #if H_3D_VSO239 //====== VSO =========240 m_cTEncTop.setRenderModelParameters ( &m_cRenModStrParser );241 m_cTEncTop.setForceLambdaScaleVSO ( isDepth ? m_bForceLambdaScaleVSO : false );242 m_cTEncTop.setLambdaScaleVSO ( isDepth ? m_dLambdaScaleVSO : 1 );243 m_cTEncTop.setVSOMode ( isDepth ? m_uiVSOMode : 0 );244 245 m_cTEncTop.setAllowNegDist ( isDepth ? m_bAllowNegDist : false );246 247 // SAIT_VSO_EST_A0033248 m_cTEncTop.setUseEstimatedVSD ( isDepth ? m_bUseEstimatedVSD : false );249 250 // LGE_WVSO_A0119251 m_cTEncTop.setUseWVSO ( isDepth ? m_bUseWVSO : false );252 m_cTEncTop.setVSOWeight ( isDepth ? m_iVSOWeight : 0 );253 m_cTEncTop.setVSDWeight ( isDepth ? m_iVSDWeight : 0 );254 m_cTEncTop.setDWeight ( isDepth ? m_iDWeight : 0 );255 #endif // H_3D_VSO256 #if H_3D_IC257 m_cTEncTop.setUseIC ( vps.getViewIndex( layerId ) == 0 || isDepth ? false : m_abUseIC );258 m_cTEncTop.setUseICLowLatencyEnc ( m_bUseLowLatencyICEnc );259 #endif260 261 262 m_cTEncTop.setUseDMM ( isDepth ? m_intraWedgeFlag : false );263 m_cTEncTop.setUseSDC ( isDepth ? m_intraSdcFlag : false );264 m_cTEncTop.setUseDLT ( isDepth ? m_useDLT : false );265 m_cTEncTop.setUseQTL ( isDepth ? m_bUseQTL : false );266 267 268 m_cTEncTop.setSps3dExtension ( m_sps3dExtension );269 #endif // H_3D270 182 271 183 m_cTEncTop.setIvPicLists ( &m_ivPicLists ); … … 273 185 m_cTEncTop.setVPS(&vps); 274 186 275 #if H_3D276 m_cTEncTop.setDLT(&dlt);277 #endif278 187 279 188 #if H_MV … … 651 560 } 652 561 #endif 653 #if H_3D_ANNEX_SELECTION_FIX654 #if H_3D655 /// SET Profiles656 for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)657 {658 Int profileIdc = -1;659 for (Int olsIdx = 0; olsIdx < vps.getNumOutputLayerSets(); olsIdx++ )660 {661 Int lsIdx = vps.olsIdxToLsIdx( olsIdx );662 for(Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++ )663 {664 if( vps.getLayerIdInNuh( layerIdInVps) == vps.getLayerSetLayerIdList(lsIdx, i) )665 {666 Int ptlIdx = vps.getProfileTierLevelIdx( olsIdx, i );667 if ( ptlIdx != -1 )668 {669 Int curProfileIdc = vps.getPTL(ptlIdx)->getGeneralPTL()->getProfileIdc();670 if (profileIdc == -1)671 {672 profileIdc = curProfileIdc;673 }674 else675 {676 if ( profileIdc != curProfileIdc )677 {678 fprintf(stderr, "Error: ProfileIdc for layer with index %d in VPS not equal in all OLSs. \n", layerIdInVps );679 exit(EXIT_FAILURE);680 }681 }682 }683 }684 }685 }686 if (profileIdc == -1 )687 {688 fprintf(stderr, "Error: No profile given for layer with index %d in VPS not equal in all OLS. \n", layerIdInVps );689 exit(EXIT_FAILURE);690 }691 m_acTEncTopList[ layerIdInVps ]->setProfileIdc( profileIdc );692 }693 #endif694 #endif695 #if H_3D_VSO696 if ( m_bUseVSO )697 {698 if ( m_uiVSOMode == 4 )699 {700 #if H_3D_VSO_EARLY_SKIP701 m_cRendererModel.create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, g_uiMaxCUHeight , LOG2_DISP_PREC_LUT, 0, m_bVSOEarlySkip );702 #else703 m_cRendererModel.create( m_cRenModStrParser.getNumOfBaseViews(), m_cRenModStrParser.getNumOfModels(), m_iSourceWidth, g_uiMaxCUHeight , LOG2_DISP_PREC_LUT, 0 );704 #endif705 for ( Int layer = 0; layer < m_numberOfLayers ; layer++ )706 {707 TEncTop* pcEncTop = m_acTEncTopList[ layer ];708 Int iViewNum = pcEncTop->getViewIndex();709 Int iContent = pcEncTop->getIsDepth() ? 1 : 0;710 Int iNumOfModels = m_cRenModStrParser.getNumOfModelsForView(iViewNum, iContent);711 712 Bool bUseVSO = (iNumOfModels != 0);713 714 pcEncTop->setUseVSO( bUseVSO );715 pcEncTop->getRdCost()->setRenModel( bUseVSO ? &m_cRendererModel : NULL );716 717 for (Int iCurModel = 0; iCurModel < iNumOfModels; iCurModel++ )718 {719 Int iModelNum; Int iLeftViewNum; Int iRightViewNum; Int iDump; Int iOrgRefNum; Int iBlendMode;720 721 m_cRenModStrParser.getSingleModelData ( iViewNum, iContent, iCurModel, iModelNum, iBlendMode, iLeftViewNum, iRightViewNum, iOrgRefNum, iDump ) ;722 m_cRendererModel .createSingleModel ( iViewNum, iContent, iModelNum, iLeftViewNum, iRightViewNum, (iOrgRefNum != -1), iBlendMode );723 }724 }725 }726 else727 {728 AOT(true);729 }730 }731 #endif732 562 } 733 563 … … 737 567 // initialize global variables 738 568 initROM(); 739 #if H_3D_DIM_DMM740 initWedgeLists( true );741 #endif742 569 743 570 for( Int layer=0; layer < m_numberOfLayers; layer++) … … 798 625 Void TAppEncTop::xInitLib(Bool isFieldCoding) 799 626 { 800 #if H_3D801 #if !HHI_CAM_PARA_K0052802 for ( Int viewIndex = 0; viewIndex < m_vps->getNumViews(); viewIndex++ )803 {804 m_vps->initCamParaVPS( viewIndex, true, m_cCameraData.getCamParsCodedPrecision(),805 m_cCameraData.getVaryingCameraParameters(), m_cCameraData.getCodedScale(), m_cCameraData.getCodedOffset() );806 }807 #endif808 #endif809 627 810 628 #if H_MV … … 923 741 for ( Int gopId=0; gopId < gopSize; gopId++ ) 924 742 { 925 #if H_3D926 UInt iNextPoc = m_acTEncTopList[0] -> getFrameId( gopId );927 if ( iNextPoc < m_framesToBeEncoded )928 {929 m_cCameraData.update( iNextPoc );930 }931 #endif932 743 for(Int layer=0; layer < m_numberOfLayers; layer++ ) 933 744 { … … 937 748 } 938 749 939 #if H_3D_VSO940 if( m_bUseVSO && m_bUseEstimatedVSD && iNextPoc < m_framesToBeEncoded )941 {942 m_cCameraData.setDispCoeff( iNextPoc, m_acTEncTopList[layer]->getViewIndex() );943 m_acTEncTopList[layer] ->setDispCoeff( m_cCameraData.getDispCoeff() );944 }945 #endif946 750 947 751 Int iNumEncoded = 0; … … 1025 829 printRateSummary(); 1026 830 1027 #if H_3D_REN_MAX_DEV_OUT1028 Double dMaxDispDiff = m_cCameraData.getMaxShiftDeviation();1029 1030 if ( !(dMaxDispDiff < 0) )1031 {1032 printf("\n Max. possible shift error: %12.3f samples.\n", dMaxDispDiff );1033 }1034 #endif1035 831 1036 832 return; … … 1286 1082 } 1287 1083 1288 #if H_3D_DIM_DLT1289 Void TAppEncTop::xAnalyzeInputBaseDepth(UInt layer, UInt uiNumFrames, TComVPS* vps, TComDLT* dlt)1290 {1291 TComPicYuv* pcDepthPicYuvOrg = new TComPicYuv;1292 // allocate original YUV buffer1293 pcDepthPicYuvOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth );1294 1295 TVideoIOYuv* depthVideoFile = new TVideoIOYuv;1296 1297 UInt uiMaxDepthValue = ((1 << g_bitDepthY)-1);1298 1299 Bool abValidDepths[256];1300 1301 depthVideoFile->open( m_pchInputFileList[layer], false, m_inputBitDepthY, m_inputBitDepthC, m_internalBitDepthY, m_internalBitDepthC ); // read mode1302 1303 // initialize boolean array1304 for(Int p=0; p<=uiMaxDepthValue; p++)1305 abValidDepths[p] = false;1306 1307 Int iHeight = pcDepthPicYuvOrg->getHeight();1308 Int iWidth = pcDepthPicYuvOrg->getWidth();1309 Int iStride = pcDepthPicYuvOrg->getStride();1310 1311 Pel* pInDM = pcDepthPicYuvOrg->getLumaAddr();1312 1313 for(Int uiFrame=0; uiFrame < uiNumFrames; uiFrame++ )1314 {1315 depthVideoFile->read( pcDepthPicYuvOrg, m_aiPad );1316 1317 // check all pixel values1318 for (Int i=0; i<iHeight; i++)1319 {1320 Int rowOffset = i*iStride;1321 1322 for (Int j=0; j<iWidth; j++)1323 {1324 Pel depthValue = pInDM[rowOffset+j];1325 abValidDepths[depthValue] = true;1326 }1327 }1328 }1329 1330 depthVideoFile->close();1331 delete depthVideoFile;1332 1333 pcDepthPicYuvOrg->destroy();1334 delete pcDepthPicYuvOrg;1335 1336 // convert boolean array to idx2Depth LUT1337 Int* aiIdx2DepthValue = (Int*) calloc(uiMaxDepthValue, sizeof(Int));1338 Int iNumDepthValues = 0;1339 for(Int p=0; p<=uiMaxDepthValue; p++)1340 {1341 if( abValidDepths[p] == true)1342 {1343 aiIdx2DepthValue[iNumDepthValues++] = p;1344 }1345 }1346 1347 if( uiNumFrames == 0 || numBitsForValue(iNumDepthValues) == g_bitDepthY )1348 {1349 dlt->setUseDLTFlag(layer, false);1350 }1351 1352 // assign LUT1353 if( dlt->getUseDLTFlag(layer) )1354 {1355 dlt->setDepthLUTs(layer, aiIdx2DepthValue, iNumDepthValues);1356 }1357 1358 // free temporary memory1359 free(aiIdx2DepthValue);1360 }1361 #endif1362 1084 1363 1085 #if H_MV … … 1390 1112 1391 1113 1392 #if HHI_INTER_COMP_PRED_K00521393 #if H_3D1394 vps.initViewCompLayer( );1395 #endif1396 #endif1397 1114 } 1398 1115 … … 1412 1129 Bool defaultDirectDependencyFlag = false; 1413 1130 1414 #if H_3D_DIRECT_DEP_TYPE1415 Int directDepTypeLenMinus2 = 0;1416 #endif1417 1131 for( Int depLayer = 1; depLayer < m_numberOfLayers; depLayer++ ) 1418 1132 { … … 1424 1138 vps.setDirectDependencyFlag( depLayer, refLayer, true); 1425 1139 Int curDirectDependencyType = m_dependencyTypes[depLayer][i]; 1426 #if H_3D_DIRECT_DEP_TYPE1427 directDepTypeLenMinus2 = std::max( directDepTypeLenMinus2, gCeilLog2( curDirectDependencyType + 1 ) - 2 );1428 #endif1429 1140 if ( defaultDirectDependencyType != -1 ) 1430 1141 { … … 1444 1155 vps.setDefaultDirectDependencyType( defaultDirectDependencyFlag ? defaultDirectDependencyType : -1 ); 1445 1156 1446 #if H_3D_DIRECT_DEP_TYPE1447 assert( directDepTypeLenMinus2 <= 1 );1448 vps.setDirectDepTypeLenMinus2( directDepTypeLenMinus2 );1449 #endif1450 1157 1451 1158 … … 1477 1184 Int curLayerIdInNuh = vps.getLayerIdInNuh( curLayerIdInVps ); 1478 1185 Int maxTid = -1; 1479 #if H_3D1480 if ( vps.getDirectDependencyFlag( curLayerIdInVps, refLayerIdInVps ) )1481 {1482 if ( m_depthFlag[ curLayerIdInVps] == m_depthFlag[ refLayerIdInVps ] )1483 {1484 #endif1485 1186 for( Int i = 0; i < ( getGOPSize() + 1); i++ ) 1486 1187 { … … 1489 1190 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++) 1490 1191 { 1491 #if H_3D1492 if ( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[ j ] ) == refLayerIdInNuh )1493 #else1494 1192 if ( vps.getIdDirectRefLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[ j ] ) == refLayerIdInNuh ) 1495 #endif1496 1193 { 1497 #if !HHI_INTER_COMP_PRED_K00521498 1194 Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 ); 1499 #endif1500 1195 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 ); 1501 #if HHI_INTER_COMP_PRED_K00521502 // refAlwaysIntra actually not needed, since TemporalIds need to be aligned within an AU.1503 // Thus, reference pictures of IRAP pictures have TemporalId equal to 0.1504 maxTid = std::max( maxTid, refLayerZero ? 0 : geRef.m_temporalId );1505 #else1506 1196 maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId ); 1507 #endif1508 1197 } 1509 1198 } 1510 1199 } 1511 #if H_3D1512 }1513 else1514 {1515 #if HHI_INTER_COMP_PRED_K00521516 if( m_depthFlag[ curLayerIdInVps ] && ( m_mpiFlag|| m_qtPredFlag || m_intraContourFlag ) )1517 {1518 Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false );1519 if ( nuhLayerIdTex == refLayerIdInNuh )1520 {1521 for( Int i = 0; i < ( getGOPSize() + 1); i++ )1522 {1523 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )];1524 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )];1525 if ( geCur.m_interCompPredFlag )1526 {1527 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );1528 maxTid = std::max( maxTid, refLayerZero ? 0 : geRef.m_temporalId );1529 }1530 }1531 }1532 }1533 if( !m_depthFlag[ curLayerIdInVps ] && vps.getNumRefListLayers( curLayerIdInNuh) > 0 && ( m_depthRefinementFlag || m_viewSynthesisPredFlag || m_depthBasedBlkPartFlag ) )1534 {1535 for( Int i = 0; i < ( getGOPSize() + 1); i++ )1536 {1537 GOPEntry geCur = m_GOPListMvc[curLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )];1538 GOPEntry geRef = m_GOPListMvc[refLayerIdInVps][( i < getGOPSize() ? i : MAX_GOP )];1539 1540 if ( geCur.m_interCompPredFlag )1541 {1542 for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++ )1543 {1544 Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[j] ) ), true );1545 if ( nuhLayerIdDep == refLayerIdInNuh )1546 {1547 Bool refLayerZero = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );1548 maxTid = std::max( maxTid, refLayerZero ? 0 : geRef.m_temporalId );1549 }1550 }1551 }1552 }1553 }1554 #else1555 if( m_depthFlag[ curLayerIdInVps ] && ( m_mpiFlag|| m_qtPredFlag || m_intraContourFlag ) )1556 {1557 Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false );1558 if ( nuhLayerIdTex == refLayerIdInNuh )1559 {1560 maxTid = std::max( maxTid, vps.getSubLayersVpsMaxMinus1( refLayerIdInVps) + 1 );1561 }1562 }1563 if( !m_depthFlag[ curLayerIdInVps ] && vps.getNumRefListLayers( curLayerIdInNuh) > 0 && ( m_depthRefinementFlag || m_viewSynthesisPredFlag || m_depthBasedBlkPartFlag ) )1564 {1565 Int maxPresentTid =-1;1566 Bool allPresent = true;1567 for (Int i = 0; i < vps.getNumRefListLayers( curLayerIdInNuh); i++ )1568 {1569 Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer(curLayerIdInNuh, i ) ), true );1570 if ( nuhLayerIdDep== refLayerIdInNuh )1571 {1572 maxPresentTid= std::max( maxTid, vps.getSubLayersVpsMaxMinus1( refLayerIdInVps) + 1 );1573 }1574 else1575 {1576 allPresent = false;1577 }1578 }1579 1580 if ( allPresent )1581 {1582 maxTid= std::max( maxTid, maxPresentTid );1583 }1584 }1585 #endif1586 }1587 } // if ( vps.getDirectDependencyFlag( curLayerIdInVps, refLayerIdInVps ) )1588 vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 );1589 #endif1590 1200 } // Loop curLayerIdInVps 1591 1201 } // Loop refLayerIdInVps … … 1636 1246 1637 1247 // check if all reference layers when allRefLayerActiveFlag is equal to 1 are reference layer pictures specified in the gop entry 1638 #if H_3D1639 for (Int k = 0; k < vps.getNumRefListLayers( layerIdInNuh ) && allRefLayersActiveFlag; k++ )1640 {1641 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdRefListLayer( layerIdInNuh , k ) );1642 #else1643 1248 for (Int k = 0; k < vps.getNumDirectRefLayers( layerIdInNuh ) && allRefLayersActiveFlag; k++ ) 1644 1249 { 1645 1250 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdDirectRefLayer( layerIdInNuh , k ) ); 1646 #endif1647 1251 if ( vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId && ( tId == 0 || vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId ) ) 1648 1252 { … … 1662 1266 { 1663 1267 Bool referenceLayerFoundFlag = false; 1664 #if H_3D1665 for (Int k = 0; k < vps.getNumRefListLayers( layerIdInNuh ); k++ )1666 {1667 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdRefListLayer( layerIdInNuh, k) );1668 #else1669 1268 for (Int k = 0; k < vps.getNumDirectRefLayers( layerIdInNuh ); k++ ) 1670 1269 { 1671 1270 Int refLayerIdInVps = vps.getLayerIdInVps( vps.getIdDirectRefLayer( layerIdInNuh, k) ); 1672 #endif1673 1271 if ( vps.getSubLayersVpsMaxMinus1(refLayerIdInVps) >= tId && ( tId == 0 || vps.getMaxTidIlRefPicsPlus1(refLayerIdInVps,layerIdInVps) > tId ) ) 1674 1272 { … … 1777 1375 break; 1778 1376 case Profile::MULTIVIEWMAIN: 1779 #if H_3D1780 case Profile::MAIN3D:1781 #endif1782 1377 ptl->setMax12bitConstraintFlag ( true ); 1783 1378 ptl->setMax12bitConstraintFlag ( true ); … … 1800 1395 { 1801 1396 1802 #if H_3D_DISABLE_CHROMA1803 Bool anyDepth = false;1804 for ( Int i = 0; i < m_numberOfLayers; i++ )1805 {1806 vps.setVpsRepFormatIdx( i, m_depthFlag[ i ] ? 1 : 0 );1807 anyDepth = anyDepth || m_depthFlag[ i ];1808 }1809 1810 vps.setRepFormatIdxPresentFlag( anyDepth );1811 vps.setVpsNumRepFormatsMinus1 ( anyDepth ? 1 : 0 );1812 1813 for ( Int j = 0; j <= vps.getVpsNumRepFormatsMinus1(); j++ )1814 {1815 TComRepFormat* repFormat = new TComRepFormat;1816 1817 repFormat->setBitDepthVpsChromaMinus8 ( g_bitDepthC - 8 );1818 repFormat->setBitDepthVpsLumaMinus8 ( g_bitDepthY - 8 );1819 repFormat->setChromaFormatVpsIdc ( j == 1 ? CHROMA_400 : CHROMA_420 );1820 repFormat->setPicHeightVpsInLumaSamples ( m_iSourceHeight );1821 repFormat->setPicWidthVpsInLumaSamples ( m_iSourceWidth );1822 repFormat->setChromaAndBitDepthVpsPresentFlag( true );1823 // ToDo not supported yet.1824 //repFormat->setSeparateColourPlaneVpsFlag( );1825 #if H_MV_FIX_CONF_WINDOW1826 Bool conformanceWindowVpsFlag = ( m_confWinBottom != 0 ) || ( m_confWinRight != 0 ) || ( m_confWinTop != 0 ) || ( m_confWinBottom != 0 );1827 repFormat->setConformanceWindowVpsFlag( conformanceWindowVpsFlag );1828 if ( conformanceWindowVpsFlag )1829 {1830 repFormat->setConfWinVpsLeftOffset ( m_confWinLeft / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) );1831 repFormat->setConfWinVpsRightOffset ( m_confWinRight / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) );1832 repFormat->setConfWinVpsTopOffset ( m_confWinTop / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) );1833 repFormat->setConfWinVpsBottomOffset ( m_confWinBottom / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) );1834 }1835 #else1836 repFormat->setConformanceWindowVpsFlag( true );1837 repFormat->setConfWinVpsLeftOffset ( m_confWinLeft / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) );1838 repFormat->setConfWinVpsRightOffset ( m_confWinRight / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) );1839 repFormat->setConfWinVpsTopOffset ( m_confWinTop / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) );1840 repFormat->setConfWinVpsBottomOffset ( m_confWinBottom / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) );1841 #endif1842 assert( vps.getRepFormat( j ) == NULL );1843 vps.setRepFormat( j , repFormat );1844 };1845 1846 1847 #else1848 1397 vps.setRepFormatIdxPresentFlag( false ); 1849 1398 vps.setVpsNumRepFormatsMinus1 ( 0 ); … … 1874 1423 assert( vps.getRepFormat( 0 ) == NULL ); 1875 1424 vps.setRepFormat( 0 , repFormat ); 1876 #endif1877 1425 } 1878 1426 … … 2250 1798 } 2251 1799 2252 #if HHI_CAM_PARA_K00522253 #if H_3D2254 Void TAppEncTop::xSetCamPara ( TComVPS& vps )2255 {2256 vps.setCpPrecision( m_cCameraData.getCamParsCodedPrecision());2257 2258 for ( Int n = 1; n < vps.getNumViews(); n++ )2259 {2260 Int i = vps.getViewOIdxList( n );2261 Int iInVps = vps.getVoiInVps ( i );2262 vps.setNumCp( iInVps, n);2263 2264 if ( vps.getNumCp( iInVps ) > 0 )2265 {2266 vps.setCpInSliceSegmentHeaderFlag( iInVps, m_cCameraData.getVaryingCameraParameters() );2267 2268 for( Int m = 0; m < vps.getNumCp( iInVps ); m++ )2269 {2270 vps.setCpRefVoi( iInVps, m, vps.getViewOIdxList( m ) );2271 if( !vps.getCpInSliceSegmentHeaderFlag( iInVps ) )2272 {2273 Int j = vps.getCpRefVoi( iInVps, m );2274 Int jInVps = vps.getVoiInVps( j );2275 2276 vps.setVpsCpScale ( iInVps, jInVps, m_cCameraData.getCodedScale() [ jInVps ][ iInVps ] ) ;2277 vps.setVpsCpInvScale( iInVps, jInVps, m_cCameraData.getCodedScale() [ iInVps ][ jInVps ] ) ;2278 vps.setVpsCpOff ( iInVps, jInVps, m_cCameraData.getCodedOffset()[ jInVps ][ iInVps ] ) ;2279 vps.setVpsCpInvOff ( iInVps, jInVps, m_cCameraData.getCodedOffset()[ iInVps ][ jInVps ] ) ;2280 }2281 }2282 }2283 }2284 vps.deriveCpPresentFlag();2285 }2286 #endif2287 #endif2288 1800 2289 1801 … … 2297 1809 2298 1810 2299 #if H_3D2300 2301 Void TAppEncTop::xDeriveDltArray( TComVPS& vps, TComDLT& dlt )2302 {2303 Int iNumDepthViews = 0;2304 Bool bDltPresentFlag = false;2305 2306 for ( Int layer = 0; layer <= vps.getMaxLayersMinus1(); layer++ )2307 {2308 Bool isDepth = ( vps.getDepthId( layer ) == 1 );2309 2310 if ( isDepth )2311 {2312 iNumDepthViews++;2313 }2314 2315 dlt.setUseDLTFlag( layer , isDepth && m_useDLT );2316 if( dlt.getUseDLTFlag( layer ) )2317 {2318 xAnalyzeInputBaseDepth(layer, max(m_iIntraPeriod[layer], 24), &vps, &dlt);2319 bDltPresentFlag = bDltPresentFlag || dlt.getUseDLTFlag(layer);2320 dlt.setInterViewDltPredEnableFlag(layer, (dlt.getUseDLTFlag(layer) && (layer>1)));2321 }2322 }2323 2324 dlt.setDltPresentFlag( bDltPresentFlag );2325 dlt.setNumDepthViews ( iNumDepthViews );2326 }2327 #endif2328 1811 //! \} -
branches/HTM-14.0-MV-draft-3/source/App/TAppEncoder/TAppEncTop.h
r1179 r1191 46 46 #include "TLibCommon/AccessUnit.h" 47 47 #include "TAppEncCfg.h" 48 #if H_3D49 #include "../../Lib/TLibRenderer/TRenTop.h"50 #endif51 48 52 49 #if KWU_RC_MADPRED_E0227 … … 90 87 #endif 91 88 92 #if H_3D93 TComDLT m_dlt; ///< dlt94 TComSps3dExtension m_sps3dExtension; ///< Currently all layers share the same sps 3D Extension95 #endif96 89 97 90 UInt m_essentialBytes; 98 91 UInt m_totalBytes; 99 #if H_3D_VSO100 TRenTop m_cRendererTop;101 TRenModel m_cRendererModel;102 #endif103 92 protected: 104 93 // initialization … … 142 131 Void xSetDpbSize ( TComVPS& vps ); 143 132 Void xSetVPSVUI ( TComVPS& vps ); 144 #if HHI_CAM_PARA_K0052145 #if H_3D146 Void xSetCamPara ( TComVPS& vps );147 #endif148 #endif149 133 GOPEntry* xGetGopEntry( Int layerIdInVps, Int poc ); 150 134 Int xGetMax( std::vector<Int>& vec); 151 135 Bool xLayerIdInTargetEncLayerIdList( Int nuhLayerId ); 152 #endif153 #if H_3D154 Void xDeriveDltArray( TComVPS& vps, TComDLT& dlt );155 #endif156 #if H_3D_DIM_DLT157 Void xAnalyzeInputBaseDepth(UInt layer, UInt uiNumFrames, TComVPS* vps, TComDLT* dlt);158 136 #endif 159 137 public:
Note: See TracChangeset for help on using the changeset viewer.