Changeset 118 in SHVCSoftware for branches/HM-10.0-dev-SHM/source/App
- Timestamp:
- 11 Apr 2013, 00:34:54 (12 years ago)
- Location:
- branches/HM-10.0-dev-SHM/source/App/TAppEncoder
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HM-10.0-dev-SHM/source/App/TAppEncoder/TAppEncCfg.cpp
r74 r118 292 292 Int* cfg_IntraPeriod [MAX_LAYERS]; 293 293 Int* cfg_conformanceMode [MAX_LAYERS]; 294 #if VPS_EXTN_DIRECT_REF_LAYERS 295 Int* cfg_numDirectRefLayers [MAX_LAYERS]; 296 string cfg_refLayerIds [MAX_LAYERS]; 297 string* cfg_refLayerIdsPtr [MAX_LAYERS]; 298 #endif 294 299 for(UInt layer = 0; layer < MAX_LAYERS; layer++) 295 300 { … … 302 307 cfg_IntraPeriod[layer] = &m_acLayerCfg[layer].m_iIntraPeriod; 303 308 cfg_conformanceMode[layer] = &m_acLayerCfg[layer].m_conformanceMode; 309 #if VPS_EXTN_DIRECT_REF_LAYERS 310 cfg_numDirectRefLayers [layer] = &m_acLayerCfg[layer].m_numDirectRefLayers; 311 cfg_refLayerIdsPtr [layer] = &cfg_refLayerIds[layer]; 312 #endif 304 313 } 305 314 #if AVC_SYNTAX … … 337 346 ("FrameRate%d,-fr%d", cfg_FrameRate, 0, MAX_LAYERS, "Frame rate for layer %d") 338 347 ("LambdaModifier%d,-LM%d", m_adLambdaModifier, ( double )1.0, MAX_TLAYER, "Lambda modifier for temporal layer %d") 348 #if VPS_EXTN_DIRECT_REF_LAYERS 349 ("NumDirectRefLayers%d", cfg_numDirectRefLayers, -1, MAX_LAYERS, "Number of direct reference layers") 350 ("RefLayerIds%d", cfg_refLayerIdsPtr, string(""), MAX_LAYERS, "direct reference layer IDs") 351 #endif 339 352 ("NumLayers", m_numLayers, 1, "Number of layers to code") 340 353 ("ConformanceMode%d", cfg_conformanceMode,0, MAX_LAYERS, "Window conformance mode (0: no cropping, 1:automatic padding, 2: padding, 3:cropping") … … 717 730 m_pRowHeight = NULL; 718 731 } 732 #if VPS_EXTN_DIRECT_REF_LAYERS 733 for(Int layer = 0; layer < MAX_LAYERS; layer++) 734 { 735 Char* pRefLayerIds = cfg_refLayerIds[layer].empty() ? NULL: strdup(cfg_refLayerIds[layer].c_str()); 736 if( m_acLayerCfg[layer].m_numDirectRefLayers > 0 ) 737 { 738 char *refLayerId; 739 int i=0; 740 m_acLayerCfg[layer].m_refLayerIds = new Int[m_acLayerCfg[layer].m_numDirectRefLayers]; 741 refLayerId = strtok(pRefLayerIds, " ,-"); 742 while(refLayerId != NULL) 743 { 744 if( i >= m_acLayerCfg[layer].m_numDirectRefLayers ) 745 { 746 printf( "The number of columns whose width are defined is larger than the allowed number of columns.\n" ); 747 exit( EXIT_FAILURE ); 748 } 749 *( m_acLayerCfg[layer].m_refLayerIds + i ) = atoi( refLayerId ); 750 refLayerId = strtok(NULL, " ,-"); 751 i++; 752 } 753 if( i < m_acLayerCfg[layer].m_numDirectRefLayers ) 754 { 755 printf( "The width of some columns is not defined.\n" ); 756 exit( EXIT_FAILURE ); 757 } 758 } 759 else 760 { 761 m_acLayerCfg[layer].m_refLayerIds = NULL; 762 } 763 } 764 #endif 719 765 #if SIGNAL_BITRATE_PICRATE_IN_VPS 720 766 readBoolString(cfg_bitRateInfoPresentFlag, m_bitRatePicRateMaxTLayers, m_bitRateInfoPresentFlag, "bit rate info. present flag" ); … … 1511 1557 } 1512 1558 #endif 1513 1559 #if VPS_EXTN_DIRECT_REF_LAYERS 1560 xConfirmPara( (m_acLayerCfg[0].m_numDirectRefLayers != 0) && (m_acLayerCfg[0].m_numDirectRefLayers != -1), "Layer 0 cannot have any reference layers" ); 1561 // NOTE: m_numDirectRefLayers (for any layer) could be -1 (not signalled in cfg), in which case only the "previous layer" would be taken for reference 1562 for(Int layer = 1; layer < MAX_LAYERS; layer++) 1563 { 1564 xConfirmPara(m_acLayerCfg[layer].m_numDirectRefLayers > layer, "Cannot reference more layers than before current layer"); 1565 for(Int i = 0; i < m_acLayerCfg[layer].m_numDirectRefLayers; i++) 1566 { 1567 xConfirmPara(m_acLayerCfg[layer].m_refLayerIds[i] > layer, "Cannot reference higher layers"); 1568 xConfirmPara(m_acLayerCfg[layer].m_refLayerIds[i] == layer, "Cannot reference the current layer itself"); 1569 } 1570 } 1571 #endif 1514 1572 #undef xConfirmPara 1515 1573 if (check_failed) -
branches/HM-10.0-dev-SHM/source/App/TAppEncoder/TAppEncLayerCfg.h
r54 r118 42 42 Int m_iIntraPeriod; ///< period of I-slice (random access period) 43 43 Double m_fQP; ///< QP value of key-picture (floating point) 44 44 #if VPS_EXTN_DIRECT_REF_LAYERS 45 Int *m_refLayerIds; 46 Int m_numDirectRefLayers; 47 #endif 45 48 #if SVC_EXTENSION 46 49 Int m_iWaveFrontSubstreams; //< If iWaveFrontSynchro, this is the number of substreams per frame (dependent tiles) or per tile (independent tiles). … … 80 83 Int getIntQP() {return m_iQP; } 81 84 Int* getdQPs() {return m_aidQP; } 82 85 #if VPS_EXTN_DIRECT_REF_LAYERS 86 Int getNumDirectRefLayers() {return m_numDirectRefLayers;} 87 Int* getRefLayerIds() {return m_refLayerIds; } 88 Int getRefLayerId(Int i) {return m_refLayerIds[i]; } 89 #endif 83 90 }; // END CLASS DEFINITION TAppEncLayerCfg 84 91 -
branches/HM-10.0-dev-SHM/source/App/TAppEncoder/TAppEncTop.cpp
r116 r118 140 140 m_acTEncTop[layer].setMaxTempLayer ( m_maxTempLayer ); 141 141 m_acTEncTop[layer].setUseAMP( m_enableAMP ); 142 142 #if VPS_EXTN_DIRECT_REF_LAYERS 143 if(layer) 144 { 145 if(m_acLayerCfg[layer].getNumDirectRefLayers() == -1) 146 { 147 // Not included in the configuration file; assume that each layer depends on previous layer 148 m_acTEncTop[layer].setNumDirectRefLayers (1); // One ref. layer 149 m_acTEncTop[layer].setRefLayerId (0, layer - 1); // Previous layer 150 } 151 else 152 { 153 m_acTEncTop[layer].setNumDirectRefLayers ( m_acLayerCfg[layer].getNumDirectRefLayers() ); 154 for(Int i = 0; i < m_acTEncTop[layer].getNumDirectRefLayers(); i++) 155 { 156 m_acTEncTop[layer].setRefLayerId ( i, m_acLayerCfg[layer].getRefLayerId(i)); 157 } 158 } 159 } 160 #endif 143 161 //===== Slice ======== 144 162 … … 763 781 } 764 782 #endif 783 #if VPS_EXTN_DIRECT_REF_LAYERS 784 // Direct reference layers 785 for(UInt layerCtr = 1;layerCtr <= vps->getMaxLayers() - 1; layerCtr++) 786 { 787 vps->setNumDirectRefLayers( layerCtr, m_acTEncTop[layerCtr].getNumDirectRefLayers() ); 788 for(Int i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++) 789 { 790 vps->setRefLayerId( layerCtr, i, m_acTEncTop[layerCtr].getRefLayerId(i) ); 791 } 792 // Set direct dependency flag 793 // Initialize flag to 0 794 for(Int refLayerCtr = 0; refLayerCtr < layerCtr; refLayerCtr++) 795 { 796 vps->setDirectDependencyFlag( layerCtr, refLayerCtr, false ); 797 } 798 for(Int i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++) 799 { 800 vps->setDirectDependencyFlag( layerCtr, vps->getLayerIdInVps(m_acTEncTop[layerCtr].getRefLayerId(i)), true); 801 } 802 } 803 #endif 765 804 #else 766 805 m_cTEncTop.init();
Note: See TracChangeset for help on using the changeset viewer.