Changeset 516 in SHVCSoftware
- Timestamp:
- 17 Dec 2013, 10:27:32 (11 years ago)
- Location:
- branches/SHM-4.1-dev/source
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-4.1-dev/source/App/TAppEncoder/TAppEncTop.cpp
r514 r516 90 90 vps->setMaxDecPicBuffering ( m_maxDecPicBuffering[i], i ); 91 91 } 92 92 93 #if REPN_FORMAT_IN_VPS 93 94 vps->setRepFormatIdxPresentFlag( true ); // Could be disabled to optimize in some cases. … … 1191 1192 } 1192 1193 #endif 1194 #if VPS_DPB_SIZE_TABLE 1195 // The Layer ID List variables can be derived here. 1196 #if DERIVE_LAYER_ID_LIST_VARIABLES 1197 vps->deriveLayerIdListVariables(); 1198 #endif 1199 vps->deriveNumberOfSubDpbs(); 1200 // Initialize dpb_size_table() for all ouput layer sets in the VPS extension 1201 for(i = 1; i < vps->getNumOutputLayerSets(); i++) 1202 { 1203 Int layerSetId = vps->getOutputLayerSetIdx(i); 1204 1205 // For each output layer set, set the DPB size for each layer and the reorder/latency value the maximum for all layers 1206 Bool checkFlagOuter = false; // Used to calculate sub_layer_flag_info_present_flag 1207 Bool checkFlagInner[MAX_TLAYER]; // Used to calculate sub_layer_dpb_info_present_flag 1208 1209 for(Int j = 0; j < vps->getMaxTLayers(); j++) 1210 { 1211 1212 Int maxNumReorderPics = -1; 1213 for(Int k = 0; k < vps->getNumSubDpbs(i); k++) 1214 { 1215 Int layerId = vps->getLayerSetLayerIdList(layerSetId, k); // k-th layer in the output layer set 1216 vps->setMaxVpsDecPicBufferingMinus1( i, k, j, m_acTEncTop[layerId].getMaxDecPicBuffering(j) ); 1217 maxNumReorderPics = std::max( maxNumReorderPics, m_acTEncTop[layerId].getNumReorderPics(j)); 1218 } 1219 vps->setMaxVpsNumReorderPics(i, j, maxNumReorderPics); 1220 1221 if( j == 0 ) // checkFlagInner[0] is always 1 1222 { 1223 checkFlagInner[j] = true; // Always signal sub-layer DPB information for the first sub-layer 1224 } 1225 else 1226 { 1227 checkFlagInner[j] = false; // Initialize to be false. If the values of the current sub-layers matches with the earlier sub-layer, 1228 // then will be continue to be false - i.e. the j-th sub-layer DPB info is not signaled 1229 checkFlagInner[j] |= ( maxNumReorderPics != vps->getMaxVpsNumReorderPics(i, j - 1) ); 1230 for(Int k = 0; k < vps->getNumSubDpbs(i) && !checkFlagInner[j]; k++) // If checkFlagInner[j] is true, break and signal the values 1231 { 1232 checkFlagInner[j] |= ( vps->getMaxVpsDecPicBufferingMinus1(i, k, j - 1) != vps->getMaxVpsDecPicBufferingMinus1(i, k, j) ); 1233 } 1234 } 1235 // If checkFlagInner[j] = true, then some value needs to be signalled for the j-th sub-layer 1236 vps->setSubLayerDpbInfoPresentFlag( i, j, checkFlagInner[j] ); 1237 } 1238 for(Int j = 1; j < vps->getMaxTLayers(); j++) // Check if DPB info of any of non-zero sub-layers is signaled. If so set flag to one 1239 { 1240 if( vps->getSubLayerDpbInfoPresentFlag(i, j) ) 1241 { 1242 checkFlagOuter = true; 1243 break; 1244 } 1245 } 1246 vps->setSubLayerFlagInfoPresentFlag( i, checkFlagOuter ); 1247 } 1248 #endif 1193 1249 #if VPS_EXTN_DIRECT_REF_LAYERS 1194 1250 // Direct reference layers -
branches/SHM-4.1-dev/source/Lib/TLibCommon/TComSlice.cpp
r507 r516 946 946 numRpsCurrTempList += getNumILRRefIdx(); 947 947 #endif 948 948 } 949 949 #endif 950 950 … … 2144 2144 } 2145 2145 #endif 2146 #if VPS_DPB_SIZE_TABLE 2147 ::memset( m_subLayerFlagInfoPresentFlag, 0, sizeof(m_subLayerFlagInfoPresentFlag ) ); 2148 ::memset( m_subLayerDpbInfoPresentFlag, 0, sizeof(m_subLayerDpbInfoPresentFlag ) ); 2149 ::memset( m_maxVpsDecPicBufferingMinus1, 0, sizeof(m_maxVpsDecPicBufferingMinus1 ) ); 2150 ::memset( m_maxVpsNumReorderPics, 0, sizeof(m_maxVpsNumReorderPics ) ); 2151 ::memset( m_maxVpsLatencyIncreasePlus1, 0, sizeof(m_maxVpsLatencyIncreasePlus1 ) ); 2152 ::memset( m_numSubDpbs , 0, sizeof(m_numSubDpbs) ); 2153 #endif 2146 2154 } 2147 2155 #else … … 2193 2201 } 2194 2202 setNumLayersInIdList(i, n); 2203 } 2204 } 2205 #endif 2206 #if VPS_DPB_SIZE_TABLE 2207 Void TComVPS::deriveNumberOfSubDpbs() 2208 { 2209 // Derive number of sub-DPBs 2210 // For output layer set 0 2211 setNumSubDpbs(0, 1); 2212 // For other output layer sets 2213 for( Int i = 1; i < getNumOutputLayerSets(); i++) 2214 { 2215 setNumSubDpbs( i, getNumLayersInIdList( getOutputLayerSetIdx(i)) ); 2195 2216 } 2196 2217 } -
branches/SHM-4.1-dev/source/Lib/TLibCommon/TComSlice.h
r514 r516 642 642 Bool m_recursiveRefLayerFlag[MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS]; // flag to indicate if j-th layer is a direct or indirect reference layer of i-th layer 643 643 #endif 644 #if VPS_DPB_SIZE_TABLE 645 Bool m_subLayerFlagInfoPresentFlag [MAX_VPS_OP_LAYER_SETS_PLUS1]; 646 Bool m_subLayerDpbInfoPresentFlag [MAX_VPS_OP_LAYER_SETS_PLUS1][MAX_LAYERS]; 647 Int m_maxVpsDecPicBufferingMinus1 [MAX_VPS_OP_LAYER_SETS_PLUS1][MAX_LAYERS][MAX_TLAYER]; 648 Int m_maxVpsNumReorderPics [MAX_VPS_OP_LAYER_SETS_PLUS1][MAX_LAYERS]; 649 Int m_maxVpsLatencyIncreasePlus1 [MAX_VPS_OP_LAYER_SETS_PLUS1][MAX_LAYERS]; 650 Int m_numSubDpbs [MAX_VPS_OP_LAYER_SETS_PLUS1]; 651 #endif 644 652 #endif //SVC_EXTENSION 645 653 public: … … 707 715 Void deriveLayerIdListVariables(); 708 716 #endif 709 717 #if VPS_DPB_SIZE_TABLE 718 Void deriveNumberOfSubDpbs(); 719 #endif 710 720 #if IL_SL_SIGNALLING_N0371 711 721 Bool checkLayerDependency(UInt i, UInt j); … … 928 938 Bool getPhaseAlignFlag() { return m_phaseAlignFlag; } 929 939 Void setPhaseAlignFlag(Bool x) { m_phaseAlignFlag = x; } 940 #endif 941 #if VPS_DPB_SIZE_TABLE 942 Bool getSubLayerFlagInfoPresentFlag(Int i) {return m_subLayerFlagInfoPresentFlag[i]; } 943 Void setSubLayerFlagInfoPresentFlag(Int i, Bool x) {m_subLayerFlagInfoPresentFlag[i] = x; } 944 945 Bool getSubLayerDpbInfoPresentFlag(Int i, Int j) {return m_subLayerDpbInfoPresentFlag[i][j]; } 946 Void setSubLayerDpbInfoPresentFlag(Int i, Int j, Bool x) {m_subLayerDpbInfoPresentFlag[i][j] = x; } 947 948 Int getMaxVpsDecPicBufferingMinus1(Int i, Int k, Int j) { return m_maxVpsDecPicBufferingMinus1[i][k][j]; } 949 Void setMaxVpsDecPicBufferingMinus1(Int i, Int k, Int j, Int x) { m_maxVpsDecPicBufferingMinus1[i][k][j] = x; } 950 951 Int getMaxVpsNumReorderPics(Int i, Int j) { return m_maxVpsNumReorderPics[i][j]; } 952 Void setMaxVpsNumReorderPics(Int i, Int j, Int x) { m_maxVpsNumReorderPics[i][j] = x; } 953 954 Int getMaxVpsLatencyIncreasePlus1(Int i, Int j) { return m_maxVpsLatencyIncreasePlus1[i][j]; } 955 Void setMaxVpsLatencyIncreasePlus1(Int i, Int j, Int x) { m_maxVpsLatencyIncreasePlus1[i][j] = x; } 956 957 Int getNumSubDpbs(Int i) { return m_numSubDpbs[i]; } 958 Void setNumSubDpbs(Int i, Int x) { m_numSubDpbs[i] = x; } 930 959 #endif 931 960 #endif //SVC_EXTENSION -
branches/SHM-4.1-dev/source/Lib/TLibCommon/TypeDef.h
r515 r516 188 188 #define O0153_ALT_OUTPUT_LAYER_FLAG 1 ///< JCTVC-O0153: alt output layer flag 189 189 190 #define VPS_DPB_SIZE_TABLE 1 ///< JCTVC-O0217: DPB operations: signaling DPB-related parameters 190 191 #else 191 192 #define SYNTAX_OUTPUT 0 … … 206 207 #define MAX_VPS_NUM_SCALABILITY_TYPES 16 207 208 #endif 209 #define MAX_VPS_OP_LAYER_SETS_PLUS1 3 208 210 #if VPS_RENAME 209 211 #define MAX_VPS_LAYER_SETS_PLUS1 1024 -
branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp
r515 r516 1259 1259 else 1260 1260 { 1261 #if VPS_DPB_SIZE_TABLE 1262 vps->setOutputLayerSetIdx( i, i ); 1263 #endif 1261 1264 // i <= (vps->getNumLayerSets() - 1) 1262 1265 // Assign OutputLayerFlag depending on default_one_target_output_layer_flag … … 1372 1375 #endif 1373 1376 1377 #if VPS_DPB_SIZE_TABLE 1378 vps->deriveNumberOfSubDpbs(); 1379 for(i = 1; i < vps->getNumOutputLayerSets(); i++) 1380 { 1381 READ_FLAG( uiCode, "sub_layer_flag_info_present_flag[i]"); vps->setSubLayerFlagInfoPresentFlag( i, uiCode ? true : false ); 1382 for(j = 0; j < vps->getMaxTLayers(); j++) 1383 { 1384 if( j > 0 && vps->getSubLayerFlagInfoPresentFlag(i) ) 1385 { 1386 READ_FLAG( uiCode, "sub_layer_dpb_info_present_flag[i]"); vps->setSubLayerDpbInfoPresentFlag( i, j, uiCode ? true : false); 1387 } 1388 else 1389 { 1390 if( j == 0 ) // Always signal for the first sub-layer 1391 { 1392 vps->setSubLayerDpbInfoPresentFlag( i, j, true ); 1393 } 1394 else // if (j != 0) && !vps->getSubLayerFlagInfoPresentFlag(i) 1395 { 1396 vps->setSubLayerDpbInfoPresentFlag( i, j, false ); 1397 } 1398 } 1399 if( vps->getSubLayerDpbInfoPresentFlag(i, j) ) // If sub-layer DPB information is present 1400 { 1401 for(Int k = 0; k < vps->getNumSubDpbs(i); k++) 1402 { 1403 READ_UVLC( uiCode, "max_vps_dec_pic_buffering_minus1[i][k][j]" ); vps->setMaxVpsDecPicBufferingMinus1( i, k, j, uiCode ); 1404 } 1405 READ_UVLC( uiCode, "max_vps_num_reorder_pics[i][j]" ); vps->setMaxVpsNumReorderPics( i, j, uiCode); 1406 READ_UVLC( uiCode, "max_vps_latency_increase_plus1[i][j]" ); vps->setMaxVpsLatencyIncreasePlus1( i, j, uiCode); 1407 } 1408 } 1409 } 1410 #endif 1374 1411 #if VPS_EXTN_DIRECT_REF_LAYERS && M0457_PREDICTION_INDICATIONS 1375 1412 READ_UVLC( uiCode, "direct_dep_type_len_minus2"); vps->setDirectDepTypeLen(uiCode+2); -
branches/SHM-4.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp
r515 r516 1079 1079 WRITE_FLAG(vps->getCrossLayerIrapAlignFlag(), "cross_layer_irap_aligned_flag"); 1080 1080 #endif 1081 #if VPS_DPB_SIZE_TABLE 1082 for(i = 1; i < vps->getNumOutputLayerSets(); i++) 1083 { 1084 WRITE_FLAG( vps->getSubLayerFlagInfoPresentFlag( i ), "sub_layer_flag_info_present_flag[i]"); 1085 for(j = 0; j < vps->getMaxTLayers(); j++) 1086 { 1087 if( j > 0 && vps->getSubLayerFlagInfoPresentFlag(i) ) 1088 { 1089 WRITE_FLAG( vps->getSubLayerDpbInfoPresentFlag( i, j), "sub_layer_dpb_info_present_flag[i]"); 1090 } 1091 if( vps->getSubLayerDpbInfoPresentFlag(i, j) ) 1092 { 1093 for(Int k = 0; k < vps->getNumSubDpbs(i); k++) 1094 { 1095 WRITE_UVLC( vps->getMaxVpsDecPicBufferingMinus1( i, k, j), "max_vps_dec_pic_buffering_minus1[i][k][j]" ); 1096 } 1097 WRITE_UVLC( vps->getMaxVpsNumReorderPics( i, j), "max_vps_num_reorder_pics[i][j]" ); 1098 WRITE_UVLC( vps->getMaxVpsLatencyIncreasePlus1( i, j), "max_vps_latency_increase_plus1[i][j]" ); 1099 } 1100 } 1101 } 1102 #endif 1081 1103 #if VPS_EXTN_DIRECT_REF_LAYERS && M0457_PREDICTION_INDICATIONS 1082 1104 WRITE_UVLC( vps->getDirectDepTypeLen()-2, "direct_dep_type_len_minus2");
Note: See TracChangeset for help on using the changeset viewer.