Changeset 367 in 3DVCSoftware
- Timestamp:
- 3 May 2013, 17:09:57 (11 years ago)
- Location:
- branches/HTM-DEV-0.1-dev/source
- Files:
-
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-DEV-0.1-dev/source/App/TAppDecoder/TAppDecCfg.cpp
r364 r367 42 42 #include "TAppCommon/program_options_lite.h" 43 43 44 #if H_MV45 #include <cassert>46 #endif47 44 #ifdef WIN32 48 45 #define strdup _strdup … … 78 75 ("OutputBitDepth,d", m_outputBitDepthY, 0, "bit depth of YUV output luma component (default: use 0 for native depth)") 79 76 ("OutputBitDepthC,d", m_outputBitDepthC, 0, "bit depth of YUV output chroma component (default: use 0 for native depth)") 80 #if H_MV81 ("MaxLayerId,-ls", m_maxLayerId, MAX_NUM_LAYER_IDS-1, "Maximum LayerId to be decoded.")82 #endif83 77 ("MaxTemporalLayer,t", m_iMaxTemporalLayer, -1, "Maximum Temporal Layer to be decoded. -1 to decode all layers") 84 78 ("SEIDecodedPictureHash", m_decodedPictureHashSEIEnabled, 1, "Control handling of decoded picture hash SEI messages\n" … … 157 151 } 158 152 } 159 #if H_MV160 else161 {162 for ( Int curLayerId = 0; curLayerId <= m_maxLayerId; curLayerId++ )163 {164 m_targetDecLayerIdSet.push_back( curLayerId );165 }166 }167 #endif168 153 169 154 return true; 170 155 } 171 156 172 #if H_MV173 Void TAppDecCfg::xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend, Char*& rpchOutputFileName)174 {175 size_t iInLength = strlen(pchInputFileName);176 size_t iAppendLength = strlen(pchStringToAppend);177 178 rpchOutputFileName = (Char*) malloc(iInLength+iAppendLength+1);179 Char* pCDot = strrchr(pchInputFileName,'.');180 pCDot = pCDot ? pCDot : pchInputFileName + iInLength;181 size_t iCharsToDot = pCDot - pchInputFileName ;182 size_t iCharsToEnd = iInLength - iCharsToDot;183 strncpy(rpchOutputFileName , pchInputFileName , iCharsToDot );184 strncpy(rpchOutputFileName+ iCharsToDot , pchStringToAppend , iAppendLength);185 strncpy(rpchOutputFileName+ iCharsToDot+iAppendLength , pchInputFileName+iCharsToDot, iCharsToEnd );186 rpchOutputFileName[iInLength+iAppendLength] = '\0';187 }188 #endif189 157 //! \} -
branches/HTM-DEV-0.1-dev/source/App/TAppDecoder/TAppDecCfg.h
r365 r367 58 58 protected: 59 59 Char* m_pchBitstreamFile; ///< input bitstream file name 60 #if H_MV61 Int m_maxLayerId; ///< maximum nuh_layer_id decoded62 std::vector<Char*> m_pchReconFiles; ///< array of output reconstruction file name create from output reconstruction file name63 #endif64 60 Char* m_pchReconFile; ///< output reconstruction file name 65 61 Int m_iSkipFrame; ///< counter for frames prior to the random access point to skip … … 73 69 Int m_respectDefDispWindow; ///< Only output content inside the default display window 74 70 75 #if H_MV76 Void xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend, Char*& rpchOutputFileName); ///< create filenames77 #endif78 71 public: 79 72 TAppDecCfg() 80 73 : m_pchBitstreamFile(NULL) 81 #if H_MV82 , m_maxLayerId(0)83 , m_pchReconFiles(NULL)84 #endif85 74 , m_pchReconFile(NULL) 86 75 , m_iSkipFrame(0) -
branches/HTM-DEV-0.1-dev/source/App/TAppDecoder/TAppDecTop.cpp
r366 r367 54 54 55 55 TAppDecTop::TAppDecTop() 56 #if !H_MV57 56 : m_iPOCLastDisplay(-MAX_INT) 58 #else59 : m_numDecoders( 0 )60 #endif61 57 { 62 58 ::memset (m_abDecFlag, 0, sizeof (m_abDecFlag)); 63 #if H_MV64 for (Int i = 0; i < MAX_NUM_LAYER_IDS; i++) m_layerIdToDecIdx[i] = -1;65 #endif66 59 } 67 60 … … 77 70 m_pchBitstreamFile = NULL; 78 71 } 79 #if H_MV80 for (Int decIdx = 0; decIdx < m_numDecoders; decIdx++)81 {82 if (m_pchReconFiles[decIdx])83 {84 free (m_pchReconFiles[decIdx]);85 m_pchReconFiles[decIdx] = NULL;86 }87 }88 #endif89 72 if (m_pchReconFile) 90 73 { … … 109 92 { 110 93 Int poc; 111 #if H_MV112 poc = -1;113 #endif114 94 TComList<TComPic*>* pcListPic = NULL; 115 95 … … 126 106 xCreateDecLib(); 127 107 xInitDecLib (); 128 #if !H_MV129 108 m_iPOCLastDisplay += m_iSkipFrame; // set the last displayed POC correctly for skip forward. 130 109 131 110 // main decoder loop 132 111 Bool recon_opened = false; // reconstruction file not yet opened. (must be performed after SPS is seen) 133 #else134 Int pocCurrPic = -MAX_INT;135 Int pocLastPic = -MAX_INT;136 137 Int layerIdLastPic = 0;138 Int layerIdCurrPic = 0;139 140 Int decIdxLastPic = 0;141 Int decIdxCurrPic = 0;142 143 Bool firstSlice = true;144 #endif145 112 146 113 while (!!bitstreamFile) … … 152 119 streampos location = bitstreamFile.tellg(); 153 120 AnnexBStats stats = AnnexBStats(); 154 #if !H_MV155 121 Bool bPreviousPictureDecoded = false; 156 #endif157 122 158 123 vector<uint8_t> nalUnit; … … 162 127 // call actual decoding function 163 128 Bool bNewPicture = false; 164 #if H_MV165 Bool newSliceDiffPoc = false;166 Bool newSliceDiffLayer = false;167 Bool allLayersDecoded = false;168 #endif169 129 if (nalUnit.empty()) 170 130 { … … 179 139 { 180 140 read(nalu, nalUnit); 181 #if H_MV182 Int decIdx = xGetDecoderIdx( nalu.m_layerId , true );183 184 if( (m_iMaxTemporalLayer >= 0 && nalu.m_temporalId > m_iMaxTemporalLayer) || !isNaluWithinTargetDecLayerIdSet(&nalu) )185 {186 bNewPicture = false;187 }188 else189 {190 newSliceDiffLayer = nalu.isSlice() && ( nalu.m_layerId != layerIdCurrPic ) && !firstSlice;191 newSliceDiffPoc = m_tDecTop[decIdx]->decode(nalu, m_iSkipFrame, m_pocLastDisplay[decIdx], newSliceDiffLayer );192 // decode function only returns true when all of the following conditions are true193 // - poc in particular layer changes194 // - nalu does not belong to first slice in layer195 // - nalu.isSlice() == true196 197 bNewPicture = newSliceDiffLayer || newSliceDiffPoc;198 199 if ( nalu.isSlice() && firstSlice )200 {201 layerIdCurrPic = nalu.m_layerId;202 pocCurrPic = m_tDecTop[decIdx]->getCurrPoc();203 decIdxCurrPic = decIdx;204 firstSlice = false;205 }206 207 if ( bNewPicture || !bitstreamFile )208 {209 layerIdLastPic = layerIdCurrPic;210 layerIdCurrPic = nalu.m_layerId;211 212 pocLastPic = pocCurrPic;213 pocCurrPic = m_tDecTop[decIdx]->getCurrPoc();214 215 decIdxLastPic = decIdxCurrPic;216 decIdxCurrPic = decIdx;217 218 allLayersDecoded = ( pocCurrPic != pocLastPic );219 }220 221 222 #else223 141 if( (m_iMaxTemporalLayer >= 0 && nalu.m_temporalId > m_iMaxTemporalLayer) || !isNaluWithinTargetDecLayerIdSet(&nalu) ) 224 142 { … … 236 154 { 237 155 bNewPicture = m_cTDecTop.decode(nalu, m_iSkipFrame, m_iPOCLastDisplay); 238 #endif239 156 if (bNewPicture) 240 157 { … … 247 164 bytestream.reset(); 248 165 } 249 #if !H_MV250 166 bPreviousPictureDecoded = true; 251 #endif252 167 } 253 168 } 254 169 if (bNewPicture || !bitstreamFile) 255 170 { 256 #if H_MV257 assert( decIdxLastPic != -1 );258 m_tDecTop[decIdxLastPic]->endPicDecoding(poc, pcListPic, m_targetDecLayerIdSet );259 #else260 171 m_cTDecTop.executeLoopFilters(poc, pcListPic); 261 #endif 262 } 263 #if H_3D 264 if ( allLayersDecoded || !bitstreamFile ) 265 { 266 for( Int dI = 0; dI < m_numDecoders; dI++ ) 267 { 268 TComPic* picLastCoded = m_ivPicLists.getPic( m_tDecTop[dI]->getLayerId(), pocLastPic ); 269 assert( picLastCoded != NULL ); 270 picLastCoded->compressMotion(); 271 } 272 } 273 #endif 172 } 274 173 275 174 if( pcListPic ) 276 175 { 277 #if H_MV278 if ( m_pchReconFiles[decIdxLastPic] && !m_reconOpen[decIdxLastPic] )279 #else280 176 if ( m_pchReconFile && !recon_opened ) 281 #endif282 177 { 283 178 if (!m_outputBitDepthY) { m_outputBitDepthY = g_bitDepthY; } 284 179 if (!m_outputBitDepthC) { m_outputBitDepthC = g_bitDepthC; } 285 180 286 #if H_MV287 m_tVideoIOYuvReconFile[decIdxLastPic]->open( m_pchReconFiles[decIdxLastPic], true, m_outputBitDepthY, m_outputBitDepthC, g_bitDepthY, g_bitDepthC ); // write mode288 m_reconOpen[decIdxLastPic] = true;289 }290 if ( bNewPicture && newSliceDiffPoc &&291 #else292 181 m_cTVideoIOYuvReconFile.open( m_pchReconFile, true, m_outputBitDepthY, m_outputBitDepthC, g_bitDepthY, g_bitDepthC ); // write mode 293 182 recon_opened = true; 294 183 } 295 184 if ( bNewPicture && 296 #endif297 185 ( nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL 298 186 || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP … … 301 189 || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP ) ) 302 190 { 303 #if H_MV304 xFlushOutput( pcListPic, decIdxLastPic );305 #else306 191 xFlushOutput( pcListPic ); 307 #endif308 192 } 309 193 // write reconstruction to file 310 194 if(bNewPicture) 311 195 { 312 #if H_MV313 xWriteOutput( pcListPic, decIdxLastPic, nalu.m_temporalId );314 }315 }316 }317 318 for(UInt decIdx = 0; decIdx < m_numDecoders; decIdx++)319 {320 xFlushOutput( m_tDecTop[decIdx]->getListPic(), decIdx );321 }322 #else323 196 xWriteOutput( pcListPic, nalu.m_temporalId ); 324 197 } … … 329 202 // delete buffers 330 203 m_cTDecTop.deletePicBuffer(); 331 #endif332 204 333 205 // destroy internal classes … … 341 213 Void TAppDecTop::xCreateDecLib() 342 214 { 343 #if H_MV344 // initialize global variables345 initROM();346 #else347 215 // create decoder class 348 216 m_cTDecTop.create(); 349 #endif350 217 } 351 218 352 219 Void TAppDecTop::xDestroyDecLib() 353 220 { 354 #if H_MV355 // destroy ROM356 destroyROM();357 358 for(Int decIdx = 0; decIdx < m_numDecoders ; decIdx++)359 {360 if( m_tVideoIOYuvReconFile[decIdx] )361 {362 m_tVideoIOYuvReconFile[decIdx]->close();363 delete m_tVideoIOYuvReconFile[decIdx];364 m_tVideoIOYuvReconFile[decIdx] = NULL ;365 }366 367 if( m_tDecTop[decIdx] )368 {369 m_tDecTop[decIdx]->deletePicBuffer();370 m_tDecTop[decIdx]->destroy() ;371 }372 delete m_tDecTop[decIdx] ;373 m_tDecTop[decIdx] = NULL ;374 }375 #else376 221 if ( m_pchReconFile ) 377 222 { … … 381 226 // destroy decoder class 382 227 m_cTDecTop.destroy(); 383 #endif384 228 } 385 229 386 230 Void TAppDecTop::xInitDecLib() 387 231 { 388 #if !H_MV389 232 // initialize decoder class 390 233 m_cTDecTop.init(); 391 234 m_cTDecTop.setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled); 392 #endif393 235 } 394 236 … … 396 238 \todo DYN_REF_FREE should be revised 397 239 */ 398 #if H_MV399 Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, Int decIdx, Int tId )400 #else401 240 Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, UInt tId ) 402 #endif403 241 { 404 242 TComList<TComPic*>::iterator iterPic = pcListPic->begin(); … … 408 246 { 409 247 TComPic* pcPic = *(iterPic); 410 #if H_MV411 if(pcPic->getOutputMark() && pcPic->getPOC() > m_pocLastDisplay[decIdx])412 #else413 248 if(pcPic->getOutputMark() && pcPic->getPOC() > m_iPOCLastDisplay) 414 #endif415 249 { 416 250 not_displayed++; … … 424 258 TComPic* pcPic = *(iterPic); 425 259 426 #if H_MV427 if ( pcPic->getOutputMark() && (not_displayed > pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_pocLastDisplay[decIdx]))428 #else429 260 if ( pcPic->getOutputMark() && (not_displayed > pcPic->getNumReorderPics(tId) && pcPic->getPOC() > m_iPOCLastDisplay)) 430 #endif431 261 { 432 262 // write to file 433 263 not_displayed--; 434 #if H_MV435 if ( m_pchReconFiles[decIdx] )436 #else437 264 if ( m_pchReconFile ) 438 #endif439 265 { 440 266 const Window &conf = pcPic->getConformanceWindow(); 441 267 const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window(); 442 #if H_MV443 m_tVideoIOYuvReconFile[decIdx]->write( pcPic->getPicYuvRec(),444 #else445 268 m_cTVideoIOYuvReconFile.write( pcPic->getPicYuvRec(), 446 #endif447 269 conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(), 448 270 conf.getWindowRightOffset() + defDisp.getWindowRightOffset(), … … 452 274 453 275 // update POC of display order 454 #if H_MV455 m_pocLastDisplay[decIdx] = pcPic->getPOC();456 #else457 276 m_iPOCLastDisplay = pcPic->getPOC(); 458 #endif459 277 460 278 // erase non-referenced picture in the reference picture list after display … … 484 302 \todo DYN_REF_FREE should be revised 485 303 */ 486 #if H_MV487 Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic, Int decIdx )488 #else489 304 Void TAppDecTop::xFlushOutput( TComList<TComPic*>* pcListPic ) 490 #endif491 305 { 492 306 if(!pcListPic) … … 505 319 { 506 320 // write to file 507 #if H_MV508 if ( m_pchReconFiles[decIdx] )509 #else510 321 if ( m_pchReconFile ) 511 #endif512 322 { 513 323 const Window &conf = pcPic->getConformanceWindow(); 514 324 const Window &defDisp = m_respectDefDispWindow ? pcPic->getDefDisplayWindow() : Window(); 515 #if H_MV516 m_tVideoIOYuvReconFile[decIdx]->write( pcPic->getPicYuvRec(),517 #else518 325 m_cTVideoIOYuvReconFile.write( pcPic->getPicYuvRec(), 519 #endif520 326 conf.getWindowLeftOffset() + defDisp.getWindowLeftOffset(), 521 327 conf.getWindowRightOffset() + defDisp.getWindowRightOffset(), … … 525 331 526 332 // update POC of display order 527 #if H_MV528 m_pocLastDisplay[decIdx] = pcPic->getPOC();529 #else530 333 m_iPOCLastDisplay = pcPic->getPOC(); 531 #endif532 334 533 335 // erase non-referenced picture in the reference picture list after display … … 549 351 pcPic->setOutputMark(false); 550 352 } 551 #if !H_MV552 353 #if !DYN_REF_FREE 553 354 if(pcPic) … … 558 359 } 559 360 #endif 560 #endif561 361 iterPic++; 562 362 } 563 #if H_MV564 m_pocLastDisplay[decIdx] = -MAX_INT;565 #else566 363 pcListPic->clear(); 567 364 m_iPOCLastDisplay = -MAX_INT; 568 #endif569 365 } 570 366 … … 579 375 for (std::vector<Int>::iterator it = m_targetDecLayerIdSet.begin(); it != m_targetDecLayerIdSet.end(); it++) 580 376 { 581 #if H_MV582 if ( nalu->m_layerId == (*it) )583 #else584 377 if ( nalu->m_reservedZero6Bits == (*it) ) 585 #endif586 378 { 587 379 return true; -
branches/HTM-DEV-0.1-dev/source/App/TAppDecoder/TAppDecTop.h
r365 r367 61 61 private: 62 62 // class interface 63 #if H_MV64 TDecTop* m_tDecTop [ MAX_NUM_LAYERS ]; ///< decoder classes65 TVideoIOYuv* m_tVideoIOYuvReconFile[ MAX_NUM_LAYERS ]; ///< reconstruction YUV class66 Int m_layerIdToDecIdx [ MAX_NUM_LAYER_IDS ]; ///< maping from layer id to decoder index67 Int m_numDecoders; ///< number of decoder instances68 TComPicLists m_ivPicLists; ///< picture buffers of decoder instances69 #else70 63 TDecTop m_cTDecTop; ///< decoder class 71 64 TVideoIOYuv m_cTVideoIOYuvReconFile; ///< reconstruction YUV class 72 #endif73 65 74 66 // for output control 75 67 Bool m_abDecFlag[ MAX_GOP ]; ///< decoded flag in one GOP 76 #if H_MV77 Int m_pocLastDisplay [ MAX_NUM_LAYERS ]; ///< last POC in display order78 Bool m_reconOpen [ MAX_NUM_LAYERS ]; ///< reconstruction file opened79 #else80 68 Int m_iPOCLastDisplay; ///< last POC in display order 81 #endif82 69 83 70 public: … … 94 81 Void xInitDecLib (); ///< initialize decoder class 95 82 96 #if H_MV97 Void xWriteOutput ( TComList<TComPic*>* pcListPic, Int layerId, Int tId ); ///< write YUV to file98 Void xFlushOutput ( TComList<TComPic*>* pcListPic, Int layerId ); ///< flush all remaining decoded pictures to file99 Int xGetDecoderIdx ( Int layerId, Bool createFlag = false )100 {101 Int decIdx = -1;102 if ( m_layerIdToDecIdx[ layerId ] != -1 )103 {104 decIdx = m_layerIdToDecIdx[ layerId ];105 }106 else107 {108 assert ( createFlag );109 assert( m_numDecoders < MAX_NUM_LAYERS );110 111 decIdx = m_numDecoders;112 113 // Init decoder114 m_tDecTop[ decIdx ] = new TDecTop;115 m_tDecTop[ decIdx ]->create();116 m_tDecTop[ decIdx ]->init( );117 m_tDecTop[ decIdx ]->setLayerId( layerId );118 m_tDecTop[ decIdx ]->setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled);119 m_tDecTop[ decIdx ]->setIvPicLists( &m_ivPicLists );120 121 // append pic list of new decoder to PicLists122 assert( m_ivPicLists.size() == m_numDecoders );123 m_ivPicLists.push_back( m_tDecTop[ decIdx ]->getListPic() );124 125 // create recon file related stuff126 Char* pchTempFilename = NULL;127 if ( m_pchReconFile )128 {129 Char buffer[4];130 sprintf(buffer,"_%i", layerId );131 assert ( m_pchReconFile );132 xAppendToFileNameEnd( m_pchReconFile , buffer, pchTempFilename );133 assert( m_pchReconFiles.size() == m_numDecoders );134 }135 136 m_pchReconFiles.push_back( pchTempFilename );137 138 m_tVideoIOYuvReconFile[ decIdx ] = new TVideoIOYuv;139 m_reconOpen [ decIdx ] = false;140 141 // set others142 m_pocLastDisplay [ decIdx ] = -MAX_INT;143 m_layerIdToDecIdx [ layerId ] = decIdx;144 145 m_numDecoders++;146 };147 return decIdx;148 }149 #else150 83 Void xWriteOutput ( TComList<TComPic*>* pcListPic , UInt tId); ///< write YUV to file 151 84 Void xFlushOutput ( TComList<TComPic*>* pcListPic ); ///< flush all remaining decoded pictures to file 152 #endif153 85 Bool isNaluWithinTargetDecLayerIdSet ( InputNALUnit* nalu ); ///< check whether given Nalu is within targetDecLayerIdSet 154 86 }; -
branches/HTM-DEV-0.1-dev/source/App/TAppDecoder/decmain.cpp
r324 r367 56 56 // print information 57 57 fprintf( stdout, "\n" ); 58 #if H_MV59 fprintf( stdout, "3D-HTM Software: Decoder Version [%s] based on HM Version [%s]", NV_VERSION, HM_VERSION );60 #else61 58 fprintf( stdout, "HM software: Decoder Version [%s]", NV_VERSION ); 62 #endif63 59 fprintf( stdout, NVM_ONOS ); 64 60 fprintf( stdout, NVM_COMPILEDBY ); -
branches/HTM-DEV-0.1-dev/source/App/TAppEncoder/TAppEncCfg.cpp
r366 r367 64 64 65 65 TAppEncCfg::TAppEncCfg() 66 #if H_MV67 : m_pchBitstreamFile()68 #else69 66 : m_pchInputFile() 70 67 , m_pchBitstreamFile() 71 68 , m_pchReconFile() 72 #endif73 69 , m_pchdQPFile() 74 70 , m_pColumnWidth() … … 76 72 , m_scalingListFile() 77 73 { 78 #if !H_MV79 74 m_aidQP = NULL; 80 #endif81 75 #if J0149_TONE_MAPPING_SEI 82 76 m_startOfCodedInterval = NULL; … … 88 82 TAppEncCfg::~TAppEncCfg() 89 83 { 90 #if H_MV91 for( Int layer = 0; layer < m_aidQP.size(); layer++ )92 {93 if ( m_aidQP[layer] != NULL )94 {95 delete[] m_aidQP[layer];96 m_aidQP[layer] = NULL;97 }98 }99 for(Int i = 0; i< m_pchInputFileList.size(); i++ )100 {101 if ( m_pchInputFileList[i] != NULL )102 free (m_pchInputFileList[i]);103 }104 #else105 84 if ( m_aidQP ) 106 85 { 107 86 delete[] m_aidQP; 108 87 } 109 #endif110 88 #if J0149_TONE_MAPPING_SEI 111 89 if ( m_startOfCodedInterval ) … … 125 103 } 126 104 #endif 127 #if !H_MV128 105 free(m_pchInputFile); 129 #endif130 106 free(m_pchBitstreamFile); 131 #if H_MV132 for(Int i = 0; i< m_pchReconFileList.size(); i++ )133 {134 if ( m_pchReconFileList[i] != NULL )135 free (m_pchReconFileList[i]);136 }137 #else138 107 free(m_pchReconFile); 139 #endif140 108 free(m_pchdQPFile); 141 109 free(m_pColumnWidth); 142 110 free(m_pRowHeight); 143 111 free(m_scalingListFile); 144 #if H_MV145 for( Int i = 0; i < m_GOPListMvc.size(); i++ )146 {147 if( m_GOPListMvc[i] )148 {149 delete[] m_GOPListMvc[i];150 m_GOPListMvc[i] = NULL;151 }152 }153 #endif154 112 } 155 113 … … 203 161 } 204 162 #endif 205 #if H_MV206 in>>entry.m_numInterViewRefPics;207 for( Int i = 0; i < entry.m_numInterViewRefPics; i++ )208 {209 in>>entry.m_interViewRefs[i];210 }211 for( Int i = 0; i < entry.m_numInterViewRefPics; i++ )212 {213 in>>entry.m_interViewRefPosL[0][i];214 }215 for( Int i = 0; i < entry.m_numInterViewRefPics; i++ )216 {217 in>>entry.m_interViewRefPosL[1][i];218 }219 #endif220 163 return in; 221 164 } … … 229 172 {"main10", Profile::MAIN10}, 230 173 {"main-still-picture", Profile::MAINSTILLPICTURE}, 231 #if H_MV232 {"main-stereo", Profile::MAINSTEREO},233 {"main-multiview", Profile::MAINMULTIVIEW},234 #if H_3D235 {"main-3d" , Profile::MAIN3D},236 #endif237 #endif238 174 }; 239 175 … … 317 253 Bool do_help = false; 318 254 319 #if !H_MV320 255 string cfg_InputFile; 321 #endif322 256 string cfg_BitstreamFile; 323 #if !H_MV324 257 string cfg_ReconFile; 325 #endif326 #if H_MV327 vector<Int> cfg_dimensionLength;328 #if H_3D329 cfg_dimensionLength.push_back( 2 ); // depth330 cfg_dimensionLength.push_back( 32 ); // texture331 #else332 cfg_dimensionLength.push_back( 64 );333 #endif334 #endif335 258 string cfg_dQPFile; 336 259 string cfg_ColumnWidth; … … 356 279 357 280 // File, I/O and source parameters 358 #if H_MV359 ("InputFile_%d,i_%d", m_pchInputFileList, (char *) 0 , MAX_NUM_LAYER_IDS , "original Yuv input file name %d")360 #else361 281 ("InputFile,i", cfg_InputFile, string(""), "Original YUV input file name") 362 #endif363 282 ("BitstreamFile,b", cfg_BitstreamFile, string(""), "Bitstream output file name") 364 #if H_MV365 ("ReconFile_%d,o_%d", m_pchReconFileList, (char *) 0 , MAX_NUM_LAYER_IDS , "reconstructed Yuv output file name %d")366 #else367 283 ("ReconFile,o", cfg_ReconFile, string(""), "Reconstructed YUV output file name") 368 #endif369 #if H_MV370 ("NumberOfLayers", m_numberOfLayers , 1, "Number of layers")371 #if !H_3D372 ("ScalabilityMask", m_scalabilityMask , 1 , "Scalability Mask")373 #else374 ("ScalabilityMask", m_scalabilityMask , 3 , "Scalability Mask, 1: Texture 3: Texture + Depth ")375 #endif376 ("DimensionIdLen", m_dimensionIdLen , cfg_dimensionLength , "Number of bits used to store dimensions Id")377 ("ViewId", m_viewId , std::vector<Int>(1,0), "View Id")378 #if H_3D379 ("DepthFlag", m_depthFlag , std::vector<Int>(1,0), "Depth Flag")380 #endif381 ("LayerIdInNuh", m_layerIdInNuh , std::vector<Int>(1,0), "LayerId in Nuh")382 ("SplittingFlag", m_splittingFlag , false , "Splitting Flag")383 #endif384 284 ("SourceWidth,-wdt", m_iSourceWidth, 0, "Source picture width") 385 285 ("SourceHeight,-hgt", m_iSourceHeight, 0, "Source picture height") … … 453 353 454 354 /* Quantization parameters */ 455 #if H_MV456 ("QP,q", m_fQP, std::vector<double>(1,30.0), "Qp values for each layer, if value is float, QP is switched once during encoding")457 #else458 355 ("QP,q", m_fQP, 30.0, "Qp value, if value is float, QP is switched once during encoding") 459 #endif460 356 ("DeltaQpRD,-dqr",m_uiDeltaQpRD, 0u, "max dQp offset for slice") 461 357 ("MaxDeltaQP,d", m_iMaxDeltaQP, 0, "max dQp offset for block") … … 481 377 482 378 // Deblocking filter parameters 483 #if H_MV484 ("LoopFilterDisable", m_bLoopFilterDisable, std::vector<Bool>(1,false), "Disable Loop Filter per Layer" )485 #else486 379 ("LoopFilterDisable", m_bLoopFilterDisable, false ) 487 #endif488 380 ("LoopFilterOffsetInPPS", m_loopFilterOffsetInPPS, false ) 489 381 ("LoopFilterBetaOffset_div2", m_loopFilterBetaOffsetDiv2, 0 ) … … 498 390 ("TransformSkip", m_useTransformSkip, false, "Intra transform skipping") 499 391 ("TransformSkipFast", m_useTransformSkipFast, false, "Fast intra transform skipping") 500 #if H_MV501 ("SAO", m_bUseSAO, std::vector<Bool>(1,true), "Enable Sample Adaptive Offset per Layer")502 #else503 392 ("SAO", m_bUseSAO, true, "Enable Sample Adaptive Offset") 504 #endif505 393 ("MaxNumOffsetsPerPic", m_maxNumOffsetsPerPic, 2048, "Max number of SAO offset per picture (Default: 2048)") 506 394 ("SAOLcuBoundary", m_saoLcuBoundary, false, "0: right/bottom LCU boundary areas skipped from SAO parameter estimation, 1: non-deblocked pixels are used for those areas") … … 684 572 ; 685 573 686 #if H_MV687 // parse coding structure688 for( Int k = 0; k < MAX_NUM_LAYERS; k++ )689 {690 m_GOPListMvc.push_back( new GOPEntry[MAX_GOP + 1] );691 if( k == 0 )692 {693 for( Int i = 1; i < MAX_GOP + 1; i++ )694 {695 std::ostringstream cOSS;696 cOSS<<"Frame"<<i;697 opts.addOptions()( cOSS.str(), m_GOPListMvc[k][i-1], GOPEntry() );698 }699 }700 else701 {702 std::ostringstream cOSS1;703 cOSS1<<"FrameI"<<"_l"<<k;704 opts.addOptions()(cOSS1.str(), m_GOPListMvc[k][MAX_GOP], GOPEntry());705 706 for( Int i = 1; i < MAX_GOP + 1; i++ )707 {708 std::ostringstream cOSS2;709 cOSS2<<"Frame"<<i<<"_l"<<k;710 opts.addOptions()(cOSS2.str(), m_GOPListMvc[k][i-1], GOPEntry());711 }712 }713 }714 #else715 574 for(Int i=1; i<MAX_GOP+1; i++) { 716 575 std::ostringstream cOSS; … … 718 577 opts.addOptions()(cOSS.str(), m_GOPList[i-1], GOPEntry()); 719 578 } 720 #endif721 579 po::setDefaults(opts); 722 580 const list<const Char*>& argv_unhandled = po::scanArgv(opts, argc, (const Char**) argv); … … 738 596 */ 739 597 /* convert std::string to c string for compatability */ 740 #if !H_MV741 598 m_pchInputFile = cfg_InputFile.empty() ? NULL : strdup(cfg_InputFile.c_str()); 742 #endif743 599 m_pchBitstreamFile = cfg_BitstreamFile.empty() ? NULL : strdup(cfg_BitstreamFile.c_str()); 744 #if !H_MV745 600 m_pchReconFile = cfg_ReconFile.empty() ? NULL : strdup(cfg_ReconFile.c_str()); 746 #endif747 601 m_pchdQPFile = cfg_dQPFile.empty() ? NULL : strdup(cfg_dQPFile.c_str()); 748 602 … … 804 658 m_pRowHeight = NULL; 805 659 } 806 #if H_MV807 free ( pColumnWidth );808 free ( pRowHeight );809 #endif810 660 #if SIGNAL_BITRATE_PICRATE_IN_VPS 811 661 readBoolString(cfg_bitRateInfoPresentFlag, m_bitRatePicRateMaxTLayers, m_bitRateInfoPresentFlag, "bit rate info. present flag" ); … … 887 737 888 738 // allocate slice-based dQP values 889 #if H_MV890 xResizeVector( m_viewId );891 #if H_3D892 xResizeVector( m_depthFlag );893 #endif894 895 xResizeVector( m_fQP );896 897 for( Int layer = 0; layer < m_numberOfLayers; layer++ )898 {899 m_aidQP.push_back( new Int[ m_framesToBeEncoded + m_iGOPSize + 1 ] );900 ::memset( m_aidQP[layer], 0, sizeof(Int)*( m_framesToBeEncoded + m_iGOPSize + 1 ) );901 902 // handling of floating-point QP values903 // if QP is not integer, sequence is split into two sections having QP and QP+1904 m_iQP.push_back((Int)( m_fQP[layer] ));905 if ( m_iQP[layer] < m_fQP[layer] )906 {907 Int iSwitchPOC = (Int)( m_framesToBeEncoded - (m_fQP[layer] - m_iQP[layer])*m_framesToBeEncoded + 0.5 );908 909 iSwitchPOC = (Int)( (Double)iSwitchPOC / m_iGOPSize + 0.5 )*m_iGOPSize;910 for ( Int i=iSwitchPOC; i<m_framesToBeEncoded + m_iGOPSize + 1; i++ )911 {912 m_aidQP[layer][i] = 1;913 }914 }915 }916 917 xResizeVector( m_bLoopFilterDisable );918 xResizeVector( m_bUseSAO );919 920 #else921 739 m_aidQP = new Int[ m_framesToBeEncoded + m_iGOPSize + 1 ]; 922 740 ::memset( m_aidQP, 0, sizeof(Int)*( m_framesToBeEncoded + m_iGOPSize + 1 ) ); … … 935 753 } 936 754 } 937 #endif938 755 939 756 // reading external dQP description from file … … 943 760 if ( fpt ) 944 761 { 945 #if H_MV946 for( Int layer = 0; layer < m_numberOfLayers; layer++ )947 {948 #endif949 762 Int iValue; 950 763 Int iPOC = 0; … … 952 765 { 953 766 if ( fscanf(fpt, "%d", &iValue ) == EOF ) break; 954 #if H_MV955 m_aidQP[layer][ iPOC ] = iValue;956 iPOC++;957 }958 #else959 767 m_aidQP[ iPOC ] = iValue; 960 768 iPOC++; 961 #endif962 769 } 963 770 fclose(fpt); … … 1125 932 xConfirmPara( m_iFrameRate <= 0, "Frame rate must be more than 1" ); 1126 933 xConfirmPara( m_framesToBeEncoded <= 0, "Total Number Of Frames encoded must be more than 0" ); 1127 #if H_MV1128 xConfirmPara( m_numberOfLayers > MAX_NUM_LAYER_IDS , "NumberOfLayers must be less than or equal to MAX_NUM_LAYER_IDS");1129 1130 1131 xConfirmPara( m_layerIdInNuh[0] != 0 , "LayerIdInNuh must be 0 for the first layer. ");1132 xConfirmPara( (m_layerIdInNuh.size()!=1) && (m_layerIdInNuh.size() < m_numberOfLayers) , "LayerIdInNuh must be given for all layers. ");1133 1134 #if H_3D1135 xConfirmPara( m_scalabilityMask != 1 && m_scalabilityMask != 3, "Scalability Mask must be equal to 1 or 3. ");1136 #else1137 xConfirmPara( m_scalabilityMask != 1 , "Scalability Mask must be equal to 1. ");1138 #endif1139 1140 m_dimIds.push_back( m_viewId );1141 #if H_3D1142 if ( m_scalabilityMask & ( 1 << DEPTH_ID ) )1143 m_dimIds.push_back( m_depthFlag );1144 #endif1145 1146 xConfirmPara( m_dimensionIdLen.size() < m_dimIds.size(), "DimensionIdLen must be given for all dimensions. " );1147 1148 for( Int dim = 0; dim < m_dimIds.size(); dim++ )1149 {1150 xConfirmPara( m_dimIds[dim].size() < m_numberOfLayers, "DimensionId must be given for all layers and all dimensions. ");1151 xConfirmPara( m_dimIds[dim][0] != 0, "DimensionId of layer 0 must be 0 in all dimensions. " );1152 xConfirmPara( m_dimensionIdLen[dim] < 1 || m_dimensionIdLen[dim] > 8, "DimensionIdLen must be greater than 0 and less than 9 in all dimensions. " );1153 for( Int i = 1; i < m_numberOfLayers; i++ )1154 {1155 xConfirmPara( ( m_dimIds[dim][i] < 0 ) || ( m_dimIds[dim][i] > ( ( 1 << m_dimensionIdLen[dim] ) - 1 ) ) , "DimensionId shall be in the range of 0 to 2^DimensionIdLen - 1. " );1156 }1157 }1158 1159 for( Int i = 0; i < m_numberOfLayers; i++ )1160 {1161 for( Int j = 0; j < i; j++ )1162 {1163 Int numDiff = 0;1164 Int lastDiff = -1;1165 for( Int dim = 0; dim < m_dimIds.size(); dim++ )1166 {1167 if ( m_dimIds[dim][i] != m_dimIds[dim][j] )1168 {1169 numDiff ++;1170 lastDiff = dim;1171 }1172 }1173 1174 Bool allEqual = ( numDiff == 0 );1175 1176 if ( allEqual )1177 {1178 printf( "\nError: Positions of Layers %d and %d are identical in scalability space\n", i, j);1179 }1180 1181 xConfirmPara( allEqual , "Each layer shall have a different position in scalability space." );1182 1183 if ( numDiff == 1 )1184 {1185 Bool inc = m_dimIds[ lastDiff ][ i ] > m_dimIds[ lastDiff ][ j ];1186 if ( !inc )1187 {1188 printf( "\nError: Positions of Layers %d and %d is not increasing in dimension %d \n", i, j, lastDiff);1189 }1190 xConfirmPara( !inc, "DimensionIds shall be increasing within one dimension. " );1191 }1192 }1193 }1194 1195 #endif1196 934 xConfirmPara( m_iGOPSize < 1 , "GOP Size must be greater or equal to 1" ); 1197 935 xConfirmPara( m_iGOPSize > 1 && m_iGOPSize % 2, "GOP Size must be a multiple of 2, if GOP Size is greater than 1" ); 1198 936 xConfirmPara( (m_iIntraPeriod > 0 && m_iIntraPeriod < m_iGOPSize) || m_iIntraPeriod == 0, "Intra period must be more than GOP size, or -1 , not 0" ); 1199 937 xConfirmPara( m_iDecodingRefreshType < 0 || m_iDecodingRefreshType > 2, "Decoding Refresh Type must be equal to 0, 1 or 2" ); 1200 #if H_MV1201 for( Int layer = 0; layer < m_numberOfLayers; layer++ )1202 {1203 xConfirmPara( m_iQP[layer] < -6 * (m_internalBitDepthY - 8) || m_iQP[layer] > 51, "QP exceeds supported range (-QpBDOffsety to 51)" );1204 }1205 #else1206 938 xConfirmPara( m_iQP < -6 * (m_internalBitDepthY - 8) || m_iQP > 51, "QP exceeds supported range (-QpBDOffsety to 51)" ); 1207 #endif1208 939 xConfirmPara( m_loopFilterBetaOffsetDiv2 < -13 || m_loopFilterBetaOffsetDiv2 > 13, "Loop Filter Beta Offset div. 2 exceeds supported range (-13 to 13)"); 1209 940 xConfirmPara( m_loopFilterTcOffsetDiv2 < -13 || m_loopFilterTcOffsetDiv2 > 13, "Loop Filter Tc Offset div. 2 exceeds supported range (-13 to 13)"); … … 1249 980 1250 981 #if ADAPTIVE_QP_SELECTION 1251 #if H_MV1252 for( Int layer = 0; layer < m_numberOfLayers; layer++ )1253 {1254 xConfirmPara( m_bUseAdaptQpSelect == true && m_iQP[layer] < 0, "AdaptiveQpSelection must be disabled when QP < 0.");1255 }1256 #else1257 982 xConfirmPara( m_bUseAdaptQpSelect == true && m_iQP < 0, "AdaptiveQpSelection must be disabled when QP < 0."); 1258 #endif1259 983 xConfirmPara( m_bUseAdaptQpSelect == true && (m_cbQpOffset !=0 || m_crQpOffset != 0 ), "AdaptiveQpSelection must be disabled when ChromaQpOffset is not equal to 0."); 1260 984 #endif … … 1310 1034 } 1311 1035 1312 #if H_MV1313 // validate that POC of same frame is identical across multiple layers1314 Bool bErrorMvePoc = false;1315 if( m_numberOfLayers > 1 )1316 {1317 for( Int k = 1; k < m_numberOfLayers; k++ )1318 {1319 for( Int i = 0; i < MAX_GOP; i++ )1320 {1321 if( m_GOPListMvc[k][i].m_POC != m_GOPListMvc[0][i].m_POC )1322 {1323 printf( "\nError: Frame%d_l%d POC %d is not identical to Frame%d POC\n", i, k, m_GOPListMvc[k][i].m_POC, i );1324 bErrorMvePoc = true;1325 }1326 }1327 }1328 }1329 xConfirmPara( bErrorMvePoc, "Invalid inter-layer POC structure given" );1330 1331 // validate that baseview has no inter-view refs1332 Bool bErrorIvpBase = false;1333 for( Int i = 0; i < MAX_GOP; i++ )1334 {1335 if( m_GOPListMvc[0][i].m_numInterViewRefPics != 0 )1336 {1337 printf( "\nError: Frame%d inter_layer refs not available in layer 0\n", i );1338 bErrorIvpBase = true;1339 }1340 }1341 xConfirmPara( bErrorIvpBase, "Inter-layer refs not possible in base layer" );1342 1343 // validate inter-view refs1344 Bool bErrorIvpEnhV = false;1345 if( m_numberOfLayers > 1 )1346 {1347 for( Int k = 1; k < m_numberOfLayers; k++ )1348 {1349 for( Int i = 0; i < MAX_GOP+1; i++ )1350 {1351 for( Int j = 0; j < m_GOPListMvc[k][i].m_numInterViewRefPics; j++ )1352 {1353 Int iAbsViewId = m_GOPListMvc[k][i].m_interViewRefs[j] + k;1354 if( iAbsViewId < 0 || iAbsViewId >= k )1355 {1356 printf( "\nError: inter-layer ref pic %d is not available for Frame%d_l%d\n", m_GOPListMvc[k][i].m_interViewRefs[j], i, k );1357 bErrorIvpEnhV = true;1358 }1359 if( m_GOPListMvc[k][i].m_interViewRefPosL[0][j] < -1 || m_GOPListMvc[k][i].m_interViewRefPosL[0][j] > m_GOPListMvc[k][i].m_numRefPicsActive )1360 {1361 printf( "\nError: inter-layer ref pos %d on L0 is not available for Frame%d_l%d\n", m_GOPListMvc[k][i].m_interViewRefPosL[0][j], i, k );1362 bErrorIvpEnhV = true;1363 }1364 if( m_GOPListMvc[k][i].m_interViewRefPosL[1][j] < -1 || m_GOPListMvc[k][i].m_interViewRefPosL[1][j] > m_GOPListMvc[k][i].m_numRefPicsActive )1365 {1366 printf( "\nError: inter-layer ref pos %d on L1 is not available for Frame%d_l%d\n", m_GOPListMvc[k][i].m_interViewRefPosL[1][j], i, k );1367 bErrorIvpEnhV = true;1368 }1369 }1370 if( i == MAX_GOP ) // inter-view refs at I pic position in base view1371 {1372 if( m_GOPListMvc[k][MAX_GOP].m_sliceType != 'B' && m_GOPListMvc[k][MAX_GOP].m_sliceType != 'P' && m_GOPListMvc[k][MAX_GOP].m_sliceType != 'I' )1373 {1374 printf( "\nError: slice type of FrameI_l%d must be equal to B or P or I\n", k );1375 bErrorIvpEnhV = true;1376 }1377 1378 if( m_GOPListMvc[k][MAX_GOP].m_POC != 0 )1379 {1380 printf( "\nError: POC %d not possible for FrameI_l%d, must be 0\n", m_GOPListMvc[k][MAX_GOP].m_POC, k );1381 bErrorIvpEnhV = true;1382 }1383 1384 if( m_GOPListMvc[k][MAX_GOP].m_temporalId != 0 )1385 {1386 printf( "\nWarning: Temporal id of FrameI_l%d must be 0 (cp. I-frame in base layer)\n", k );1387 m_GOPListMvc[k][MAX_GOP].m_temporalId = 0;1388 }1389 1390 if( m_GOPListMvc[k][MAX_GOP].m_numRefPics != 0 )1391 {1392 printf( "\nWarning: temporal references not possible for FrameI_l%d\n", k );1393 for( Int j = 0; j < m_GOPListMvc[k][MAX_GOP].m_numRefPics; j++ )1394 {1395 m_GOPListMvc[k][MAX_GOP].m_referencePics[j] = 0;1396 }1397 m_GOPListMvc[k][MAX_GOP].m_numRefPics = 0;1398 }1399 1400 if( m_GOPListMvc[k][MAX_GOP].m_interRPSPrediction )1401 {1402 printf( "\nError: inter RPS prediction not possible for FrameI_l%d, must be 0\n", k );1403 bErrorIvpEnhV = true;1404 }1405 1406 if( m_GOPListMvc[k][MAX_GOP].m_sliceType == 'I' && m_GOPListMvc[k][MAX_GOP].m_numInterViewRefPics != 0 )1407 {1408 printf( "\nError: inter-layer prediction not possible for FrameI_l%d with slice type I, #IL_ref_pics must be 0\n", k );1409 bErrorIvpEnhV = true;1410 }1411 1412 if( m_GOPListMvc[k][MAX_GOP].m_numRefPicsActive > m_GOPListMvc[k][MAX_GOP].m_numInterViewRefPics )1413 {1414 m_GOPListMvc[k][MAX_GOP].m_numRefPicsActive = m_GOPListMvc[k][MAX_GOP].m_numInterViewRefPics;1415 }1416 1417 if( m_GOPListMvc[k][MAX_GOP].m_sliceType == 'P' )1418 {1419 if( m_GOPListMvc[k][MAX_GOP].m_numInterViewRefPics < 1 )1420 {1421 printf( "\nError: #IL_ref_pics must be at least one for FrameI_l%d with slice type P\n", k );1422 bErrorIvpEnhV = true;1423 }1424 else1425 {1426 for( Int j = 0; j < m_GOPListMvc[k][MAX_GOP].m_numInterViewRefPics; j++ )1427 {1428 if( m_GOPListMvc[k][MAX_GOP].m_interViewRefPosL[1][j] != -1 )1429 {1430 printf( "\nError: inter-layer ref pos %d on L1 not possible for FrameI_l%d with slice type P\n", m_GOPListMvc[k][MAX_GOP].m_interViewRefPosL[1][j], k );1431 bErrorIvpEnhV = true;1432 }1433 }1434 }1435 }1436 1437 if( m_GOPListMvc[k][MAX_GOP].m_sliceType == 'B' && m_GOPListMvc[k][MAX_GOP].m_numInterViewRefPics < 1 )1438 {1439 printf( "\nError: #IL_ref_pics must be at least one for FrameI_l%d with slice type B\n", k );1440 bErrorIvpEnhV = true;1441 }1442 }1443 }1444 }1445 }1446 xConfirmPara( bErrorIvpEnhV, "Invalid inter-layer coding structure for enhancement layers given" );1447 1448 // validate temporal coding structure1449 if( !bErrorMvePoc && !bErrorIvpBase && !bErrorIvpEnhV )1450 {1451 for( Int layer = 0; layer < m_numberOfLayers; layer++ )1452 {1453 GOPEntry* m_GOPList = m_GOPListMvc [layer]; // It is not a member, but this name helps avoiding code duplication !!!1454 Int& m_extraRPSs = m_extraRPSsMvc [layer]; // It is not a member, but this name helps avoiding code duplication !!!1455 Int& m_maxTempLayer = m_maxTempLayerMvc [layer]; // It is not a member, but this name helps avoiding code duplication !!!1456 Int* m_maxDecPicBuffering = m_maxDecPicBufferingMvc[layer]; // It is not a member, but this name helps avoiding code duplication !!!1457 Int* m_numReorderPics = m_numReorderPicsMvc [layer]; // It is not a member, but this name helps avoiding code duplication !!!1458 #endif1459 1036 /* if this is an intra-only sequence, ie IntraPeriod=1, don't verify the GOP structure 1460 1037 * This permits the ability to omit a GOP structure specification */ … … 1490 1067 } 1491 1068 1492 #if H_MV1493 if ( (m_iIntraPeriod != 1) && !m_loopFilterOffsetInPPS && m_DeblockingFilterControlPresent && (!m_bLoopFilterDisable[layer]) )1494 #else1495 1069 if ( (m_iIntraPeriod != 1) && !m_loopFilterOffsetInPPS && m_DeblockingFilterControlPresent && (!m_bLoopFilterDisable) ) 1496 #endif1497 1070 { 1498 1071 for(Int i=0; i<m_iGOPSize; i++) … … 1510 1083 if(m_GOPList[curGOP].m_POC<0) 1511 1084 { 1512 #if H_MV1513 printf("\nError: found fewer Reference Picture Sets than GOPSize for layer %d\n", layer );1514 #else1515 1085 printf("\nError: found fewer Reference Picture Sets than GOPSize\n"); 1516 #endif1517 1086 errorGOP=true; 1518 1087 } … … 1551 1120 if(!found) 1552 1121 { 1553 #if H_MV1554 printf("\nError: ref pic %d is not available for GOP frame %d of layer %d\n", m_GOPList[curGOP].m_referencePics[i], curGOP+1, layer);1555 #else1556 1122 printf("\nError: ref pic %d is not available for GOP frame %d\n",m_GOPList[curGOP].m_referencePics[i],curGOP+1); 1557 #endif1558 1123 errorGOP=true; 1559 1124 } … … 1932 1497 } 1933 1498 #endif 1934 #if H_MV1935 }1936 }1937 #endif1938 1499 1939 1500 #undef xConfirmPara … … 1971 1532 { 1972 1533 printf("\n"); 1973 #if H_MV1974 for( Int layer = 0; layer < m_numberOfLayers; layer++)1975 {1976 printf("Input File %i : %s\n", layer, m_pchInputFileList[layer]);1977 }1978 #else1979 1534 printf("Input File : %s\n", m_pchInputFile ); 1980 #endif1981 1535 printf("Bitstream File : %s\n", m_pchBitstreamFile ); 1982 #if H_MV1983 for( Int layer = 0; layer < m_numberOfLayers; layer++)1984 {1985 printf("Reconstruction File %i : %s\n", layer, m_pchReconFileList[layer]);1986 }1987 #else1988 1536 printf("Reconstruction File : %s\n", m_pchReconFile ); 1989 #endif1990 #if H_MV1991 xPrintParaVector( "ViewId", m_viewId );1992 #endif1993 #if H_3D1994 xPrintParaVector( "DepthFlag", m_depthFlag );1995 #endif1996 #if H_MV1997 xPrintParaVector( "QP" , m_fQP );1998 xPrintParaVector( "LoopFilterDisable", m_bLoopFilterDisable );1999 xPrintParaVector( "SAO" , m_bUseSAO );2000 #endif2001 1537 printf("Real Format : %dx%d %dHz\n", m_iSourceWidth - m_confLeft - m_confRight, m_iSourceHeight - m_confTop - m_confBottom, m_iFrameRate ); 2002 1538 printf("Internal Format : %dx%d %dHz\n", m_iSourceWidth, m_iSourceHeight, m_iFrameRate ); … … 2010 1546 printf("Intra period : %d\n", m_iIntraPeriod ); 2011 1547 printf("Decoding refresh type : %d\n", m_iDecodingRefreshType ); 2012 #if !H_MV2013 1548 printf("QP : %5.2f\n", m_fQP ); 2014 #endif2015 1549 printf("Max dQP signaling depth : %d\n", m_iMaxCuDQPDepth); 2016 1550 … … 2077 1611 } 2078 1612 printf("CIP:%d ", m_bUseConstrainedIntraPred); 2079 #if !H_MV2080 1613 printf("SAO:%d ", (m_bUseSAO)?(1):(0)); 2081 #endif2082 1614 printf("PCM:%d ", (m_usePCM && (1<<m_uiPCMLog2MinSize) <= m_uiMaxCUWidth)? 1 : 0); 2083 1615 printf("SAOLcuBasedOptimization:%d ", (m_saoLcuBasedOptimization)?(1):(0)); -
branches/HTM-DEV-0.1-dev/source/App/TAppEncoder/TAppEncCfg.h
r363 r367 55 55 protected: 56 56 // file I/O 57 #if H_MV58 std::vector<char*> m_pchInputFileList; ///< source file names59 #else60 57 Char* m_pchInputFile; ///< source file name 61 #endif62 58 Char* m_pchBitstreamFile; ///< output bitstream file 63 #if H_MV64 std::vector<char*> m_pchReconFileList; ///< output reconstruction file names65 Int m_numberOfLayers; ///< number of Layers to Encode66 #else67 59 Char* m_pchReconFile; ///< output reconstruction file 68 #endif69 60 // VPS specification 70 #if H_MV71 std::vector< std::vector<Int> > m_dimIds; ///< dimension ids ( pointers to m_viewId and m_depthFlag72 std::vector<Int> m_viewId; ///< view id73 #if H_3D74 std::vector<Int> m_depthFlag; ///< depth flag75 #endif76 std::vector<Int> m_layerIdInNuh; ///< layer Id in Nuh for each layer77 Bool m_splittingFlag; ///< Splitting Flag78 Int m_scalabilityMask; ///< Mask indicating scalabilities, 1: texture; 3: texture + depth79 std::vector<Int> m_dimensionIdLen; ///< Length of scalability dimension s80 #endif81 61 Double m_adLambdaModifier[ MAX_TLAYER ]; ///< Lambda modifier array for each temporal layer 82 62 // source specification … … 108 88 Int m_iDecodingRefreshType; ///< random access type 109 89 Int m_iGOPSize; ///< GOP size of hierarchical structure 110 #if H_MV111 Int m_extraRPSsMvc[MAX_NUM_LAYERS]; ///< extra RPSs added to handle CRA for each layer112 std::vector< GOPEntry* > m_GOPListMvc; ///< the coding structure entries from the config file for each layer113 Int m_numReorderPicsMvc[MAX_NUM_LAYERS][MAX_TLAYER]; ///< total number of reorder pictures for each layer114 Int m_maxDecPicBufferingMvc[MAX_NUM_LAYERS][MAX_TLAYER]; ///< total number of reference pictures needed for decoding for each layer115 #else116 90 Int m_extraRPSs; ///< extra RPSs added to handle CRA 117 91 GOPEntry m_GOPList[MAX_GOP]; ///< the coding structure entries from the config file … … 122 96 Int m_maxDecPicBuffering[MAX_TLAYER]; ///< total number of reference pictures needed for decoding 123 97 #endif 124 #endif125 98 #if !L0034_COMBINED_LIST_CLEANUP 126 99 Bool m_bUseLComb; ///< flag for using combined reference list for uni-prediction in B-slices (JCTVC-D421) … … 130 103 Bool m_enableAMP; 131 104 // coding quality 132 #if H_MV133 std::vector<Double> m_fQP; ///< QP value of key-picture (floating point) for each layer134 std::vector<Int> m_iQP; ///< QP value of key-picture (integer) for each layer135 #else136 105 Double m_fQP; ///< QP value of key-picture (floating point) 137 106 Int m_iQP; ///< QP value of key-picture (integer) 138 #endif139 107 Char* m_pchdQPFile; ///< QP offset for each slice (initialized from external file) 140 #if H_MV141 std::vector<Int*> m_aidQP; ///< array of slice QP values for each layer142 #else143 108 Int* m_aidQP; ///< array of slice QP values 144 #endif145 109 Int m_iMaxDeltaQP; ///< max. |delta QP| 146 110 UInt m_uiDeltaQpRD; ///< dQP range for multi-pass slice QP optimization … … 157 121 Int m_iQPAdaptationRange; ///< dQP range by QP adaptation 158 122 159 #if H_MV160 Int m_maxTempLayerMvc[MAX_NUM_LAYER_IDS]; ///< Max temporal layer for each layer161 #else162 123 Int m_maxTempLayer; ///< Max temporal layer 163 #endif164 124 165 125 // coding unit (CU) definition … … 188 148 // coding tool (lossless) 189 149 Bool m_useLossless; ///< flag for using lossless coding 190 #if H_MV191 std::vector<Bool> m_bUseSAO;192 #else193 150 Bool m_bUseSAO; 194 #endif195 151 Int m_maxNumOffsetsPerPic; ///< SAO maximun number of offset per picture 196 152 Bool m_saoLcuBoundary; ///< SAO parameter estimation using non-deblocked pixels for LCU bottom and right boundary areas 197 153 Bool m_saoLcuBasedOptimization; ///< SAO LCU-based optimization 198 154 // coding tools (loop filter) 199 #if H_MV200 std::vector<Bool> m_bLoopFilterDisable; ///< flag for using deblocking filter for each layer201 #else202 155 Bool m_bLoopFilterDisable; ///< flag for using deblocking filter 203 #endif204 156 Bool m_loopFilterOffsetInPPS; ///< offset for deblocking filter in 0 = slice header, 1 = PPS 205 157 Int m_loopFilterBetaOffsetDiv2; ///< beta offset for deblocking filter … … 372 324 Void xPrintParameter (); ///< print configuration values 373 325 Void xPrintUsage (); ///< print usage 374 #if H_MV375 template <typename T>376 Void xResizeVector( std::vector<T> & rpcVector )377 {378 for( Int layer = 0; rpcVector.size() < m_numberOfLayers; layer++ )379 {380 assert( rpcVector.size() > 0 );381 rpcVector.push_back( rpcVector[layer] );382 }383 384 385 for( ; rpcVector.size() > m_numberOfLayers; )386 {387 rpcVector.pop_back( );388 }389 390 }391 392 template <typename T>393 Void xPrintParaVector( std::string description, std::vector<T> & rpcVector )394 {395 Int iSpace = max(1, ENC_CFG_CONSOUT_SPACE - (Int) description.length() );396 397 for ( Int i = 0; i < iSpace; i++ )398 description.append( " " );399 400 description.append( ":" );401 printf( "%s", description.c_str() );402 403 for(Int i=0;i<rpcVector.size();i++)404 xPrintVectorElem( rpcVector[i] );405 406 printf("\n");407 }408 409 Void xPrintVectorElem( UInt elem ) { printf(" %d" , elem );};410 Void xPrintVectorElem( Int elem ) { printf(" %d" , elem );};411 412 Void xPrintVectorElem( Double elem ) { printf(" %5.2f", elem );};413 Void xPrintVectorElem( Bool elem ) { printf(" %d" , ( elem ? 1 : 0 ));};414 #endif415 326 #if SIGNAL_BITRATE_PICRATE_IN_VPS 416 327 Int m_bitRatePicRateMaxTLayers; ///< Indicates max. number of sub-layers for which bit rate is signalled. … … 422 333 Int* m_constantPicRateIdc; ///< Indicates constant picture rate idc for various sub-layers 423 334 #endif 424 #if H_MV425 Int getGOPSize() { return m_iGOPSize; }426 #endif427 335 public: 428 336 TAppEncCfg(); -
branches/HTM-DEV-0.1-dev/source/App/TAppEncoder/TAppEncTop.cpp
r366 r367 57 57 TAppEncTop::TAppEncTop() 58 58 { 59 #if !H_MV60 59 m_iFrameRcvd = 0; 61 #endif62 60 m_totalBytes = 0; 63 61 m_essentialBytes = 0; … … 72 70 TComVPS vps; 73 71 74 #if H_MV75 Int maxTempLayer = -1;76 for (Int j = 0; j < m_numberOfLayers; j++)77 {78 maxTempLayer = max( m_maxTempLayerMvc[ j ], maxTempLayer );79 }80 81 vps.setMaxTLayers ( maxTempLayer );82 if ( maxTempLayer )83 {84 vps.setTemporalNestingFlag(true);85 }86 vps.setMaxLayers( m_numberOfLayers );87 for(Int i = 0; i < MAX_TLAYER; i++)88 {89 Int maxNumReOrderPics = 0;90 Int maxDecPicBuffering = 0;91 for (Int j = 0; j < m_numberOfLayers; j++)92 {93 maxNumReOrderPics = max( maxNumReOrderPics, m_numReorderPicsMvc [ j ][ i ] );94 maxDecPicBuffering = max( maxDecPicBuffering, m_maxDecPicBufferingMvc[ j ][ i ] );95 }96 97 vps.setNumReorderPics ( maxNumReOrderPics ,i );98 vps.setMaxDecPicBuffering ( maxDecPicBuffering ,i );99 }100 #else101 72 vps.setMaxTLayers ( m_maxTempLayer ); 102 73 if (m_maxTempLayer == 1) … … 110 81 vps.setMaxDecPicBuffering ( m_maxDecPicBuffering[i], i ); 111 82 } 112 #endif113 #if H_MV114 xSetLayerIds ( vps );115 xSetDimensionIdAndLength ( vps );116 xSetDirectDependencyFlags( vps );117 118 for(Int layer = 0; layer < m_numberOfLayers; layer++)119 {120 m_frameRcvd .push_back(0);121 m_acTEncTopList .push_back(new TEncTop);122 m_acTVideoIOYuvInputFileList.push_back(new TVideoIOYuv);123 m_acTVideoIOYuvReconFileList.push_back(new TVideoIOYuv);124 m_picYuvRec .push_back(new TComList<TComPicYuv*>) ;125 126 m_ivPicLists.push_back( m_acTEncTopList[ layer ]->getListPic() );127 TEncTop& m_cTEncTop = *m_acTEncTopList[ layer ]; // It is not a member, but this name helps avoiding code duplication !!!128 129 m_cTEncTop.setLayerIdInVps( layer );130 m_cTEncTop.setLayerId ( vps.getLayerIdInNuh( layer ) );131 m_cTEncTop.setViewId ( vps.getViewId ( layer ) );132 #if H_3D133 m_cTEncTop.setIsDepth ( vps.getDepthId ( layer ) != 0 );134 #endif135 m_cTEncTop.setIvPicLists ( &m_ivPicLists );136 #endif137 83 m_cTEncTop.setVPS(&vps); 138 84 … … 157 103 m_cTEncTop.setDecodingRefreshType ( m_iDecodingRefreshType ); 158 104 m_cTEncTop.setGOPSize ( m_iGOPSize ); 159 #if H_MV160 m_cTEncTop.setGopList ( m_GOPListMvc[layer] );161 m_cTEncTop.setExtraRPSs ( m_extraRPSsMvc[layer] );162 for(Int i = 0; i < MAX_TLAYER; i++)163 {164 m_cTEncTop.setNumReorderPics ( m_numReorderPicsMvc[layer][i], i );165 m_cTEncTop.setMaxDecPicBuffering ( m_maxDecPicBufferingMvc[layer][i], i );166 }167 #else168 105 m_cTEncTop.setGopList ( m_GOPList ); 169 106 m_cTEncTop.setExtraRPSs ( m_extraRPSs ); … … 173 110 m_cTEncTop.setMaxDecPicBuffering ( m_maxDecPicBuffering[i], i ); 174 111 } 175 #endif176 112 for( UInt uiLoop = 0; uiLoop < MAX_TLAYER; ++uiLoop ) 177 113 { 178 114 m_cTEncTop.setLambdaModifier( uiLoop, m_adLambdaModifier[ uiLoop ] ); 179 115 } 180 #if H_MV181 m_cTEncTop.setQP ( m_iQP[layer] );182 #else183 116 m_cTEncTop.setQP ( m_iQP ); 184 #endif185 117 186 118 m_cTEncTop.setPad ( m_aiPad ); 187 119 188 #if H_MV189 m_cTEncTop.setMaxTempLayer ( m_maxTempLayerMvc[layer] );190 #else191 120 m_cTEncTop.setMaxTempLayer ( m_maxTempLayer ); 192 #endif193 121 m_cTEncTop.setUseAMP( m_enableAMP ); 194 122 … … 196 124 197 125 //====== Loop/Deblock Filter ======== 198 #if H_MV199 m_cTEncTop.setLoopFilterDisable ( m_bLoopFilterDisable[layer]);200 #else201 126 m_cTEncTop.setLoopFilterDisable ( m_bLoopFilterDisable ); 202 #endif203 127 m_cTEncTop.setLoopFilterOffsetInPPS ( m_loopFilterOffsetInPPS ); 204 128 m_cTEncTop.setLoopFilterBetaOffset ( m_loopFilterBetaOffsetDiv2 ); … … 227 151 Int lowestQP; 228 152 lowestQP = - 6*(g_bitDepthY - 8); // XXX: check 229 #if H_MV230 if ((m_iMaxDeltaQP == 0 ) && (m_iQP[layer] == lowestQP) && (m_useLossless == true))231 #else232 153 if ((m_iMaxDeltaQP == 0 ) && (m_iQP == lowestQP) && (m_useLossless == true)) 233 #endif234 154 { 235 155 m_bUseAdaptiveQP = false; … … 247 167 m_cTEncTop.setUseLComb ( m_bUseLComb ); 248 168 #endif 249 #if H_MV250 m_cTEncTop.setdQPs ( m_aidQP[layer] );251 #else252 169 m_cTEncTop.setdQPs ( m_aidQP ); 253 #endif254 170 m_cTEncTop.setUseRDOQ ( m_useRDOQ ); 255 171 m_cTEncTop.setUseRDOQTS ( m_useRDOQTS ); … … 308 224 } 309 225 m_cTEncTop.setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag ); 310 #if H_MV311 m_cTEncTop.setUseSAO ( m_bUseSAO[layer] );312 #else313 226 m_cTEncTop.setUseSAO ( m_bUseSAO ); 314 #endif315 227 m_cTEncTop.setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic); 316 228 … … 460 372 } 461 373 #endif 462 #if H_MV463 }464 #endif465 374 } 466 375 467 376 Void TAppEncTop::xCreateLib() 468 377 { 469 #if H_MV470 // initialize global variables471 initROM();472 473 for( Int layer=0; layer < m_numberOfLayers; layer++)474 {475 m_acTVideoIOYuvInputFileList[layer]->open( m_pchInputFileList[layer], false, m_inputBitDepthY, m_inputBitDepthC, m_internalBitDepthY, m_internalBitDepthC ); // read mode476 m_acTVideoIOYuvInputFileList[layer]->skipFrames( m_FrameSkip, m_iSourceWidth - m_aiPad[0], m_iSourceHeight - m_aiPad[1]);477 478 if (m_pchReconFileList[layer])479 {480 m_acTVideoIOYuvReconFileList[layer]->open( m_pchReconFileList[layer], true, m_outputBitDepthY, m_outputBitDepthC, m_internalBitDepthY, m_internalBitDepthC); // write mode481 }482 m_acTEncTopList[layer]->create();483 }484 #else485 378 // Video I/O 486 379 m_cTVideoIOYuvInputFile.open( m_pchInputFile, false, m_inputBitDepthY, m_inputBitDepthC, m_internalBitDepthY, m_internalBitDepthC ); // read mode … … 492 385 // Neo Decoder 493 386 m_cTEncTop.create(); 494 #endif495 387 } 496 388 497 389 Void TAppEncTop::xDestroyLib() 498 390 { 499 #if H_MV500 // destroy ROM501 destroyROM();502 503 for(Int layer=0; layer<m_numberOfLayers; layer++)504 {505 m_acTVideoIOYuvInputFileList[layer]->close();506 m_acTVideoIOYuvReconFileList[layer]->close();507 delete m_acTVideoIOYuvInputFileList[layer] ;508 m_acTVideoIOYuvInputFileList[layer] = NULL;509 delete m_acTVideoIOYuvReconFileList[layer] ;510 m_acTVideoIOYuvReconFileList[layer] = NULL;511 m_acTEncTopList[layer]->deletePicBuffer();512 m_acTEncTopList[layer]->destroy();513 delete m_acTEncTopList[layer] ;514 m_acTEncTopList[layer] = NULL;515 delete m_picYuvRec[layer] ;516 m_picYuvRec[layer] = NULL;517 }518 #else519 391 // Video I/O 520 392 m_cTVideoIOYuvInputFile.close(); … … 523 395 // Neo Decoder 524 396 m_cTEncTop.destroy(); 525 #endif526 397 } 527 398 528 399 Void TAppEncTop::xInitLib() 529 400 { 530 #if H_MV531 for(Int layer=0; layer<m_numberOfLayers; layer++)532 {533 m_acTEncTopList[layer]->init( );534 }535 #else536 401 m_cTEncTop.init(); 537 #endif538 402 } 539 403 … … 568 432 569 433 // main encoder loop 570 #if H_MV571 Bool allEos = false;572 std::vector<Bool> eos ;573 std::vector<Bool> flush ;574 575 Int gopSize = 1;576 Int maxGopSize = 0;577 maxGopSize = (std::max)(maxGopSize, m_acTEncTopList[0]->getGOPSize());578 579 for(Int layer=0; layer < m_numberOfLayers; layer++ )580 {581 eos .push_back( false );582 flush.push_back( false );583 }584 #else585 434 Int iNumEncoded = 0; 586 435 Bool bEos = false; 587 #endif588 436 589 437 list<AccessUnit> outputAccessUnits; ///< list of access units to write out. is populated by the encoding process … … 592 440 pcPicYuvOrg->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth ); 593 441 594 #if H_MV595 while ( !allEos )596 {597 for(Int layer=0; layer < m_numberOfLayers; layer++ )598 {599 Int frmCnt = 0;600 while ( !eos[layer] && !(frmCnt == gopSize))601 {602 // get buffers603 xGetBuffer(pcPicYuvRec, layer);604 605 // read input YUV file606 m_acTVideoIOYuvInputFileList[layer]->read ( pcPicYuvOrg, m_aiPad );607 m_acTEncTopList [layer]->initNewPic( pcPicYuvOrg );608 609 // increase number of received frames610 m_frameRcvd[layer]++;611 612 frmCnt++;613 614 eos[layer] = (m_frameRcvd[layer] == m_framesToBeEncoded);615 allEos = allEos|eos[layer];616 617 // if end of file (which is only detected on a read failure) flush the encoder of any queued pictures618 if (m_acTVideoIOYuvInputFileList[layer]->isEof())619 {620 flush [layer] = true;621 eos [layer] = true;622 m_frameRcvd [layer]--;623 m_acTEncTopList[layer]->setFramesToBeEncoded(m_frameRcvd[layer]);624 }625 }626 }627 for ( Int gopId=0; gopId < gopSize; gopId++ )628 {629 for(Int layer=0; layer < m_numberOfLayers; layer++ )630 {631 Int iNumEncoded = 0;632 633 // call encoding function for one frame634 m_acTEncTopList[layer]->encode( eos[layer], flush[layer] ? 0 : pcPicYuvOrg, *m_picYuvRec[layer], outputAccessUnits, iNumEncoded, gopId );635 xWriteOutput(bitstreamFile, iNumEncoded, outputAccessUnits, layer);636 outputAccessUnits.clear();637 }638 639 }640 gopSize = maxGopSize;641 }642 for(Int layer=0; layer < m_numberOfLayers; layer++ )643 {644 m_acTEncTopList[layer]->printSummary( m_acTEncTopList[layer]->getNumAllPicCoded() );645 }646 #else647 442 while ( !bEos ) 648 443 { … … 680 475 681 476 m_cTEncTop.printSummary(); 682 #endif683 477 684 478 // delete original YUV buffer … … 687 481 pcPicYuvOrg = NULL; 688 482 689 #if !H_MV690 483 // delete used buffers in encoder class 691 484 m_cTEncTop.deletePicBuffer(); 692 #endif693 485 694 486 // delete buffers & classes … … 701 493 } 702 494 703 #if H_3D704 TEncTop* TAppEncTop::getTEncTopView( Int viewId, Bool isDepth )705 {706 TEncTop* encoder = NULL;707 for( Int layer = 0; layer < m_acTEncTopList.size(); layer++ )708 {709 if( m_acTEncTopList[layer]->getViewId() == viewId &&710 m_acTEncTopList[layer]->getIsDepth() == isDepth )711 {712 encoder = m_acTEncTopList[layer];713 break;714 }715 }716 return encoder;717 }718 #endif719 495 // ==================================================================================================================== 720 496 // Protected member functions … … 727 503 . 728 504 */ 729 #if H_MV730 Void TAppEncTop::xGetBuffer( TComPicYuv*& rpcPicYuvRec, UInt layer)731 #else732 505 Void TAppEncTop::xGetBuffer( TComPicYuv*& rpcPicYuvRec) 733 #endif734 506 { 735 507 assert( m_iGOPSize > 0 ); 736 508 737 509 // org. buffer 738 #if H_MV739 if ( m_picYuvRec[layer]->size() == (UInt)m_iGOPSize )740 {741 rpcPicYuvRec = m_picYuvRec[layer]->popFront();742 #else743 510 if ( m_cListPicYuvRec.size() == (UInt)m_iGOPSize ) 744 511 { 745 512 rpcPicYuvRec = m_cListPicYuvRec.popFront(); 746 #endif747 513 748 514 } … … 754 520 755 521 } 756 #if H_MV757 m_picYuvRec[layer]->pushBack( rpcPicYuvRec );758 #else759 522 m_cListPicYuvRec.pushBack( rpcPicYuvRec ); 760 #endif761 523 } 762 524 763 525 Void TAppEncTop::xDeleteBuffer( ) 764 526 { 765 #if H_MV766 for(Int layer=0; layer<m_picYuvRec.size(); layer++)767 {768 if(m_picYuvRec[layer])769 {770 TComList<TComPicYuv*>::iterator iterPicYuvRec = m_picYuvRec[layer]->begin();771 Int iSize = Int( m_picYuvRec[layer]->size() );772 #else773 527 TComList<TComPicYuv*>::iterator iterPicYuvRec = m_cListPicYuvRec.begin(); 774 528 775 529 Int iSize = Int( m_cListPicYuvRec.size() ); 776 #endif777 530 778 531 for ( Int i = 0; i < iSize; i++ ) … … 783 536 } 784 537 785 #if H_MV786 }787 }788 #endif789 538 } 790 539 791 540 /** \param iNumEncoded number of encoded frames 792 541 */ 793 #if H_MV794 Void TAppEncTop::xWriteOutput(std::ostream& bitstreamFile, Int iNumEncoded, std::list<AccessUnit>& accessUnits, UInt layerId)795 #else796 542 Void TAppEncTop::xWriteOutput(std::ostream& bitstreamFile, Int iNumEncoded, const std::list<AccessUnit>& accessUnits) 797 #endif798 543 { 799 544 Int i; 800 545 801 #if H_MV802 if( iNumEncoded > 0 )803 {804 TComList<TComPicYuv*>::iterator iterPicYuvRec = m_picYuvRec[layerId]->end();805 #else806 546 TComList<TComPicYuv*>::iterator iterPicYuvRec = m_cListPicYuvRec.end(); 807 547 list<AccessUnit>::const_iterator iterBitstream = accessUnits.begin(); 808 #endif809 548 810 549 for ( i = 0; i < iNumEncoded; i++ ) … … 816 555 { 817 556 TComPicYuv* pcPicYuvRec = *(iterPicYuvRec++); 818 #if H_MV819 if (m_pchReconFileList[layerId])820 {821 m_acTVideoIOYuvReconFileList[layerId]->write( pcPicYuvRec, m_confLeft, m_confRight, m_confTop, m_confBottom );822 }823 }824 }825 if( ! accessUnits.empty() )826 {827 list<AccessUnit>::iterator aUIter;828 for( aUIter = accessUnits.begin(); aUIter != accessUnits.end(); aUIter++ )829 {830 const vector<unsigned>& stats = writeAnnexB(bitstreamFile, *aUIter);831 rateStatsAccum(*aUIter, stats);832 }833 }834 #else835 557 if (m_pchReconFile) 836 558 { … … 842 564 rateStatsAccum(au, stats); 843 565 } 844 #endif845 566 } 846 567 … … 888 609 void TAppEncTop::printRateSummary() 889 610 { 890 #if H_MV891 Double time = (Double) m_frameRcvd[0] / m_iFrameRate;892 printf("\n");893 #else894 611 Double time = (Double) m_iFrameRcvd / m_iFrameRate; 895 #endif896 612 printf("Bytes written to file: %u (%.3f kbps)\n", m_totalBytes, 0.008 * m_totalBytes / time); 897 613 #if VERBOSE_RATE … … 900 616 } 901 617 902 #if H_MV903 Void TAppEncTop::xSetDimensionIdAndLength( TComVPS& vps )904 {905 vps.setScalabilityMask( m_scalabilityMask );906 for( Int dim = 0; dim < m_dimIds.size(); dim++ )907 {908 vps.setDimensionIdLen( dim, m_dimensionIdLen[ dim ] );909 for( Int layer = 1; layer < vps.getMaxLayers(); layer++ )910 {911 vps.setDimensionId( layer, dim, m_dimIds[ dim ][ layer ] );912 }913 }914 }915 916 Void TAppEncTop::xSetDirectDependencyFlags( TComVPS& vps )917 {918 for( Int layer = 0; layer < m_numberOfLayers; layer++ )919 {920 if( m_GOPListMvc[layer][MAX_GOP].m_POC == -1 )921 {922 continue;923 }924 for( Int i = 0; i < getGOPSize()+1; i++ )925 {926 GOPEntry ge = ( i < getGOPSize() ) ? m_GOPListMvc[layer][i] : m_GOPListMvc[layer][MAX_GOP];927 for( Int j = 0; j < ge.m_numInterViewRefPics; j++ )928 {929 Int interLayerRef = layer + ge.m_interViewRefs[j];930 vps.setDirectDependencyFlag( layer, interLayerRef, true );931 }932 }933 }934 935 vps.checkVPSExtensionSyntax();936 vps.calcIvRefLayers();937 }938 939 Void TAppEncTop::xSetLayerIds( TComVPS& vps )940 {941 vps.setSplittingFlag ( m_splittingFlag );942 943 Bool nuhLayerIdPresentFlag = !( m_layerIdInNuh.size() == 1 );944 Int maxNuhLayerId = nuhLayerIdPresentFlag ? xGetMax( m_layerIdInNuh ) : ( m_numberOfLayers - 1 ) ;945 946 vps.setMaxNuhLayerId( maxNuhLayerId );947 vps.setVpsNuhLayerIdPresentFlag( nuhLayerIdPresentFlag );948 949 for (Int layer = 0; layer < m_numberOfLayers; layer++ )950 {951 vps.setLayerIdInNuh( layer, nuhLayerIdPresentFlag ? m_layerIdInNuh[ layer ] : layer );952 vps.setLayerIdInVps( vps.getLayerIdInNuh( layer ), layer );953 }954 }955 956 Int TAppEncTop::xGetMax( std::vector<Int>& vec )957 {958 Int maxVec = 0;959 for ( Int i = 0; i < vec.size(); i++)960 maxVec = max( vec[i], maxVec );961 return maxVec;962 }963 #endif964 618 965 619 //! \} -
branches/HTM-DEV-0.1-dev/source/App/TAppEncoder/TAppEncTop.h
r364 r367 59 59 private: 60 60 // class interface 61 #if H_MV62 std::vector<TEncTop*> m_acTEncTopList ; ///< encoder class per layer63 std::vector<TVideoIOYuv*> m_acTVideoIOYuvInputFileList; ///< input YUV file64 std::vector<TVideoIOYuv*> m_acTVideoIOYuvReconFileList; ///< output reconstruction file65 66 std::vector<TComList<TComPicYuv*>*> m_picYuvRec; ///< list of reconstruction YUV files67 68 std::vector<Int> m_frameRcvd; ///< number of received frames69 70 TComPicLists m_ivPicLists; ///< picture buffers of encoder instances71 #else72 61 TEncTop m_cTEncTop; ///< encoder class 73 62 TVideoIOYuv m_cTVideoIOYuvInputFile; ///< input YUV file … … 77 66 78 67 Int m_iFrameRcvd; ///< number of received frames 79 #endif80 68 81 69 UInt m_essentialBytes; … … 89 77 90 78 /// obtain required buffers 91 #if H_MV92 Void xGetBuffer(TComPicYuv*& rpcPicYuvRec, UInt layer);93 #else94 79 Void xGetBuffer(TComPicYuv*& rpcPicYuvRec); 95 #endif96 80 97 81 /// delete allocated buffers … … 99 83 100 84 // file I/O 101 #if H_MV102 Void xWriteOutput(std::ostream& bitstreamFile, Int iNumEncoded, std::list<AccessUnit>& accessUnits, UInt layerId); ///< write bitstream to file103 #else104 85 Void xWriteOutput(std::ostream& bitstreamFile, Int iNumEncoded, const std::list<AccessUnit>& accessUnits); ///< write bitstream to file 105 #endif106 86 void rateStatsAccum(const AccessUnit& au, const std::vector<UInt>& stats); 107 87 void printRateSummary(); 108 88 109 #if H_MV110 Void xSetLayerIds ( TComVPS& vps );111 Void xSetDimensionIdAndLength ( TComVPS& vps );112 Void xSetDirectDependencyFlags ( TComVPS& vps );113 Int xGetMax( std::vector<Int>& vec);114 #endif115 89 public: 116 90 TAppEncTop(); … … 118 92 119 93 Void encode (); ///< main encoding function 120 #if H_MV121 TEncTop* getTEncTopLayer(UInt layer) { return m_acTEncTopList[layer]; } ///< return pointer to encoder class for specific layer122 #if H_3D123 TEncTop* getTEncTopView( Int viewId, Bool isDepth ); ///< return pointer to encoder class for specific view Id and texture or depth124 #endif125 #else126 94 TEncTop& getTEncTop () { return m_cTEncTop; } ///< return encoder class pointer reference 127 #endif128 95 };// END CLASS DEFINITION TAppEncTop 129 96 -
branches/HTM-DEV-0.1-dev/source/App/TAppEncoder/encmain.cpp
r364 r367 57 57 // print information 58 58 fprintf( stdout, "\n" ); 59 #if H_MV60 fprintf( stdout, "3D-HTM Software: Encoder Version [%s] based on HM Version [%s]", NV_VERSION, HM_VERSION );61 #else62 59 fprintf( stdout, "HM software: Encoder Version [%s]", NV_VERSION ); 63 #endif64 60 fprintf( stdout, NVM_ONOS ); 65 61 fprintf( stdout, NVM_COMPILEDBY ); -
branches/HTM-DEV-0.1-dev/source/Lib/TAppCommon/program_options_lite.h
r365 r367 37 37 #include <map> 38 38 39 #if H_MV40 #include <vector>41 #include <errno.h>42 #include <cstring>43 44 #ifdef WIN3245 #define strdup _strdup46 #endif47 #endif48 39 //! \ingroup TAppCommon 49 40 //! \{ … … 145 136 } 146 137 147 #if H_MV148 template<>149 inline void150 Option<char*>::parse(const std::string& arg)151 {152 opt_storage = arg.empty() ? NULL : strdup(arg.c_str()) ;153 }154 155 template<>156 inline void157 Option< std::vector<char*> >::parse(const std::string& arg)158 {159 opt_storage.clear();160 161 char* pcStart = (char*) arg.data();162 char* pcEnd = strtok (pcStart," ");163 164 while (pcEnd != NULL)165 {166 size_t uiStringLength = pcEnd - pcStart;167 char* pcNewStr = (char*) malloc( uiStringLength + 1 );168 strncpy( pcNewStr, pcStart, uiStringLength);169 pcNewStr[uiStringLength] = '\0';170 pcStart = pcEnd+1;171 pcEnd = strtok (NULL, " ,.-");172 opt_storage.push_back( pcNewStr );173 }174 }175 176 177 template<>178 inline void179 Option< std::vector<double> >::parse(const std::string& arg)180 {181 char* pcNextStart = (char*) arg.data();182 char* pcEnd = pcNextStart + arg.length();183 184 char* pcOldStart = 0;185 186 size_t iIdx = 0;187 188 while (pcNextStart < pcEnd)189 {190 errno = 0;191 192 if ( iIdx < opt_storage.size() )193 {194 opt_storage[iIdx] = strtod(pcNextStart, &pcNextStart);195 }196 else197 {198 opt_storage.push_back( strtod(pcNextStart, &pcNextStart)) ;199 }200 iIdx++;201 202 if ( errno == ERANGE || (pcNextStart == pcOldStart) )203 {204 std::cerr << "Error Parsing Doubles: `" << arg << "'" << std::endl;205 exit(EXIT_FAILURE);206 };207 while( (pcNextStart < pcEnd) && ( *pcNextStart == ' ' || *pcNextStart == '\t' || *pcNextStart == '\r' ) ) pcNextStart++;208 pcOldStart = pcNextStart;209 210 }211 }212 213 template<>214 inline void215 Option< std::vector<int> >::parse(const std::string& arg)216 {217 opt_storage.clear();218 219 220 char* pcNextStart = (char*) arg.data();221 char* pcEnd = pcNextStart + arg.length();222 223 char* pcOldStart = 0;224 225 size_t iIdx = 0;226 227 228 while (pcNextStart < pcEnd)229 {230 231 if ( iIdx < opt_storage.size() )232 {233 opt_storage[iIdx] = (int) strtol(pcNextStart, &pcNextStart,10);234 }235 else236 {237 opt_storage.push_back( (int) strtol(pcNextStart, &pcNextStart,10)) ;238 }239 iIdx++;240 if ( errno == ERANGE || (pcNextStart == pcOldStart) )241 {242 std::cerr << "Error Parsing Integers: `" << arg << "'" << std::endl;243 exit(EXIT_FAILURE);244 };245 while( (pcNextStart < pcEnd) && ( *pcNextStart == ' ' || *pcNextStart == '\t' || *pcNextStart == '\r' ) ) pcNextStart++;246 pcOldStart = pcNextStart;247 }248 }249 250 251 template<>252 inline void253 Option< std::vector<bool> >::parse(const std::string& arg)254 {255 char* pcNextStart = (char*) arg.data();256 char* pcEnd = pcNextStart + arg.length();257 258 char* pcOldStart = 0;259 260 size_t iIdx = 0;261 262 while (pcNextStart < pcEnd)263 {264 if ( iIdx < opt_storage.size() )265 {266 opt_storage[iIdx] = (strtol(pcNextStart, &pcNextStart,10) != 0);267 }268 else269 {270 opt_storage.push_back(strtol(pcNextStart, &pcNextStart,10) != 0) ;271 }272 iIdx++;273 274 if ( errno == ERANGE || (pcNextStart == pcOldStart) )275 {276 std::cerr << "Error Parsing Bools: `" << arg << "'" << std::endl;277 exit(EXIT_FAILURE);278 };279 while( (pcNextStart < pcEnd) && ( *pcNextStart == ' ' || *pcNextStart == '\t' || *pcNextStart == '\r' ) ) pcNextStart++;280 pcOldStart = pcNextStart;281 }282 }283 #endif284 138 /** Option class for argument handling using a user provided function */ 285 139 struct OptionFunc : public OptionBase … … 356 210 } 357 211 358 #if H_MV359 template<typename T>360 OptionSpecific&361 operator()(const std::string& name, std::vector<T>& storage, T default_val, unsigned uiMaxNum, const std::string& desc = "" )362 {363 std::string cNameBuffer;364 std::string cDescriptionBuffer;365 366 cNameBuffer .resize( name.size() + 10 );367 cDescriptionBuffer.resize( desc.size() + 10 );368 369 storage.resize(uiMaxNum);370 for ( unsigned int uiK = 0; uiK < uiMaxNum; uiK++ )371 {372 // isn't there are sprintf function for string??373 sprintf((char*) cNameBuffer.c_str() ,name.c_str(),uiK,uiK);374 sprintf((char*) cDescriptionBuffer.c_str(),desc.c_str(),uiK,uiK);375 376 parent.addOption(new Option<T>( cNameBuffer, (storage[uiK]), default_val, cDescriptionBuffer ));377 }378 379 return *this;380 }381 #endif382 212 /** 383 213 * Add option described by name to the parent Options list, -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/CommonDef.h
r364 r367 56 56 // ==================================================================================================================== 57 57 58 #if H_MV59 #define NV_VERSION "0.1" ///< Current software version60 #define HM_VERSION "10.1" ///<61 #else62 58 #define NV_VERSION "10.1" ///< Current software version 63 #endif64 59 65 60 // ==================================================================================================================== … … 157 152 } 158 153 159 #if H_MV160 161 #define AOF( exp ) \162 { \163 if( !( exp ) ) \164 { \165 assert( 0 ); \166 } \167 }168 169 #endif170 154 171 155 // ==================================================================================================================== -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/NAL.h
r364 r367 47 47 NalUnitType m_nalUnitType; ///< nal_unit_type 48 48 UInt m_temporalId; ///< temporal_id 49 #if H_MV50 Int m_layerId; ///< layer id51 #else52 49 UInt m_reservedZero6Bits; ///< reserved_zero_6bits 53 #endif54 50 55 51 /** construct an NALunit structure with given header values. */ … … 57 53 NalUnitType nalUnitType, 58 54 Int temporalId = 0, 59 #if H_MV60 Int layerId = 0)61 #else62 55 Int reservedZero6Bits = 0) 63 #endif64 56 :m_nalUnitType (nalUnitType) 65 57 ,m_temporalId (temporalId) 66 #if H_MV67 ,m_layerId (layerId)68 #else69 58 ,m_reservedZero6Bits(reservedZero6Bits) 70 #endif71 59 {} 72 60 -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/TComPic.cpp
r365 r367 64 64 , m_pNDBFilterYuvTmp (NULL) 65 65 , m_bCheckLTMSB (false) 66 #if H_MV67 , m_layerId (0)68 , m_viewId (0)69 #if H_3D70 , m_isDepth (false)71 #endif72 #endif73 66 { 74 67 m_apcPicYuv[0] = NULL; … … 471 464 472 465 } 473 #if H_MV474 Void TComPic::print( Bool legend )475 {476 if ( legend )477 std::cout << "LId" << "\t" << "POC" << "\t" << "Rec" << "\t" << "Ref" << "\t" << "LT" << std::endl;478 else479 std::cout << getLayerId() << "\t" << getPOC()<< "\t" << getReconMark() << "\t" << getSlice(0)->isReferenced() << "\t" << getIsLongTerm() << std::endl;480 }481 #endif482 466 483 467 -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/TComPic.h
r364 r367 86 86 SEIMessages m_SEIs; ///< Any SEI messages that have been received. If !NULL we own the object. 87 87 88 #if H_MV89 Int m_layerId;90 Int m_viewId;91 #if H_3D92 Bool m_isDepth;93 #endif94 #endif95 88 public: 96 89 TComPic(); … … 105 98 Void setTLayer( UInt uiTLayer ) { m_uiTLayer = uiTLayer; } 106 99 107 #if H_MV108 Void setLayerId ( Int layerId ) { m_layerId = layerId; }109 Int getLayerId () { return m_layerId; }110 Void setViewId ( Int viewId ) { m_viewId = viewId; }111 Int getViewId () { return m_viewId; }112 #if H_3D113 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; }114 Bool getIsDepth () { return m_isDepth; }115 #endif116 #endif117 100 Bool getUsedByCurr() { return m_bUsedByCurr; } 118 101 Void setUsedByCurr( Bool bUsed ) { m_bUsedByCurr = bUsed; } … … 181 164 std::vector<TComDataCU*>& getOneSliceCUDataForNDBFilter (Int sliceID) { return m_vSliceCUDataLink[sliceID];} 182 165 183 #if H_MV184 Void print( Bool legend );185 #endif186 166 /** transfer ownership of seis to this picture */ 187 167 void setSEIs(SEIMessages& seis) { m_SEIs = seis; } … … 199 179 };// END CLASS DEFINITION TComPic 200 180 201 #if H_MV202 class TComPicLists203 {204 private:205 TComList<TComList<TComPic*>*> m_lists;206 public:207 208 Void push_back( TComList<TComPic*>* list ) { m_lists.push_back( list ); }209 Int size () { return (Int) m_lists.size (); }210 211 TComPic* getPic( Int layerIdInNuh, Int poc )212 {213 TComPic* pcPic = NULL;214 for(TComList<TComList<TComPic*>*>::iterator itL = m_lists.begin(); ( itL != m_lists.end() && pcPic == NULL ); itL++)215 {216 for(TComList<TComPic*>::iterator itP=(*itL)->begin(); ( itP!=(*itL)->end() && pcPic == NULL ); itP++)217 {218 if ( ( (*itP)->getPOC() == poc ) && ( (*itP)->getLayerId() == layerIdInNuh ) )219 {220 pcPic = *itP ;221 }222 }223 }224 return pcPic;225 }226 227 Void print( )228 {229 Bool first = true;230 for(TComList<TComList<TComPic*>*>::iterator itL = m_lists.begin(); ( itL != m_lists.end() ); itL++)231 {232 for(TComList<TComPic*>::iterator itP=(*itL)->begin(); ( itP!=(*itL)->end() ); itP++)233 {234 if ( first )235 {236 (*itP)->print( true );237 first = false;238 }239 (*itP)->print( false );240 }241 }242 }243 244 245 }; // END CLASS DEFINITION TComPicLists246 247 #endif248 181 //! \} 249 182 -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/TComSlice.cpp
r366 r367 107 107 , m_temporalLayerNonReferenceFlag ( false ) 108 108 , m_enableTMVPFlag ( true ) 109 #if H_MV110 , m_layerId (0)111 , m_viewId (0)112 #if H_3D113 , m_isDepth (false)114 #endif115 #endif116 109 { 117 110 #if L0034_COMBINED_LIST_CLEANUP … … 145 138 m_aiRefPOCList [0][iNumCount] = 0; 146 139 m_aiRefPOCList [1][iNumCount] = 0; 147 #if H_MV148 m_aiRefLayerIdList[0][iNumCount] = 0;149 m_aiRefLayerIdList[1][iNumCount] = 0;150 #endif151 140 } 152 141 resetWpScaling(); … … 320 309 { 321 310 m_aiRefPOCList[iDir][iNumRefIdx] = m_apcRefPicList[iDir][iNumRefIdx]->getPOC(); 322 #if H_MV323 m_aiRefLayerIdList[iDir][iNumRefIdx] = m_apcRefPicList[iDir][iNumRefIdx]->getLayerId();324 #endif325 311 } 326 312 } … … 368 354 for ( Int iRefIdxLC = 0; iRefIdxLC < m_aiNumRefIdx[REF_PIC_LIST_C]; iRefIdxLC++ ) 369 355 { 370 #if H_MV371 if ( m_apcRefPicList[REF_PIC_LIST_0][iNumRefIdx]->getPOC() == m_apcRefPicList[m_eListIdFromIdxOfLC[iRefIdxLC]][m_iRefIdxFromIdxOfLC[iRefIdxLC]]->getPOC() &&372 m_apcRefPicList[REF_PIC_LIST_0][iNumRefIdx]->getLayerId() == m_apcRefPicList[m_eListIdFromIdxOfLC[iRefIdxLC]][m_iRefIdxFromIdxOfLC[iRefIdxLC]]->getLayerId() )373 #else374 356 if ( m_apcRefPicList[REF_PIC_LIST_0][iNumRefIdx]->getPOC() == m_apcRefPicList[m_eListIdFromIdxOfLC[iRefIdxLC]][m_iRefIdxFromIdxOfLC[iRefIdxLC]]->getPOC() ) 375 #endif376 357 { 377 358 m_iRefIdxOfL1FromRefIdxOfL0[iNumRefIdx] = m_iRefIdxFromIdxOfLC[iRefIdxLC]; … … 395 376 for ( Int iRefIdxLC = 0; iRefIdxLC < m_aiNumRefIdx[REF_PIC_LIST_C]; iRefIdxLC++ ) 396 377 { 397 #if H_MV398 if ( m_apcRefPicList[REF_PIC_LIST_1][iNumRefIdx]->getPOC() == m_apcRefPicList[m_eListIdFromIdxOfLC[iRefIdxLC]][m_iRefIdxFromIdxOfLC[iRefIdxLC]]->getPOC() &&399 m_apcRefPicList[REF_PIC_LIST_1][iNumRefIdx]->getLayerId() == m_apcRefPicList[m_eListIdFromIdxOfLC[iRefIdxLC]][m_iRefIdxFromIdxOfLC[iRefIdxLC]]->getLayerId() )400 #else401 378 if ( m_apcRefPicList[REF_PIC_LIST_1][iNumRefIdx]->getPOC() == m_apcRefPicList[m_eListIdFromIdxOfLC[iRefIdxLC]][m_iRefIdxFromIdxOfLC[iRefIdxLC]]->getPOC() ) 402 #endif403 379 { 404 380 m_iRefIdxOfL0FromRefIdxOfL1[iNumRefIdx] = m_iRefIdxFromIdxOfLC[iRefIdxLC]; … … 420 396 #endif 421 397 422 #if H_MV423 Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& refPicSetInterLayer , Bool checkNumPocTotalCurr)424 #else425 398 #if FIX1071 426 399 Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic, Bool checkNumPocTotalCurr ) … … 428 401 Void TComSlice::setRefPicList( TComList<TComPic*>& rcListPic ) 429 402 #endif 430 #endif431 403 { 432 404 #if FIX1071 … … 442 414 } 443 415 444 #if !H_MV445 416 m_aiNumRefIdx[0] = getNumRefIdx(REF_PIC_LIST_0); 446 417 m_aiNumRefIdx[1] = getNumRefIdx(REF_PIC_LIST_1); 447 #endif448 418 } 449 419 … … 455 425 UInt NumPocStCurr1 = 0; 456 426 UInt NumPocLtCurr = 0; 457 #if H_MV458 Int numDirectRefLayers = getVPS()->getNumDirectRefLayers( getLayerIdInVps() );459 assert( numDirectRefLayers == refPicSetInterLayer.size() );460 #endif461 427 Int i; 462 428 … … 507 473 TComPic* rpsCurrList0[MAX_NUM_REF+1]; 508 474 TComPic* rpsCurrList1[MAX_NUM_REF+1]; 509 #if H_MV510 Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr + numDirectRefLayers;511 assert( numPocTotalCurr == getNumRpsCurrTempList() );512 #else513 475 Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr; 514 #endif515 476 #if FIX1071 516 477 if (checkNumPocTotalCurr) … … 552 513 rpsCurrList0[cIdx] = RefPicSetLtCurr[i]; 553 514 } 554 #if H_MV555 for ( i=0; i<numDirectRefLayers; i++, cIdx++)556 {557 if( cIdx <= MAX_NUM_REF )558 {559 rpsCurrList0[cIdx] = refPicSetInterLayer[i];560 }561 }562 #endif563 515 564 516 if (m_eSliceType==B_SLICE) … … 577 529 rpsCurrList1[cIdx] = RefPicSetLtCurr[i]; 578 530 } 579 #if H_MV580 for ( i=0; i<numDirectRefLayers; i++, cIdx++)581 {582 if( cIdx <= MAX_NUM_REF )583 {584 rpsCurrList1[cIdx] = refPicSetInterLayer[i];585 }586 }587 #endif588 531 } 589 532 … … 627 570 } 628 571 } 629 #if H_MV630 numRpsCurrTempList = numRpsCurrTempList + getVPS()->getNumDirectRefLayers( getLayerIdInVps() );631 #endif632 572 return numRpsCurrTempList; 633 573 } … … 792 732 m_iPOC = pSrc->m_iPOC; 793 733 m_eNalUnitType = pSrc->m_eNalUnitType; 794 #if H_MV795 m_layerId = pSrc->m_layerId;796 #endif797 734 m_eSliceType = pSrc->m_eSliceType; 798 735 m_iSliceQp = pSrc->m_iSliceQp; … … 847 784 m_apcRefPicList[i][j] = pSrc->m_apcRefPicList[i][j]; 848 785 m_aiRefPOCList[i][j] = pSrc->m_aiRefPOCList[i][j]; 849 #if H_MV850 m_aiRefLayerIdList[i][j] = pSrc->m_aiRefLayerIdList[i][j];851 #endif852 786 } 853 787 } … … 865 799 866 800 // access channel 867 #if H_MV868 m_pcVPS = pSrc->m_pcVPS;869 #endif870 801 m_pcSPS = pSrc->m_pcSPS; 871 802 m_pcPPS = pSrc->m_pcPPS; … … 1381 1312 , m_bTemporalIdNestingFlag (false) 1382 1313 , m_numHrdParameters ( 0) 1383 #if H_MV1384 , m_maxNuhLayerId ( 0)1385 #else1386 1314 , m_maxNuhReservedZeroLayerId ( 0) 1387 #endif1388 1315 , m_hrdParameters (NULL) 1389 1316 , m_hrdOpSetIdx (NULL) … … 1400 1327 m_uiMaxLatencyIncrease[i] = 0; 1401 1328 } 1402 #if H_MV1403 m_avcBaseLayerFlag = false;1404 m_splittingFlag = false;1405 1406 for( Int i = 0; i < MAX_NUM_SCALABILITY_TYPES; i++ )1407 {1408 m_scalabilityMask[i] = false;1409 m_dimensionIdLen [i] = -1;1410 }1411 1412 m_vpsNuhLayerIdPresentFlag = false;1413 m_numOutputLayerSets = 0;1414 1415 for( Int i = 0; i < MAX_VPS_OP_SETS_PLUS1; i++ )1416 {1417 m_vpsProfilePresentFlag [i] = false;1418 m_profileLayerSetRefMinus1[i] = 0;1419 m_outputLayerSetIdx [i] = 0;1420 for( Int j = 0; j < MAX_VPS_NUH_LAYER_ID_PLUS1; j++ )1421 {1422 m_outputLayerFlag[i][j] = false;1423 }1424 }1425 1426 for( Int i = 0; i < MAX_NUM_LAYER_IDS; i++ )1427 {1428 m_layerIdInVps[i] = (i == 0 ) ? 0 : -1;1429 }1430 1431 for( Int i = 0; i < MAX_NUM_LAYERS; i++ )1432 {1433 m_layerIdInNuh [i] = ( i == 0 ) ? 0 : -1;1434 m_numDirectRefLayers[i] = 0;1435 1436 for( Int j = 0; j < MAX_NUM_LAYERS; j++ )1437 {1438 m_directDependencyFlag[i][j] = false;1439 m_refLayerId[i][j] = -1;1440 }1441 1442 for( Int j = 0; j < MAX_NUM_SCALABILITY_TYPES; j++ )1443 {1444 m_dimensionId[i][j] = 0;1445 }1446 1447 }1448 #endif1449 1329 } 1450 1330 … … 1456 1336 } 1457 1337 1458 #if H_MV1459 1460 Bool TComVPS::checkVPSExtensionSyntax()1461 {1462 // check splitting flag constraint1463 if ( getSplittingFlag() )1464 {1465 // Derive dimBitOffset[j]1466 Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1];1467 Int numScalabilityTypes = getNumScalabilityTypes();1468 dimBitOffset[0] = 0;1469 1470 for (Int type = 1; type <= numScalabilityTypes; type++ )1471 {1472 dimBitOffset[ type ] = 0;1473 for (Int dimIdx = 0; dimIdx <= type - 1; dimIdx++)1474 dimBitOffset[ type ] += ( getDimensionIdLen( dimIdx ) );1475 }1476 1477 for (Int type = 0; type < getNumScalabilityTypes(); type++ )1478 {1479 for( Int layer = 1; layer < getMaxLayers(); layer++ )1480 {1481 assert( getDimensionId( layer, type ) == ( ( getLayerIdInNuh( layer ) & ( (1 << dimBitOffset[ type + 1 ] ) - 1) ) >> dimBitOffset[ type ] ) );1482 };1483 };1484 }1485 1486 for( Int layer = 1; layer < getMaxLayers(); layer++ )1487 {1488 // check layer_id_in_nuh constraint1489 assert( getLayerIdInNuh( layer ) > getLayerIdInNuh( layer -1 ) );1490 }1491 return true;1492 }1493 1494 Int TComVPS::getNumScalabilityTypes()1495 {1496 return scalTypeToScalIdx( ScalabilityType(MAX_NUM_SCALABILITY_TYPES) );1497 }1498 1499 Int TComVPS::scalTypeToScalIdx( ScalabilityType scalType )1500 {1501 assert( scalType >= 0 && scalType <= MAX_NUM_SCALABILITY_TYPES );1502 assert( scalType == MAX_NUM_SCALABILITY_TYPES || getScalabilityMask( scalType ) );1503 1504 Int scalIdx = 0;1505 for( Int curScalType = 0; curScalType < scalType; curScalType++ )1506 {1507 scalIdx += ( getScalabilityMask( curScalType ) ? 1 : 0 );1508 }1509 1510 return scalIdx;1511 }1512 1513 1514 1515 Void TComVPS::setScalabilityMask( UInt val )1516 {1517 for ( Int scalType = 0; scalType < MAX_NUM_SCALABILITY_TYPES; scalType++ )1518 setScalabilityMask( scalType, ( val & (1 << scalType ) ) == 1 );1519 }1520 1521 Void TComVPS::calcIvRefLayers()1522 {1523 for( Int i = 1; i <= getMaxLayers(); i++ )1524 {1525 m_numDirectRefLayers[ i ] = 0;1526 for( Int j = 0 ; j < i; j++ )1527 if( m_directDependencyFlag[ i ][ j ])1528 m_refLayerId[ i ][ m_numDirectRefLayers[ i ]++ ] = m_layerIdInNuh[ j ];1529 }1530 }1531 1532 Int TComVPS::getRefLayerId( Int layerIdInVps, Int idx )1533 {1534 assert( idx >= 0 && idx < m_numDirectRefLayers[layerIdInVps] );1535 Int layerIdInNuh = m_refLayerId[ layerIdInVps ][ idx ];1536 assert ( layerIdInNuh >= 0 );1537 return layerIdInNuh;1538 }1539 1540 Int TComVPS::getScalabilityId( Int layerIdInVps, ScalabilityType scalType )1541 {1542 return ( ( layerIdInVps != 0 )&& getScalabilityMask( scalType ) ) ? getDimensionId( layerIdInVps, scalTypeToScalIdx( scalType ) ) : 0;1543 }1544 #endif1545 1338 // ------------------------------------------------------------------------------------------------ 1546 1339 // Sequence parameter set (SPS) … … 1589 1382 , m_vuiParametersPresentFlag (false) 1590 1383 , m_vuiParameters () 1591 #if H_MV1592 , m_interViewMvVertConstraintFlag (false)1593 #endif1594 1384 { 1595 1385 for ( Int i = 0; i < MAX_TLAYER; i++ ) … … 2055 1845 } 2056 1846 2057 #if H_MV2058 Void TComSlice::createAndApplyIvReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer )2059 {2060 refPicSetInterLayer.clear();2061 2062 for( Int i = 0; i < getVPS()->getNumDirectRefLayers( getLayerIdInVps() ); i++ )2063 {2064 Int layerIdRef = getVPS()->getRefLayerId( getLayerIdInVps(), i );2065 TComPic* picRef = ivPicLists->getPic( layerIdRef, getPOC() ) ;2066 assert ( picRef != 0 );2067 2068 picRef->getPicYuvRec()->extendPicBorder();2069 picRef->setIsLongTerm( true );2070 picRef->getSlice(0)->setReferenced( true );2071 2072 refPicSetInterLayer.push_back( picRef );2073 }2074 }2075 2076 Void TComSlice::markIvRefPicsAsShortTerm( std::vector<TComPic*> refPicSetInterLayer )2077 {2078 // Mark as shortterm2079 for ( Int i = 0; i < refPicSetInterLayer.size(); i++ )2080 {2081 refPicSetInterLayer[i]->setIsLongTerm( false );2082 }2083 }2084 2085 Void TComSlice::markIvRefPicsAsUnused( TComPicLists* ivPicLists, std::vector<Int> targetDecLayerIdSet, TComVPS* vps, Int curLayerId, Int curPoc )2086 {2087 // Fill targetDecLayerIdSet with all layers if empty.2088 if (targetDecLayerIdSet.size() == 0 )2089 {2090 for ( Int layerIdInVps = 0; layerIdInVps < vps->getMaxLayers(); layerIdInVps++ )2091 {2092 targetDecLayerIdSet.push_back( vps->getLayerIdInNuh( layerIdInVps ) );2093 }2094 }2095 2096 Int numTargetDecLayers = (Int) targetDecLayerIdSet.size();2097 Int latestDecIdx;2098 for ( latestDecIdx = 0; latestDecIdx < numTargetDecLayers; latestDecIdx++)2099 {2100 if ( targetDecLayerIdSet[ latestDecIdx ] == curLayerId )2101 break;2102 }2103 2104 for( Int i = 0; i <= latestDecIdx; i++ )2105 {2106 if ( vps->nuhLayerIdIncluded( targetDecLayerIdSet[ i ] ) )2107 {2108 TComPic* pcPic = ivPicLists->getPic( targetDecLayerIdSet[ i ], curPoc );2109 if( pcPic->getSlice(0)->isReferenced() && pcPic->getSlice(0)->getTemporalLayerNonReferenceFlag() )2110 {2111 Bool remainingInterLayerReferencesFlag = false;2112 for( Int j = latestDecIdx + 1; j < numTargetDecLayers; j++ )2113 {2114 TComVPS* vpsSlice = pcPic->getSlice(0)->getVPS();2115 if ( vps->nuhLayerIdIncluded( targetDecLayerIdSet[ j ] ) )2116 {2117 Int targetDecLayerIdinVPS = vpsSlice->getLayerIdInVps( targetDecLayerIdSet[ j ] );2118 for( Int k = 0; k < vpsSlice->getNumDirectRefLayers( targetDecLayerIdinVPS ); k++ )2119 if ( targetDecLayerIdSet[ i ] == vpsSlice->getRefLayerId( targetDecLayerIdinVPS, k ) )2120 remainingInterLayerReferencesFlag = true;2121 }2122 }2123 if( !remainingInterLayerReferencesFlag )2124 pcPic->getSlice(0)->setReferenced( false );2125 }2126 }2127 }2128 }2129 2130 Void TComSlice::xPrintRefPicList()2131 {2132 for ( Int li = 0; li < 2; li++)2133 {2134 std::cout << std::endl << "RefPicListL" << li << ":" << std::endl;2135 for (Int rIdx = 0; rIdx <= (m_aiNumRefIdx[li]-1); rIdx ++)2136 {2137 if (rIdx == 0 && li == 0) m_apcRefPicList[li][rIdx]->print( true );2138 2139 m_apcRefPicList[li][rIdx]->print( false );2140 }2141 }2142 }2143 #endif2144 1847 /** get scaling matrix from RefMatrixID 2145 1848 * \param sizeId size index … … 2364 2067 { 2365 2068 Int spsId = pps->getSPSId(); 2366 #if H_MV2367 // active parameter sets per layer should be used here2368 #else2369 2069 if (!isIRAP && (spsId != m_activeSPSId)) 2370 2070 { … … 2372 2072 return false; 2373 2073 } 2374 #endif2375 2074 TComSPS *sps = m_spsMap.getPS(spsId); 2376 2075 if (sps) … … 2427 2126 } 2428 2127 2429 #if H_MV2430 Void TComPTL::copyLevelFrom( TComPTL* source )2431 {2432 getGeneralPTL()->setLevelIdc( source->getGeneralPTL()->getLevelIdc() );2433 for( Int subLayer = 0; subLayer < 6; subLayer++ )2434 {2435 setSubLayerLevelPresentFlag( subLayer, source->getSubLayerLevelPresentFlag( subLayer ) );2436 getSubLayerPTL( subLayer )->setLevelIdc( source->getSubLayerPTL( subLayer )->getLevelIdc() );2437 }2438 }2439 #endif2440 2128 #if SIGNAL_BITRATE_PICRATE_IN_VPS 2441 2129 TComBitRatePicRateInfo::TComBitRatePicRateInfo() -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/TComSlice.h
r366 r367 51 51 class TComPic; 52 52 class TComTrQuant; 53 #if H_MV54 class TComPicLists;55 #endif56 53 // ==================================================================================================================== 57 54 // Constants … … 248 245 ProfileTierLevel* getGeneralPTL() { return &m_generalPTL; } 249 246 ProfileTierLevel* getSubLayerPTL(Int i) { return &m_subLayerPTL[i]; } 250 #if H_MV251 Void copyLevelFrom( TComPTL* source );252 #endif253 247 }; 254 248 /// VPS class … … 486 480 487 481 UInt m_numHrdParameters; 488 #if H_MV489 UInt m_maxNuhLayerId;490 #else491 482 UInt m_maxNuhReservedZeroLayerId; 492 #endif493 483 TComHRD* m_hrdParameters; 494 484 UInt* m_hrdOpSetIdx; 495 485 Bool* m_cprmsPresentFlag; 496 486 UInt m_numOpSets; 497 #if H_MV498 Bool m_layerIdIncludedFlag[MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_LAYER_ID_PLUS1];499 #else500 487 Bool m_layerIdIncludedFlag[MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1]; 501 #endif 502 503 #if H_MV 504 TComPTL m_pcPTL[MAX_VPS_OP_SETS_PLUS1]; 505 #else 488 506 489 TComPTL m_pcPTL; 507 #endif508 490 #if SIGNAL_BITRATE_PICRATE_IN_VPS 509 491 TComBitRatePicRateInfo m_bitRatePicRateInfo; … … 513 495 #endif 514 496 515 #if H_MV516 Bool m_avcBaseLayerFlag;517 Bool m_splittingFlag;518 Bool m_scalabilityMask [MAX_NUM_SCALABILITY_TYPES];519 Int m_dimensionIdLen [MAX_NUM_SCALABILITY_TYPES];520 Bool m_vpsNuhLayerIdPresentFlag;521 Int m_layerIdInNuh [MAX_NUM_LAYER_IDS];522 Int m_layerIdInVps [MAX_NUM_LAYERS ];523 Int m_dimensionId [MAX_NUM_LAYER_IDS][MAX_NUM_SCALABILITY_TYPES];524 525 526 Bool m_vpsProfilePresentFlag [MAX_VPS_OP_SETS_PLUS1];527 Int m_profileLayerSetRefMinus1 [MAX_VPS_OP_SETS_PLUS1];528 Int m_numOutputLayerSets;529 Int m_outputLayerSetIdx [MAX_VPS_OP_SETS_PLUS1];530 Bool m_outputLayerFlag [MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_LAYER_ID_PLUS1];531 Bool m_directDependencyFlag [MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS];532 533 Int m_numDirectRefLayers [ MAX_NUM_LAYERS ];534 Int m_refLayerId [ MAX_NUM_LAYERS ][MAX_NUM_LAYERS];535 536 #endif537 497 public: 538 498 TComVPS(); … … 576 536 Void setNumHrdParameters(UInt v) { m_numHrdParameters = v; } 577 537 578 #if H_MV579 UInt getMaxNuhLayerId() { return m_maxNuhLayerId; }580 Void setMaxNuhLayerId(UInt v) { m_maxNuhLayerId = v; }581 #else582 538 UInt getMaxNuhReservedZeroLayerId() { return m_maxNuhReservedZeroLayerId; } 583 539 Void setMaxNuhReservedZeroLayerId(UInt v) { m_maxNuhReservedZeroLayerId = v; } 584 #endif585 540 586 541 UInt getMaxOpSets() { return m_numOpSets; } … … 589 544 Void setLayerIdIncludedFlag(Bool v, UInt opsIdx, UInt id) { m_layerIdIncludedFlag[opsIdx][id] = v; } 590 545 591 #if H_MV592 TComPTL* getPTL( Int layerSet = 0 ) { return &m_pcPTL[layerSet]; }593 #else594 546 TComPTL* getPTL() { return &m_pcPTL; } 595 #endif596 547 #if SIGNAL_BITRATE_PICRATE_IN_VPS 597 548 TComBitRatePicRateInfo *getBitratePicrateInfo() { return &m_bitRatePicRateInfo; } … … 599 550 #if L0043_TIMING_INFO 600 551 TimingInfo* getTimingInfo() { return &m_timingInfo; } 601 #endif602 #if H_MV603 Void setAvcBaseLayerFlag( Bool val ) { m_avcBaseLayerFlag = val; }604 Bool getAvcBaseLayerFlag() { return m_avcBaseLayerFlag; }605 606 Void setSplittingFlag( Bool val ) { m_splittingFlag = val; }607 Bool getSplittingFlag() { return m_splittingFlag; }608 609 Void setScalabilityMask( UInt val );610 611 Void setScalabilityMask( Int scalType, Bool val ) { m_scalabilityMask[scalType] = val; }612 Bool getScalabilityMask( Int scalType ) { return m_scalabilityMask[scalType]; }613 614 Int getNumScalabilityTypes( );615 616 Void setDimensionIdLen( Int sIdx, Int val ) { m_dimensionIdLen[sIdx] = val; }617 Int getDimensionIdLen( Int sIdx ) { assert( m_dimensionIdLen[sIdx] > 0) ; return m_dimensionIdLen[sIdx]; }618 619 Void setVpsNuhLayerIdPresentFlag( Bool val ) { m_vpsNuhLayerIdPresentFlag = val; }620 Bool getVpsNuhLayerIdPresentFlag() { return m_vpsNuhLayerIdPresentFlag; }621 622 Void setLayerIdInNuh( Int layerIdInVps, Int val ) { m_layerIdInNuh[layerIdInVps] = val; }623 Int getLayerIdInNuh( Int layerIdInVps ) { assert( m_layerIdInNuh[layerIdInVps] >= 0 ); return m_layerIdInNuh[layerIdInVps]; }624 625 Void setLayerIdInVps( Int layerIdInNuh, Int val ) { m_layerIdInVps[layerIdInNuh] = val; }626 Int getLayerIdInVps( Int layerIdInNuh ) { assert( m_layerIdInVps[layerIdInNuh] >= 0 ); return m_layerIdInVps[layerIdInNuh]; }627 628 Bool nuhLayerIdIncluded( Int layerIdinNuh ) { return ( m_layerIdInVps[ layerIdinNuh ] > 0 ); }629 630 Void setDimensionId( Int layerIdInVps, Int scalIdx, Int val ) { m_dimensionId[layerIdInVps][scalIdx] = val; }631 Int getDimensionId( Int layerIdInVps, Int scalIdx ) { return m_dimensionId[layerIdInVps][scalIdx]; }632 633 Int getScalabilityId ( Int layerIdInVps, ScalabilityType scalType );634 635 Int getViewId ( Int layerIdInVps ) { return getScalabilityId( layerIdInVps, VIEW_ID ); }636 #if H_3D637 Int getDepthId ( Int layerIdInVps ) { return getScalabilityId( layerIdInVps, DEPTH_ID ); }638 #endif639 640 641 Void setVpsProfilePresentFlag( Int layerSet, Bool val ) { m_vpsProfilePresentFlag[layerSet] = val; }642 Bool getVpsProfilePresentFlag( Int layerSet ) { return m_vpsProfilePresentFlag[layerSet]; }643 644 Void setProfileLayerSetRefMinus1( Int layerSet, Int val ) { m_profileLayerSetRefMinus1[layerSet] = val; }645 Bool getProfileLayerSetRefMinus1( Int layerSet ) { return m_profileLayerSetRefMinus1[layerSet]; }646 647 Void setNumOutputLayerSets( Int val ) { m_numOutputLayerSets = val; }648 Int getNumOutputLayerSets() { return m_numOutputLayerSets; }649 650 Void setOutputLayerSetIdx( Int layerSet, Int val ) { m_outputLayerSetIdx[layerSet] = val; }651 Int getOutputLayerSetIdx( Int layerSet ) { return m_outputLayerSetIdx[layerSet]; }652 653 Void setOutputLayerFlag( Int layerSet, Int layer, Bool val ) { m_outputLayerFlag[layerSet][layer] = val; }654 Bool getOutputLayerFlag( Int layerSet, Int layer ) { return m_outputLayerFlag[layerSet][layer]; }655 656 Void setDirectDependencyFlag( Int layerHigh, Int layerLow, Bool val ) { m_directDependencyFlag[layerHigh][layerLow] = val; }657 Bool getDirectDependencyFlag( Int layerHigh, Int layerLow ) { return m_directDependencyFlag[layerHigh][layerLow]; }658 659 Void calcIvRefLayers();660 661 Int getNumDirectRefLayers( Int layerIdInVps ) { return m_numDirectRefLayers[ layerIdInVps ]; };662 Int getRefLayerId ( Int layerIdInVps, Int idx );;663 664 Bool checkVPSExtensionSyntax();665 Int scalTypeToScalIdx ( ScalabilityType scalType );666 552 #endif 667 553 }; … … 967 853 static const Int m_winUnitY[MAX_CHROMA_FORMAT_IDC+1]; 968 854 TComPTL m_pcPTL; 969 #if H_MV970 Bool m_interViewMvVertConstraintFlag;971 #endif972 855 public: 973 856 TComSPS(); … … 1100 983 1101 984 TComPTL* getPTL() { return &m_pcPTL; } 1102 #if H_MV1103 Void setInterViewMvVertConstraintFlag(Bool val) { m_interViewMvVertConstraintFlag = val; }1104 Bool getInterViewMvVertConstraintFlag() { return m_interViewMvVertConstraintFlag;}1105 #endif1106 985 }; 1107 986 … … 1130 1009 Void setRefPicSetIdxL1(UInt idx, UInt refPicSetIdx) { m_RefPicSetIdxL1[idx] = refPicSetIdx; } 1131 1010 UInt getRefPicSetIdxL1(UInt idx) { return m_RefPicSetIdxL1[idx]; } 1132 #if H_MV1133 // Why not an listIdx for all members, would avoid code duplication??1134 Void setRefPicSetIdxL(UInt li, UInt idx, UInt refPicSetIdx) {( li==0 ? m_RefPicSetIdxL0[idx] : m_RefPicSetIdxL1[idx] ) = refPicSetIdx; };1135 Void setRefPicListModificationFlagL(UInt li, Bool flag) { ( li==0 ? m_bRefPicListModificationFlagL0 : m_bRefPicListModificationFlagL1 ) = flag; };1136 #endif1137 1011 }; 1138 1012 … … 1389 1263 TComPic* m_apcRefPicList [2][MAX_NUM_REF+1]; 1390 1264 Int m_aiRefPOCList [2][MAX_NUM_REF+1]; 1391 #if H_MV1392 Int m_aiRefLayerIdList[2][MAX_NUM_REF+1];1393 #endif1394 1265 Bool m_bIsUsedAsLongTerm[2][MAX_NUM_REF+1]; 1395 1266 Int m_iDepth; … … 1457 1328 1458 1329 Bool m_enableTMVPFlag; 1459 #if H_MV1460 Int m_layerId;1461 Int m_viewId;1462 #if H_3D1463 Bool m_isDepth;1464 #endif1465 #endif1466 1330 public: 1467 1331 TComSlice(); … … 1570 1434 Void setDepth ( Int iDepth ) { m_iDepth = iDepth; } 1571 1435 1572 #if H_MV1573 Int getRefLayerId ( RefPicList e, Int iRefIdx) { return m_aiRefLayerIdList[e][iRefIdx]; }1574 Void setRefLayerId ( Int i, RefPicList e, Int iRefIdx ) { m_aiRefLayerIdList[e][iRefIdx] = i; }1575 #endif1576 #if H_MV1577 Void setRefPicList ( TComList<TComPic*>& rcListPic, std::vector<TComPic*>& interLayerRefPicSet , Bool checkNumPocTotalCurr = false );1578 #else1579 1436 #if FIX1071 1580 1437 Void setRefPicList ( TComList<TComPic*>& rcListPic, Bool checkNumPocTotalCurr = false ); 1581 1438 #else 1582 1439 Void setRefPicList ( TComList<TComPic*>& rcListPic ); 1583 #endif1584 1440 #endif 1585 1441 Void setRefPOCList (); … … 1629 1485 Void decodingMarking( TComList<TComPic*>& rcListPic, Int iGOPSIze, Int& iMaxRefPicNum ); 1630 1486 Void applyReferencePictureSet( TComList<TComPic*>& rcListPic, TComReferencePictureSet *RPSList); 1631 #if H_MV1632 Void createAndApplyIvReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer );1633 static Void markIvRefPicsAsShortTerm ( std::vector<TComPic*> refPicSetInterLayer );1634 static Void markIvRefPicsAsUnused ( TComPicLists* ivPicLists, std::vector<Int> targetDecLayerIdSet, TComVPS* vps, Int curLayerId, Int curPoc );1635 1636 1637 Void xPrintRefPicList();1638 #endif1639 1487 Bool isTemporalLayerSwitchingPoint( TComList<TComPic*>& rcListPic ); 1640 1488 Bool isStepwiseTemporalLayerSwitchingPointCandidate( TComList<TComPic*>& rcListPic ); … … 1712 1560 Bool getEnableTMVPFlag () { return m_enableTMVPFlag;} 1713 1561 1714 #if H_MV1715 Void setLayerId ( Int layerId ) { m_layerId = layerId; }1716 Int getLayerId () { return m_layerId; }1717 Int getLayerIdInVps () { return getVPS()->getLayerIdInVps( m_layerId ); };1718 Void setViewId ( Int viewId ) { m_viewId = viewId; }1719 Int getViewId () { return m_viewId; }1720 #if H_3D1721 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; }1722 Bool getIsDepth () { return m_isDepth; }1723 #endif1724 #endif1725 1562 protected: 1726 1563 TComPic* xGetRefPic (TComList<TComPic*>& rcListPic, 1727 1564 Int poc); 1728 1565 TComPic* xGetLongTermRefPic(TComList<TComPic*>& rcListPic, Int poc, Bool pocHasMsb); 1729 #if H_MV1730 TComPic* xGetInterLayerRefPic( std::vector<TComPic*>& rcListIlPic, Int layerId );1731 #endif1732 1566 };// END CLASS DEFINITION TComSlice 1733 1567 -
branches/HTM-DEV-0.1-dev/source/Lib/TLibCommon/TypeDef.h
r364 r367 45 45 46 46 47 #if H_MV48 #define H_3D 049 #endif50 47 51 48 ///// ***** HM 10.1 ********* … … 91 88 #define MAX_VPS_NUM_HRD_PARAMETERS 1 92 89 #define MAX_VPS_OP_SETS_PLUS1 1024 93 #if H_MV94 #define MAX_VPS_NUH_LAYER_ID_PLUS1 6495 #define MAX_NUM_SCALABILITY_TYPES 1696 #define ENC_CFG_CONSOUT_SPACE 2997 #else98 90 #define MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 1 99 #endif100 91 101 92 #define RATE_CONTROL_LAMBDA_DOMAIN 1 ///< JCTVC-K0103, rate control by R-lambda model … … 104 95 #define MAX_CPB_CNT 32 ///< Upper bound of (cpb_cnt_minus1 + 1) 105 96 #define MAX_NUM_LAYER_IDS 64 106 #if H_MV107 #define MAX_NUM_LAYERS 64108 #endif109 97 110 98 #define COEF_REMAIN_BIN_REDUCTION 3 ///< indicates the level at which the VLC … … 521 509 MAIN10 = 2, 522 510 MAINSTILLPICTURE = 3, 523 #if H_MV524 MAINSTEREO = 4,525 MAINMULTIVIEW = 5,526 #if H_3D527 MAIN3D = 6,528 #endif529 #endif530 511 }; 531 512 } … … 559 540 //! \} 560 541 561 #if H_MV 562 /// scalability types 563 enum ScalabilityType 564 { 565 VIEW_ID = 0, 566 #if H_3D 567 DEPTH_ID = 1, 568 #endif 569 }; 570 #endif 571 #endif 542 #endif -
branches/HTM-DEV-0.1-dev/source/Lib/TLibDecoder/NALread.cpp
r362 r367 103 103 assert(forbidden_zero_bit == 0); 104 104 nalu.m_nalUnitType = (NalUnitType) bs.read(6); // nal_unit_type 105 #if H_MV106 nalu.m_layerId = bs.read(6); // layerId107 #else108 105 nalu.m_reservedZero6Bits = bs.read(6); // nuh_reserved_zero_6bits 109 106 assert(nalu.m_reservedZero6Bits == 0); 110 #endif111 107 nalu.m_temporalId = bs.read(3) - 1; // nuh_temporal_id_plus1 112 108 -
branches/HTM-DEV-0.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp
r362 r367 680 680 if (uiCode) 681 681 { 682 #if H_MV683 READ_FLAG( uiCode, "inter_view_mv_vert_constraint_flag" ); pcSPS->setInterViewMvVertConstraintFlag(uiCode == 1 ? true : false);684 #else685 682 while ( xMoreRbspData() ) 686 683 { 687 684 READ_FLAG( uiCode, "sps_extension_data_flag"); 688 685 } 689 #endif690 686 } 691 687 } … … 697 693 READ_CODE( 4, uiCode, "vps_video_parameter_set_id" ); pcVPS->setVPSId( uiCode ); 698 694 READ_CODE( 2, uiCode, "vps_reserved_three_2bits" ); assert(uiCode == 3); 699 #if H_MV700 READ_CODE( 6, uiCode, "vps_max_layers_minus1" ); pcVPS->setMaxLayers( uiCode + 1 );701 #else702 695 READ_CODE( 6, uiCode, "vps_reserved_zero_6bits" ); assert(uiCode == 0); 703 #endif704 696 READ_CODE( 3, uiCode, "vps_max_sub_layers_minus1" ); pcVPS->setMaxTLayers( uiCode + 1 ); 705 697 READ_FLAG( uiCode, "vps_temporal_id_nesting_flag" ); pcVPS->setTemporalNestingFlag( uiCode ? true:false ); 706 698 assert (pcVPS->getMaxTLayers()>1||pcVPS->getTemporalNestingFlag()); 707 #if H_MV708 READ_CODE( 16, uiCode, "vps_extension_offset" );709 #else710 699 READ_CODE( 16, uiCode, "vps_reserved_ffff_16bits" ); assert(uiCode == 0xffff); 711 #endif712 700 parsePTL ( pcVPS->getPTL(), true, pcVPS->getMaxTLayers()-1); 713 701 #if SIGNAL_BITRATE_PICRATE_IN_VPS … … 739 727 740 728 assert( pcVPS->getNumHrdParameters() < MAX_VPS_OP_SETS_PLUS1 ); 741 #if H_MV742 assert( pcVPS->getMaxNuhLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 );743 READ_CODE( 6, uiCode, "vps_max_nuh_layer_id" ); pcVPS->setMaxNuhLayerId( uiCode );744 #else745 729 assert( pcVPS->getMaxNuhReservedZeroLayerId() < MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 ); 746 730 READ_CODE( 6, uiCode, "vps_max_nuh_reserved_zero_layer_id" ); pcVPS->setMaxNuhReservedZeroLayerId( uiCode ); 747 #endif748 731 READ_UVLC( uiCode, "vps_max_op_sets_minus1" ); pcVPS->setMaxOpSets( uiCode + 1 ); 749 732 for( UInt opsIdx = 1; opsIdx <= ( pcVPS->getMaxOpSets() - 1 ); opsIdx ++ ) 750 733 { 751 734 // Operation point set 752 #if H_MV753 for( UInt i = 0; i <= pcVPS->getMaxNuhLayerId(); i ++ )754 #else755 735 for( UInt i = 0; i <= pcVPS->getMaxNuhReservedZeroLayerId(); i ++ ) 756 #endif757 736 { 758 737 READ_FLAG( uiCode, "layer_id_included_flag[opsIdx][i]" ); pcVPS->setLayerIdIncludedFlag( uiCode == 1 ? true : false, opsIdx, i ); … … 793 772 if (uiCode) 794 773 { 795 #if H_MV796 m_pcBitstream->readOutTrailingBits();797 798 READ_FLAG( uiCode, "avc_base_layer_flag" ); pcVPS->setAvcBaseLayerFlag( uiCode == 1 ? true : false );799 READ_FLAG( uiCode, "splitting_flag" ); pcVPS->setSplittingFlag( uiCode == 1 ? true : false );800 801 // Parse scalability_mask[i]802 for( Int sIdx = 0; sIdx < MAX_NUM_SCALABILITY_TYPES; sIdx++ )803 {804 READ_FLAG( uiCode, "scalability_mask[i]" ); pcVPS->setScalabilityMask( sIdx, uiCode == 1 ? true : false );805 }806 807 Int numScalabilityTypes = pcVPS->getNumScalabilityTypes();808 809 // Parse dimension_id_len_minus1[j]810 for( Int sIdx = 0; sIdx < numScalabilityTypes; sIdx++ )811 {812 READ_CODE( 3, uiCode, "dimension_id_len_minus1[j]" ); pcVPS->setDimensionIdLen( sIdx, uiCode + 1 );813 }814 815 // vps_nuh_layer_id_present_flag816 READ_FLAG( uiCode, "vps_nuh_layer_id_present_flag" ); pcVPS->setVpsNuhLayerIdPresentFlag( uiCode == 1 ? true : false );817 818 // parse layer_id_in_nuh[i] and derive LayerIdInVps819 pcVPS->setLayerIdInNuh( 0, 0 ); pcVPS->setLayerIdInVps( 0, 0 );820 821 for( Int layer = 1; layer <= pcVPS->getMaxLayers() - 1; layer++ )822 {823 UInt layerIdInNuh;824 if ( pcVPS->getVpsNuhLayerIdPresentFlag() )825 {826 READ_CODE( 6, uiCode, "layer_id_in_nuh[i]" ); layerIdInNuh = uiCode;827 }828 else829 {830 layerIdInNuh = layer;831 }832 833 pcVPS->setLayerIdInNuh( layer, layerIdInNuh );834 pcVPS->setLayerIdInVps( layerIdInNuh, layer );835 836 // parse dimension_id[i][j]837 for( Int sIdx = 0; sIdx < numScalabilityTypes; sIdx++ )838 {839 READ_CODE( pcVPS->getDimensionIdLen( sIdx ), uiCode, "dimension_id[i][j]" ); pcVPS->setDimensionId( layer, sIdx, uiCode );840 }841 }842 843 for( Int layerSet = 1; layerSet <= pcVPS->getMaxOpSets() - 1; layerSet++ )844 {845 READ_FLAG( uiCode, "vps_profile_present_flag[lsIdx]" ); pcVPS->setVpsProfilePresentFlag( layerSet, uiCode == 1 ? true : false );846 if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false )847 {848 READ_UVLC( uiCode, "profile_layer_set_ref_minus1[lsIdx]" ); pcVPS->setProfileLayerSetRefMinus1( layerSet, uiCode );849 }850 851 parsePTL ( pcVPS->getPTL( layerSet ), pcVPS->getVpsProfilePresentFlag( layerSet ), pcVPS->getMaxTLayers()-1);852 if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false )853 {854 TComPTL temp = *pcVPS->getPTL( layerSet );855 *pcVPS->getPTL( layerSet ) = *pcVPS->getPTL( pcVPS->getProfileLayerSetRefMinus1( layerSet ) + 1 );856 pcVPS->getPTL( layerSet )->copyLevelFrom( &temp );857 }858 }859 860 READ_UVLC( uiCode, "num_output_layer_sets" ); pcVPS->setNumOutputLayerSets( uiCode );861 862 for( Int layerSet = 0; layerSet < pcVPS->getNumOutputLayerSets(); layerSet++ )863 {864 READ_UVLC( uiCode, "output_layer_set_idx[i]" ); pcVPS->setOutputLayerSetIdx( layerSet, uiCode );865 for( Int layer = 0; layer <= pcVPS->getMaxNuhLayerId(); layer++ )866 {867 if( pcVPS->getLayerIdIncludedFlag( pcVPS->getOutputLayerSetIdx( layerSet ), layer ) == true )868 {869 READ_FLAG( uiCode, "output_layer_flag" ); pcVPS->setOutputLayerFlag( layerSet, layer, uiCode == 1 ? true : false );870 }871 }872 }873 874 for( Int i = 1; i <= pcVPS->getMaxLayers() - 1; i++ )875 {876 for( Int j = 0; j < i; j++ )877 {878 READ_FLAG( uiCode, "direct_dependency_flag[i][j]" ); pcVPS->setDirectDependencyFlag( i, j, uiCode );879 }880 }881 882 READ_FLAG( uiCode, "vps_extension2_flag" );883 if (uiCode)884 {885 while ( xMoreRbspData() )886 {887 READ_FLAG( uiCode, "vps_extension2_data_flag");888 }889 }890 891 pcVPS->checkVPSExtensionSyntax();892 893 pcVPS->calcIvRefLayers();894 895 #else896 774 while ( xMoreRbspData() ) 897 775 { 898 776 READ_FLAG( uiCode, "vps_extension_data_flag"); 899 777 } 900 #endif901 778 } 902 779 … … 914 791 TComPPS* pps = NULL; 915 792 TComSPS* sps = NULL; 916 #if H_MV917 TComVPS* vps = NULL;918 #endif919 793 920 794 UInt firstSliceSegmentInPic; … … 931 805 //!KS: need to add error handling code here, if SPS is not available 932 806 assert(sps!=0); 933 #if H_MV934 vps = parameterSetManager->getPrefetchedVPS(sps->getVPSId());935 assert(vps!=0);936 rpcSlice->setVPS(vps);937 #endif938 807 rpcSlice->setSPS(sps); 939 808 rpcSlice->setPPS(pps); … … 1523 1392 for (Int i = 0; i < maxNumSubLayersMinus1; i++) 1524 1393 { 1525 #if !H_MV1526 1394 if(profilePresentFlag) 1527 1395 { 1528 #endif1529 1396 READ_FLAG( uiCode, "sub_layer_profile_present_flag[i]" ); rpcPTL->setSubLayerProfilePresentFlag(i, uiCode); 1530 #if H_MV 1531 rpcPTL->setSubLayerProfilePresentFlag( i, profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) ); 1532 #else 1533 } 1534 #endif 1397 } 1535 1398 READ_FLAG( uiCode, "sub_layer_level_present_flag[i]" ); rpcPTL->setSubLayerLevelPresentFlag (i, uiCode); 1536 1399 } -
branches/HTM-DEV-0.1-dev/source/Lib/TLibDecoder/TDecGop.cpp
r364 r367 205 205 } 206 206 207 #if !H_3D208 207 rpcPic->compressMotion(); 209 #endif210 208 Char c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B'); 211 209 if (!pcSlice->isReferenced()) c += 32; 212 210 213 211 //-- For time output for each slice 214 #if H_MV215 printf("\nLayer %2d POC %4d TId: %1d ( %c-SLICE, QP%3d ) ", pcSlice->getLayerId(),216 pcSlice->getPOC(),217 pcSlice->getTLayer(),218 c,219 pcSlice->getSliceQp() );220 #else221 212 printf("\nPOC %4d TId: %1d ( %c-SLICE, QP%3d ) ", pcSlice->getPOC(), 222 213 pcSlice->getTLayer(), 223 214 c, 224 215 pcSlice->getSliceQp() ); 225 #endif226 216 227 217 m_dDecTime += (Double)(clock()-iBeforeTime) / CLOCKS_PER_SEC; … … 234 224 for (Int iRefIndex = 0; iRefIndex < pcSlice->getNumRefIdx(RefPicList(iRefList)); iRefIndex++) 235 225 { 236 #if H_MV237 if( pcSlice->getLayerId() != pcSlice->getRefLayerId( RefPicList(iRefList), iRefIndex ) )238 {239 printf( "V%d ", pcSlice->getRefLayerId( RefPicList(iRefList), iRefIndex ) );240 }241 else242 {243 #endif244 226 printf ("%d ", pcSlice->getRefPOC(RefPicList(iRefList), iRefIndex)); 245 #if H_MV246 }247 #endif248 227 } 249 228 printf ("] "); -
branches/HTM-DEV-0.1-dev/source/Lib/TLibDecoder/TDecTop.cpp
r364 r367 39 39 #include "TDecTop.h" 40 40 41 #if H_MV42 ParameterSetManagerDecoder TDecTop::m_parameterSetManagerDecoder;43 #endif44 41 //! \ingroup TLibDecoder 45 42 //! \{ … … 60 57 m_bFirstSliceInPicture = true; 61 58 m_bFirstSliceInSequence = true; 62 #if H_MV63 m_layerId = 0;64 m_viewId = 0;65 #if H_3D66 m_isDepth = false;67 #endif68 #endif69 59 } 70 60 … … 96 86 { 97 87 // initialize ROM 98 #if !H_MV99 88 initROM(); 100 #endif101 89 m_cGopDecoder.init( &m_cEntropyDecoder, &m_cSbacDecoder, &m_cBinCABAC, &m_cCavlcDecoder, &m_cSliceDecoder, &m_cLoopFilter, &m_cSAO); 102 90 m_cSliceDecoder.init( &m_cEntropyDecoder, &m_cCuDecoder ); … … 112 100 { 113 101 TComPic* pcPic = *(iterPic++); 114 #if H_MV115 if( pcPic )116 {117 #endif118 102 pcPic->destroy(); 119 103 120 104 delete pcPic; 121 105 pcPic = NULL; 122 #if H_MV123 }124 #endif125 106 } 126 107 … … 129 110 m_cLoopFilter. destroy(); 130 111 131 #if !H_MV132 112 // destroy ROM 133 113 destroyROM(); 134 #endif135 114 } 136 115 … … 198 177 } 199 178 200 #if H_MV201 Void TDecTop::endPicDecoding(Int& poc, TComList<TComPic*>*& rpcListPic, std::vector<Int>& targetDecLayerIdSet )202 #else203 179 Void TDecTop::executeLoopFilters(Int& poc, TComList<TComPic*>*& rpcListPic) 204 #endif205 180 { 206 181 if (!m_pcPic) … … 220 195 rpcListPic = &m_cListPic; 221 196 m_cCuDecoder.destroy(); 222 #if H_MV223 TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer );224 TComSlice::markIvRefPicsAsUnused ( m_ivPicLists, targetDecLayerIdSet, m_parameterSetManagerDecoder.getActiveVPS(), m_layerId, poc );225 #endif226 197 m_bFirstSliceInPicture = true; 227 198 … … 340 311 } 341 312 342 #if H_MV343 Bool TDecTop::xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay, Bool newLayerFlag )344 {345 assert( nalu.m_layerId == m_layerId );346 347 #else348 313 Bool TDecTop::xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay ) 349 314 { 350 #endif351 315 TComPic*& pcPic = m_pcPic; 352 316 m_apcSlicePilot->initSlice(); … … 373 337 m_apcSlicePilot->setTLayerInfo(nalu.m_temporalId); 374 338 375 #if H_MV376 m_apcSlicePilot->setLayerId( nalu.m_layerId );377 #endif378 339 m_cEntropyDecoder.decodeSliceHeader (m_apcSlicePilot, &m_parameterSetManagerDecoder); 379 340 380 #if H_MV381 TComVPS* vps = m_apcSlicePilot->getVPS();382 Int layerIdInVps = vps->getLayerIdInVps( nalu.m_layerId );383 384 setViewId( vps->getViewId( layerIdInVps ) );385 m_apcSlicePilot->setViewId( getViewId() );386 #if H_3D387 setIsDepth( vps->getDepthId( layerIdInVps ) == 1 );388 m_apcSlicePilot->setIsDepth( getIsDepth() );389 #endif390 #endif391 341 // Skip pictures due to random access 392 342 if (isRandomAccessSkipPicture(iSkipFrame, iPOCLastDisplay)) … … 415 365 m_prevPOC = m_apcSlicePilot->getPOC(); 416 366 } 417 #if H_MV418 if ( newLayerFlag )419 {420 return false;421 }422 #endif423 367 // actual decoding starts here 424 368 xActivateParameterSets(); … … 440 384 m_cPrediction.initTempBuff(); 441 385 m_apcSlicePilot->applyReferencePictureSet(m_cListPic, m_apcSlicePilot->getRPS()); 442 #if H_MV443 m_apcSlicePilot->createAndApplyIvReferencePictureSet( m_ivPicLists, m_refPicSetInterLayer );444 #endif445 386 // Get a new picture buffer 446 387 xGetNewPicBuffer (m_apcSlicePilot, pcPic); … … 574 515 pcPic->setTLayer(nalu.m_temporalId); 575 516 576 #if H_MV577 pcPic->setLayerId( nalu.m_layerId );578 pcPic->setViewId ( getViewId() );579 #if H_3D580 pcPic->setIsDepth( getIsDepth() );581 #endif582 #endif583 517 if (bNextSlice) 584 518 { 585 519 pcSlice->checkCRA(pcSlice->getRPS(), m_pocCRA, m_prevRAPisBLA, m_cListPic ); 586 520 // Set reference list 587 #if H_MV588 pcSlice->setRefPicList( m_cListPic, m_refPicSetInterLayer, true );589 #else590 521 #if FIX1071 591 522 pcSlice->setRefPicList( m_cListPic, true ); … … 594 525 #endif 595 526 596 #endif597 527 // For generalized B 598 528 // note: maybe not existed case (always L0 is copied to L1 if L1 is empty) … … 732 662 } 733 663 734 #if H_MV735 Bool TDecTop::decode(InputNALUnit& nalu, Int& iSkipFrame, Int& iPOCLastDisplay, Bool newLayerFlag)736 #else737 664 Bool TDecTop::decode(InputNALUnit& nalu, Int& iSkipFrame, Int& iPOCLastDisplay) 738 #endif739 665 { 740 666 // Initialize entropy decoder … … 777 703 case NAL_UNIT_CODED_SLICE_RASL_N: 778 704 case NAL_UNIT_CODED_SLICE_RASL_R: 779 #if H_MV780 return xDecodeSlice(nalu, iSkipFrame, iPOCLastDisplay, newLayerFlag);781 #else782 705 return xDecodeSlice(nalu, iSkipFrame, iPOCLastDisplay); 783 #endif784 706 break; 785 707 default: … … 861 783 } 862 784 863 #if H_MV864 TComPic* TDecTop::getPic( Int poc )865 {866 xGetPic( m_layerId, poc );867 TComList<TComPic*>* listPic = getListPic();868 TComPic* pcPic = NULL;869 for(TComList<TComPic*>::iterator it=listPic->begin(); it!=listPic->end(); it++)870 {871 if( (*it)->getPOC() == poc )872 {873 pcPic = *it ;874 break ;875 }876 }877 return pcPic;878 }879 880 TComPic* TDecTop::xGetPic( Int layerId, Int poc )881 {882 return m_ivPicLists->getPic( layerId, poc ) ;883 }884 885 #endif886 785 //! \} -
branches/HTM-DEV-0.1-dev/source/Lib/TLibDecoder/TDecTop.h
r366 r367 61 61 // ==================================================================================================================== 62 62 63 #if H_MV64 class TAppDecTop;65 #endif66 63 /// decoder class 67 64 class TDecTop … … 75 72 76 73 TComList<TComPic*> m_cListPic; // Dynamic buffer 77 #if H_MV78 static ParameterSetManagerDecoder m_parameterSetManagerDecoder; // storage for parameter sets79 #else80 74 ParameterSetManagerDecoder m_parameterSetManagerDecoder; // storage for parameter sets 81 #endif82 75 TComSlice* m_apcSlicePilot; 83 76 … … 105 98 Bool m_bFirstSliceInPicture; 106 99 Bool m_bFirstSliceInSequence; 107 #if H_MV108 // For H_MV m_bFirstSliceInSequence indicates first slice in sequence of the particular layer109 Int m_layerId;110 Int m_viewId;111 TComPicLists* m_ivPicLists;112 std::vector<TComPic*> m_refPicSetInterLayer;113 #if H_3D114 Bool m_isDepth;115 #endif116 #endif117 100 118 101 public: … … 126 109 127 110 Void init(); 128 #if H_MV129 Bool decode(InputNALUnit& nalu, Int& iSkipFrame, Int& iPOCLastDisplay, Bool newLayer );130 #else131 111 Bool decode(InputNALUnit& nalu, Int& iSkipFrame, Int& iPOCLastDisplay); 132 #endif133 112 134 113 Void deletePicBuffer(); 135 114 136 #if H_MV137 Void endPicDecoding(Int& poc, TComList<TComPic*>*& rpcListPic, std::vector<Int>& targetDecLayerIdSet);138 #else139 115 Void executeLoopFilters(Int& poc, TComList<TComPic*>*& rpcListPic); 140 #endif141 116 142 #if H_MV143 TComPic* getPic ( Int poc );144 TComList<TComPic*>* getListPic () { return &m_cListPic; }145 Void setIvPicLists ( TComPicLists* picLists) { m_ivPicLists = picLists; }146 147 Int getCurrPoc () { return m_apcSlicePilot->getPOC(); }148 Void setLayerId ( Int layer) { m_layerId = layer; }149 Int getLayerId () { return m_layerId; }150 Void setViewId ( Int viewId ) { m_viewId = viewId; }151 Int getViewId () { return m_viewId; }152 #if H_3D153 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; }154 Bool getIsDepth () { return m_isDepth; }155 #endif156 #endif157 117 protected: 158 118 Void xGetNewPicBuffer (TComSlice* pcSlice, TComPic*& rpcPic); … … 160 120 161 121 Void xActivateParameterSets(); 162 #if H_MV163 TComPic* xGetPic( Int layerId, Int poc );164 Bool xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay, Bool newLayerFlag );165 #else166 122 Bool xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay); 167 #endif168 123 Void xDecodeVPS(); 169 124 Void xDecodeSPS(); -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/NALwrite.cpp
r324 r367 53 53 bsNALUHeader.write(0,1); // forbidden_zero_bit 54 54 bsNALUHeader.write(nalu.m_nalUnitType, 6); // nal_unit_type 55 #if H_MV56 bsNALUHeader.write(nalu.m_layerId, 6); // layerId57 #else58 55 bsNALUHeader.write(nalu.m_reservedZero6Bits, 6); // nuh_reserved_zero_6bits 59 #endif60 56 bsNALUHeader.write(nalu.m_temporalId+1, 3); // nuh_temporal_id_plus1 61 57 … … 146 142 { 147 143 naluDest.m_nalUnitType = naluSrc.m_nalUnitType; 148 #if H_MV149 naluDest.m_layerId = naluSrc.m_layerId;150 #else151 144 naluDest.m_reservedZero6Bits = naluSrc.m_reservedZero6Bits; 152 #endif153 145 naluDest.m_temporalId = naluSrc.m_temporalId; 154 146 naluDest.m_Bitstream = naluSrc.m_Bitstream; -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/NALwrite.h
r324 r367 57 57 NalUnitType nalUnitType, 58 58 UInt temporalID = 0, 59 #if H_MV60 Int layerId = 0)61 #else62 59 UInt reserved_zero_6bits = 0) 63 #endif64 #if H_MV65 : NALUnit(nalUnitType, temporalID, layerId)66 #else67 60 : NALUnit(nalUnitType, temporalID, reserved_zero_6bits) 68 #endif69 61 , m_Bitstream() 70 62 {} -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncAnalyze.cpp
r324 r367 36 36 */ 37 37 38 #if !H_MV39 38 #include "TEncAnalyze.h" 40 #endif41 39 42 40 //! \ingroup TLibEncoder … … 47 45 ////////////////////////////////////////////////////////////////////// 48 46 49 #if !H_MV50 47 TEncAnalyze m_gcAnalyzeAll; 51 48 TEncAnalyze m_gcAnalyzeI; 52 49 TEncAnalyze m_gcAnalyzeP; 53 50 TEncAnalyze m_gcAnalyzeB; 54 #endif55 51 56 52 //! \} -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncAnalyze.h
r324 r367 150 150 }; 151 151 152 #if !H_MV153 152 extern TEncAnalyze m_gcAnalyzeAll; 154 153 extern TEncAnalyze m_gcAnalyzeI; 155 154 extern TEncAnalyze m_gcAnalyzeP; 156 155 extern TEncAnalyze m_gcAnalyzeB; 157 #endif158 156 159 157 //! \} -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp
r366 r367 549 549 } 550 550 551 #if H_MV552 WRITE_FLAG( 1, "sps_extension_flag" );553 554 WRITE_FLAG( pcSPS->getInterViewMvVertConstraintFlag() ? 1 : 0, "inter_view_mv_vert_constraint_flag" );555 #else556 551 WRITE_FLAG( 0, "sps_extension_flag" ); 557 #endif558 552 } 559 553 … … 562 556 WRITE_CODE( pcVPS->getVPSId(), 4, "vps_video_parameter_set_id" ); 563 557 WRITE_CODE( 3, 2, "vps_reserved_three_2bits" ); 564 #if H_MV565 WRITE_CODE( pcVPS->getMaxLayers() - 1, 6, "vps_max_layers_minus1" );566 #else567 558 WRITE_CODE( 0, 6, "vps_reserved_zero_6bits" ); 568 #endif569 559 WRITE_CODE( pcVPS->getMaxTLayers() - 1, 3, "vps_max_sub_layers_minus1" ); 570 560 WRITE_FLAG( pcVPS->getTemporalNestingFlag(), "vps_temporal_id_nesting_flag" ); 571 561 assert (pcVPS->getMaxTLayers()>1||pcVPS->getTemporalNestingFlag()); 572 #if H_MV573 WRITE_CODE( 0xffff, 16, "vps_extension_offset" );574 #else575 562 WRITE_CODE( 0xffff, 16, "vps_reserved_ffff_16bits" ); 576 #endif577 563 codePTL( pcVPS->getPTL(), true, pcVPS->getMaxTLayers() - 1 ); 578 564 #if SIGNAL_BITRATE_PICRATE_IN_VPS … … 597 583 598 584 assert( pcVPS->getNumHrdParameters() <= MAX_VPS_NUM_HRD_PARAMETERS ); 599 #if H_MV600 assert( pcVPS->getMaxNuhLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 );601 WRITE_CODE( pcVPS->getMaxNuhLayerId(), 6, "vps_max_nuh_layer_id" );602 #else603 585 assert( pcVPS->getMaxNuhReservedZeroLayerId() < MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 ); 604 586 WRITE_CODE( pcVPS->getMaxNuhReservedZeroLayerId(), 6, "vps_max_nuh_reserved_zero_layer_id" ); 605 #endif606 587 pcVPS->setMaxOpSets(1); 607 588 WRITE_UVLC( pcVPS->getMaxOpSets() - 1, "vps_max_op_sets_minus1" ); … … 609 590 { 610 591 // Operation point set 611 #if H_MV612 for( UInt i = 0; i <= pcVPS->getMaxNuhLayerId(); i ++ )613 #else614 592 for( UInt i = 0; i <= pcVPS->getMaxNuhReservedZeroLayerId(); i ++ ) 615 #endif616 593 { 617 594 // Only applicable for version 1 … … 654 631 } 655 632 #endif 656 #if H_MV657 WRITE_FLAG( 1, "vps_extension_flag" );658 659 m_pcBitIf->writeAlignOne();660 661 WRITE_FLAG( pcVPS->getAvcBaseLayerFlag() ? 1 : 0, "avc_base_layer_flag" );662 WRITE_FLAG( pcVPS->getSplittingFlag() ? 1 : 0, "splitting_flag" );663 664 for( Int type = 0; type < MAX_NUM_SCALABILITY_TYPES; type++ )665 {666 WRITE_FLAG( pcVPS->getScalabilityMask( type ) ? 1 : 0, "scalability_mask[i]" );667 }668 669 for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ); sIdx++ )670 {671 WRITE_CODE( pcVPS->getDimensionIdLen( sIdx ) - 1 , 3, "dimension_id_len_minus1[j]");672 }673 674 WRITE_FLAG( pcVPS->getVpsNuhLayerIdPresentFlag() ? 1 : 0, "vps_nuh_layer_id_present_flag");675 676 for( Int layer = 1; layer <= pcVPS->getMaxLayers() - 1; layer++ )677 {678 if (pcVPS->getVpsNuhLayerIdPresentFlag() )679 WRITE_CODE( pcVPS->getLayerIdInNuh( layer ), 6, "layer_id_in_nuh[i]");680 for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes() ; sIdx++ )681 {682 WRITE_CODE( pcVPS->getDimensionId( layer, sIdx ), pcVPS->getDimensionIdLen( sIdx ), "dimension_id[i][j]");683 }684 }685 686 for( Int layerSet = 1; layerSet <= pcVPS->getMaxOpSets() - 1; layerSet++ )687 {688 WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( layerSet ) ? 1 : 0, "vps_profile_present_flag[lsIdx]" );689 if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false )690 {691 WRITE_UVLC( pcVPS->getProfileLayerSetRefMinus1( layerSet ), "profile_layer_set_ref_minus1[lsIdx]" );692 }693 codePTL( pcVPS->getPTL( layerSet ), pcVPS->getVpsProfilePresentFlag( layerSet ), pcVPS->getMaxTLayers() - 1 );694 }695 696 WRITE_UVLC( pcVPS->getNumOutputLayerSets(), "num_output_layer_sets" );697 698 for( Int layerSet = 0; layerSet < pcVPS->getNumOutputLayerSets(); layerSet++ )699 {700 WRITE_UVLC( pcVPS->getOutputLayerSetIdx( layerSet ), "output_layer_set_idx[i]" );701 for( Int layer = 0; layer <= pcVPS->getMaxNuhLayerId(); layer++ )702 {703 if( pcVPS->getLayerIdIncludedFlag( pcVPS->getOutputLayerSetIdx( layerSet ), layer ) == true )704 {705 WRITE_FLAG( pcVPS->getOutputLayerFlag( layerSet, layer ) ? 1 : 0, "output_layer_flag" );706 }707 }708 }709 710 for( Int i = 1; i <= pcVPS->getMaxLayers() - 1; i++ )711 {712 for( Int j = 0; j < i; j++ )713 {714 WRITE_FLAG( pcVPS->getDirectDependencyFlag( i, j ), "direct_dependency_flag[i][j]" );715 }716 }717 WRITE_FLAG( 0, "vps_extension2_flag" );718 #else719 633 WRITE_FLAG( 0, "vps_extension_flag" ); 720 #endif721 634 722 635 //future extensions here.. … … 1091 1004 for (Int i = 0; i < maxNumSubLayersMinus1; i++) 1092 1005 { 1093 #if !H_MV1094 1006 if(profilePresentFlag) 1095 1007 { 1096 #endif1097 1008 WRITE_FLAG( pcPTL->getSubLayerProfilePresentFlag(i), "sub_layer_profile_present_flag[i]" ); 1098 #if !H_MV 1099 } 1100 #endif 1009 } 1101 1010 1102 1011 WRITE_FLAG( pcPTL->getSubLayerLevelPresentFlag(i), "sub_layer_level_present_flag[i]" ); -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncCfg.h
r364 r367 69 69 Int m_numRefIdc; 70 70 Int m_refIdc[MAX_NUM_REF_PICS+1]; 71 #if H_MV72 Int m_numInterViewRefPics;73 Int m_interViewRefs [MAX_NUM_REF_PICS];74 Int m_interViewRefPosL[2][MAX_NUM_REF_PICS];75 #endif76 71 GOPEntry() 77 72 : m_POC(-1) … … 88 83 , m_deltaRPS(0) 89 84 , m_numRefIdc(0) 90 #if H_MV91 , m_numInterViewRefPics(0)92 #endif93 85 { 94 86 ::memset( m_referencePics, 0, sizeof(m_referencePics) ); 95 87 ::memset( m_usedByCurrPic, 0, sizeof(m_usedByCurrPic) ); 96 88 ::memset( m_refIdc, 0, sizeof(m_refIdc) ); 97 #if H_MV98 ::memset( m_interViewRefs, 0, sizeof(m_interViewRefs) );99 ::memset( m_interViewRefPosL[0], -1, sizeof(m_interViewRefPosL[0]) ); ::memset( m_interViewRefPosL[1], -1, sizeof(m_interViewRefPosL[1]) );100 #endif101 89 } 102 90 }; … … 139 127 UInt m_uiDecodingRefreshType; ///< the type of decoding refresh employed for the random access. 140 128 Int m_iGOPSize; 141 #if H_MV142 GOPEntry m_GOPList[MAX_GOP+1];143 #else144 129 GOPEntry m_GOPList[MAX_GOP]; 145 #endif146 130 Int m_extraRPSs; 147 131 Int m_maxDecPicBuffering[MAX_TLAYER]; … … 353 337 Bool m_useStrongIntraSmoothing; ///< enable the use of strong intra smoothing (bi_linear interpolation) for 32x32 blocks when reference samples are flat. 354 338 355 #if H_MV356 Int m_layerId;357 Int m_layerIdInVps;358 Int m_viewId;359 #if H_3D360 Bool m_isDepth;361 #endif362 #endif363 339 public: 364 340 TEncCfg() 365 341 : m_puiColumnWidth() 366 342 , m_puiRowHeight() 367 #if H_MV368 , m_layerId(-1)369 , m_layerIdInVps(-1)370 , m_viewId(-1)371 #if H_3D372 , m_isDepth(false)373 #endif374 #endif375 343 {} 376 344 … … 394 362 Void setFramesToBeEncoded ( Int i ) { m_framesToBeEncoded = i; } 395 363 396 #if H_MV397 Void setLayerId ( Int layerId ) { m_layerId = layerId; }398 Int getLayerId () { return m_layerId; }399 Int getLayerIdInVps () { return m_layerIdInVps; }400 Void setLayerIdInVps ( Int layerIdInVps) { m_layerIdInVps = layerIdInVps; }401 Void setViewId ( Int viewId ) { m_viewId = viewId; }402 Int getViewId () { return m_viewId; }403 #if H_3D404 Void setIsDepth ( Bool isDepth ) { m_isDepth = isDepth; }405 Bool getIsDepth () { return m_isDepth; }406 #endif407 #endif408 364 //====== Coding Structure ======== 409 365 Void setIntraPeriod ( Int i ) { m_uiIntraPeriod = (UInt)i; } 410 366 Void setDecodingRefreshType ( Int i ) { m_uiDecodingRefreshType = (UInt)i; } 411 367 Void setGOPSize ( Int i ) { m_iGOPSize = i; } 412 #if H_MV413 Void setGopList ( GOPEntry* GOPList ) { for ( Int i = 0; i < MAX_GOP+1; i++ ) m_GOPList[i] = GOPList[i]; }414 #else415 368 Void setGopList ( GOPEntry* GOPList ) { for ( Int i = 0; i < MAX_GOP; i++ ) m_GOPList[i] = GOPList[i]; } 416 #endif417 369 Void setExtraRPSs ( Int i ) { m_extraRPSs = i; } 418 370 GOPEntry getGOPEntry ( Int i ) { return m_GOPList[i]; } -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncGOP.cpp
r366 r367 100 100 #endif 101 101 #endif 102 #if H_MV103 m_layerId = 0;104 m_viewId = 0;105 m_pocLastCoded = -1;106 #if H_3D107 m_isDepth = false;108 #endif109 #endif110 102 return; 111 103 } … … 147 139 m_totalCoded = 0; 148 140 149 #if H_MV150 m_ivPicLists = pcTEncTop->getIvPicLists();151 m_layerId = pcTEncTop->getLayerId();152 m_viewId = pcTEncTop->getViewId();153 #if H_3D154 m_isDepth = pcTEncTop->getIsDepth();155 #endif156 #endif157 141 } 158 142 … … 358 342 // Public member functions 359 343 // ==================================================================================================================== 360 #if H_MV361 Void TEncGOP::initGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP)362 {363 xInitGOP( iPOCLast, iNumPicRcvd, rcListPic, rcListPicYuvRecOut );364 m_iNumPicCoded = 0;365 }366 #endif367 #if H_MV368 Void TEncGOP::compressPicInGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP, Int iGOPid)369 #else370 344 Void TEncGOP::compressGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP) 371 #endif372 345 { 373 346 TComPic* pcPic; … … 381 354 TComOutputBitstream* pcSubstreamsOut = NULL; 382 355 383 #if !H_MV384 356 xInitGOP( iPOCLast, iNumPicRcvd, rcListPic, rcListPicYuvRecOut ); 385 357 386 358 m_iNumPicCoded = 0; 387 #endif388 359 SEIPictureTiming pictureTimingSEI; 389 360 #if L0208_SOP_DESCRIPTION_SEI … … 408 379 UInt *accumNalsDU = NULL; 409 380 SEIDecodingUnitInfo decodingUnitInfoSEI; 410 #if !H_MV411 381 for ( Int iGOPid=0; iGOPid < m_iGopSize; iGOPid++ ) 412 #endif413 382 { 414 383 UInt uiColDir = 1; … … 469 438 if(pocCurr>=m_pcCfg->getFramesToBeEncoded()) 470 439 { 471 #if H_MV472 delete pcBitstreamRedirect;473 return;474 #else475 440 continue; 476 #endif477 441 } 478 442 … … 495 459 pcSlice->setLastIDR(m_iLastIDR); 496 460 pcSlice->setSliceIdx(0); 497 #if H_MV498 pcPic ->setLayerId ( getLayerId() );499 pcPic ->setViewId ( getViewId() );500 pcSlice->setLayerId ( getLayerId() );501 pcSlice->setViewId ( getViewId() );502 pcSlice->setVPS ( m_pcEncTop->getVPS() );503 #if H_3D504 pcPic ->setIsDepth( getIsDepth() );505 pcSlice->setIsDepth( getIsDepth() );506 #endif507 #endif508 461 //set default slice level flag to the same as SPS level flag 509 462 pcSlice->setLFCrossSliceBoundaryFlag( pcSlice->getPPS()->getLoopFilterAcrossSlicesEnabledFlag() ); … … 543 496 } 544 497 545 #if H_MV 498 if(pcSlice->getSliceType()==B_SLICE&&m_pcCfg->getGOPEntry(iGOPid).m_sliceType=='P') 499 { 500 pcSlice->setSliceType(P_SLICE); 501 } 546 502 // Set the nal unit type 547 503 pcSlice->setNalUnitType(getNalUnitType(pocCurr, m_iLastIDR)); 548 if( pcSlice->getSliceType() == B_SLICE )549 {550 if( m_pcCfg->getGOPEntry( ( pcSlice->getRapPicFlag() && getLayerId() > 0 ) ? MAX_GOP : iGOPid ).m_sliceType == 'P' )551 {552 pcSlice->setSliceType( P_SLICE );553 }554 }555 #else556 if(pcSlice->getSliceType()==B_SLICE&&m_pcCfg->getGOPEntry(iGOPid).m_sliceType=='P')557 {558 pcSlice->setSliceType(P_SLICE);559 }560 // Set the nal unit type561 pcSlice->setNalUnitType(getNalUnitType(pocCurr, m_iLastIDR));562 #endif563 504 if(pcSlice->getTemporalLayerNonReferenceFlag()) 564 505 { … … 648 589 refPicListModification->setRefPicListModificationFlagL0(0); 649 590 refPicListModification->setRefPicListModificationFlagL1(0); 650 #if H_MV651 pcSlice->createAndApplyIvReferencePictureSet( m_ivPicLists, m_refPicSetInterLayer );652 pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ).m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) );653 pcSlice->setNumRefIdx(REF_PIC_LIST_1,min(m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ).m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) );654 xSetRefPicListModificationsMvc( pcSlice, pocCurr, iGOPid );655 #else656 591 pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive,pcSlice->getRPS()->getNumberOfPictures())); 657 592 pcSlice->setNumRefIdx(REF_PIC_LIST_1,min(m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive,pcSlice->getRPS()->getNumberOfPictures())); 658 #endif659 593 660 594 #if ADAPTIVE_QP_SELECTION … … 663 597 664 598 // Set reference list 665 #if H_MV666 pcSlice->setRefPicList( rcListPic, m_refPicSetInterLayer );667 #else668 599 pcSlice->setRefPicList ( rcListPic ); 669 #endif670 600 671 601 // Slice info. refinement 672 #if H_MV673 if ( pcSlice->getSliceType() == B_SLICE )674 {675 if( m_pcCfg->getGOPEntry( ( pcSlice->getRapPicFlag() == true && getLayerId() > 0 ) ? MAX_GOP : iGOPid ).m_sliceType == 'P' )676 {677 pcSlice->setSliceType( P_SLICE );678 }679 }680 #else681 602 if ( (pcSlice->getSliceType() == B_SLICE) && (pcSlice->getNumRefIdx(REF_PIC_LIST_1) == 0) ) 682 603 { 683 604 pcSlice->setSliceType ( P_SLICE ); 684 605 } 685 #endif686 606 #if !L0034_COMBINED_LIST_CLEANUP 687 607 if (pcSlice->getSliceType() != B_SLICE || !pcSlice->getSPS()->getUseLComb()) … … 1100 1020 { 1101 1021 OutputNALUnit nalu(NAL_UNIT_VPS); 1102 #if H_MV1103 if( getLayerId() == 0 )1104 {1105 #endif1106 1022 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 1107 1023 m_pcEntropyCoder->encodeVPS(m_pcEncTop->getVPS()); … … 1112 1028 #endif 1113 1029 1114 #if H_MV1115 }1116 nalu = NALUnit(NAL_UNIT_SPS, 0, getLayerId());1117 #else1118 1030 nalu = NALUnit(NAL_UNIT_SPS); 1119 #endif1120 1031 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 1121 1032 if (m_bSeqFirst) … … 1150 1061 #endif 1151 1062 1152 #if H_MV1153 nalu = NALUnit(NAL_UNIT_PPS, 0, getLayerId());1154 #else1155 1063 nalu = NALUnit(NAL_UNIT_PPS); 1156 #endif1157 1064 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 1158 1065 m_pcEntropyCoder->encodePPS(pcSlice->getPPS()); … … 1476 1383 m_pcEntropyCoder->resetEntropy (); 1477 1384 /* start slice NALunit */ 1478 #if H_MV1479 OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->getTLayer(), getLayerId() );1480 #else1481 1385 OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->getTLayer() ); 1482 #endif1483 1386 Bool sliceSegment = (!pcSlice->isNextSlice()); 1484 1387 if (!sliceSegment) … … 1707 1610 } 1708 1611 1709 #if !H_3D1710 1612 pcPic->compressMotion(); 1711 #endif1712 #if H_MV1713 m_pocLastCoded = pcPic->getPOC();1714 #endif1715 1613 //-- For time output for each slice 1716 1614 Double dEncTime = (Double)(clock()-iBeforeTime) / CLOCKS_PER_SEC; … … 2023 1921 2024 1922 pcPic->setReconMark ( true ); 2025 #if H_MV2026 TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer );2027 std::vector<Int> temp;2028 TComSlice::markIvRefPicsAsUnused ( m_ivPicLists, temp, pcPic->getSlice(0)->getVPS(), m_layerId, pcPic->getPOC() );2029 #endif2030 1923 m_bFirst = false; 2031 1924 m_iNumPicCoded++; … … 2048 1941 if( accumNalsDU != NULL) delete accumNalsDU; 2049 1942 2050 #if !H_MV2051 1943 assert ( m_iNumPicCoded == iNumPicRcvd ); 2052 #endif2053 1944 } 2054 1945 2055 #if !H_MV2056 1946 Void TEncGOP::printOutSummary(UInt uiNumAllPicCoded) 2057 1947 { … … 2089 1979 printf("\nRVM: %.3lf\n" , xCalculateRVM()); 2090 1980 } 2091 #endif2092 1981 2093 1982 Void TEncGOP::preLoopFilterPicAll( TComPic* pcPic, UInt64& ruiDist, UInt64& ruiBits ) … … 2365 2254 2366 2255 //===== add PSNR ===== 2367 #if H_MV2368 m_pcEncTop->getAnalyzeAll()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);2369 #else2370 2256 m_gcAnalyzeAll.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); 2371 #endif2372 2257 TComSlice* pcSlice = pcPic->getSlice(0); 2373 2258 if (pcSlice->isIntra()) 2374 2259 { 2375 #if H_MV2376 m_pcEncTop->getAnalyzeI()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);2377 #else2378 2260 m_gcAnalyzeI.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); 2379 #endif2380 2261 } 2381 2262 if (pcSlice->isInterP()) 2382 2263 { 2383 #if H_MV2384 m_pcEncTop->getAnalyzeP()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);2385 #else2386 2264 m_gcAnalyzeP.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); 2387 #endif2388 2265 } 2389 2266 if (pcSlice->isInterB()) 2390 2267 { 2391 #if H_MV2392 m_pcEncTop->getAnalyzeB()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);2393 #else2394 2268 m_gcAnalyzeB.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits); 2395 #endif2396 2269 } 2397 2270 … … 2400 2273 2401 2274 #if ADAPTIVE_QP_SELECTION 2402 #if H_MV2403 printf("Layer %3d POC %4d TId: %1d ( %c-SLICE, nQP %d QP %d ) %10d bits",2404 pcSlice->getLayerId(),2405 pcSlice->getPOC(),2406 pcSlice->getTLayer(),2407 c,2408 pcSlice->getSliceQpBase(),2409 pcSlice->getSliceQp(),2410 uibits );2411 #else2412 2275 printf("POC %4d TId: %1d ( %c-SLICE, nQP %d QP %d ) %10d bits", 2413 2276 pcSlice->getPOC(), … … 2417 2280 pcSlice->getSliceQp(), 2418 2281 uibits ); 2419 #endif2420 #else2421 #if H_MV2422 printf("Layer %3d POC %4d TId: %1d ( %c-SLICE, QP %d ) %10d bits",2423 pcSlice->getLayerId(),2424 pcSlice->getPOC()-pcSlice->getLastIDR(),2425 pcSlice->getTLayer(),2426 c,2427 pcSlice->getSliceQp(),2428 uibits );2429 2282 #else 2430 2283 printf("POC %4d TId: %1d ( %c-SLICE, QP %d ) %10d bits", … … 2434 2287 pcSlice->getSliceQp(), 2435 2288 uibits ); 2436 #endif2437 2289 2438 2290 #endif … … 2445 2297 for (Int iRefIndex = 0; iRefIndex < pcSlice->getNumRefIdx(RefPicList(iRefList)); iRefIndex++) 2446 2298 { 2447 #if H_MV2448 if( pcSlice->getLayerId() != pcSlice->getRefLayerId( RefPicList(iRefList), iRefIndex ) )2449 {2450 printf( "V%d ", pcSlice->getRefLayerId( RefPicList(iRefList), iRefIndex ) );2451 }2452 else2453 {2454 #endif2455 2299 printf ("%d ", pcSlice->getRefPOC(RefPicList(iRefList), iRefIndex)-pcSlice->getLastIDR()); 2456 #if H_MV2457 }2458 #endif2459 2300 } 2460 2301 printf("]"); … … 2822 2663 } 2823 2664 #endif 2824 #if H_MV2825 Void TEncGOP::xSetRefPicListModificationsMvc( TComSlice* pcSlice, UInt uiPOCCurr, UInt iGOPid )2826 {2827 TComVPS* vps = pcSlice->getVPS();2828 Int layer = pcSlice->getLayerIdInVps( );2829 2830 if( pcSlice->getSliceType() == I_SLICE || !(pcSlice->getPPS()->getListsModificationPresentFlag()) || vps->getNumDirectRefLayers( layer ) == 0 )2831 {2832 return;2833 }2834 2835 // analyze inter-view modifications2836 GOPEntry ge = m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && ( layer > 0) ) ? MAX_GOP : iGOPid );2837 2838 TComRefPicListModification* refPicListModification = pcSlice->getRefPicListModification();2839 2840 Int maxRefListSize = pcSlice->getNumRpsCurrTempList();2841 Int numTemporalRefs = maxRefListSize - vps->getNumDirectRefLayers( layer );2842 2843 2844 for (Int li = 0; li < 2; li ++) // Loop over lists L0 and L12845 {2846 Int numModifications = 0;2847 2848 for( Int k = 0; k < ge.m_numInterViewRefPics; k++ )2849 {2850 numModifications += ( ge.m_interViewRefPosL[li][k] >= 0 ) ? 1 : 0;2851 }2852 2853 // set inter-view modifications2854 if( (maxRefListSize > 1) && (numModifications > 0) )2855 {2856 refPicListModification->setRefPicListModificationFlagL( li, true );2857 Int tempList[16];2858 for( Int k = 0; k < 16; k++ ) { tempList[k] = -1; }2859 2860 Bool isModified = false;2861 for( Int k = 0; k < ge.m_numInterViewRefPics; k++ )2862 {2863 if( ge.m_interViewRefPosL[li][k] >= 0 )2864 {2865 Int orgIdx = numTemporalRefs;2866 Int targetIdx = ge.m_interViewRefPosL[ li ][ k ];2867 for( Int idx = 0; idx < vps->getNumDirectRefLayers( layer ); idx++ )2868 {2869 Int refLayer = vps->getLayerIdInVps( vps->getRefLayerId( layer, idx ) );2870 if( ( layer + ge.m_interViewRefs[ k ]) == refLayer )2871 {2872 tempList[ targetIdx ] = orgIdx;2873 isModified = ( targetIdx != orgIdx );2874 }2875 orgIdx++;2876 }2877 }2878 }2879 if( isModified )2880 {2881 Int temporalRefIdx = 0;2882 for( Int i = 0; i < pcSlice->getNumRefIdx( ( li == 0 ) ? REF_PIC_LIST_0 : REF_PIC_LIST_1 ); i++ )2883 {2884 if( tempList[i] >= 0 )2885 {2886 refPicListModification->setRefPicSetIdxL( li, i, tempList[i] );2887 }2888 else2889 {2890 refPicListModification->setRefPicSetIdxL( li, i, temporalRefIdx );2891 temporalRefIdx++;2892 }2893 }2894 }2895 else2896 {2897 refPicListModification->setRefPicListModificationFlagL( li, false );2898 }2899 }2900 }2901 }2902 #endif2903 2665 //! \} -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncGOP.h
r364 r367 97 97 SEIWriter m_seiWriter; 98 98 99 #if H_MV100 TComPicLists* m_ivPicLists;101 std::vector<TComPic*> m_refPicSetInterLayer;102 103 Int m_pocLastCoded;104 Int m_layerId;105 Int m_viewId;106 #if H_3D107 Bool m_isDepth;108 #endif109 #endif110 99 //--Adaptive Loop filter 111 100 TEncSampleAdaptiveOffset* m_pcSAO; … … 144 133 145 134 Void init ( TEncTop* pcTEncTop ); 146 #if H_MV147 Void initGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP);148 Void compressPicInGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP, Int iGOPid );149 #else150 135 Void compressGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRec, std::list<AccessUnit>& accessUnitsInGOP ); 151 #endif152 136 Void xAttachSliceDataToNalUnit (OutputNALUnit& rNalu, TComOutputBitstream*& rpcBitstreamRedirect); 153 137 154 #if H_MV155 Int getPocLastCoded () { return m_pocLastCoded; }156 Int getLayerId () { return m_layerId; }157 Int getViewId () { return m_viewId; }158 #if H_3D159 Bool getIsDepth () { return m_isDepth; }160 #endif161 #endif162 138 163 139 Int getGOPSize() { return m_iGopSize; } … … 165 141 TComList<TComPic*>* getListPic() { return m_pcListPic; } 166 142 167 #if !H_MV168 143 Void printOutSummary ( UInt uiNumAllPicCoded ); 169 #endif170 144 Void preLoopFilterPicAll ( TComPic* pcPic, UInt64& ruiDist, UInt64& ruiBits ); 171 145 … … 211 185 #endif 212 186 #endif 213 #if H_MV214 Void xSetRefPicListModificationsMvc( TComSlice* pcSlice, UInt uiPOCCurr, UInt iGOPid );215 #endif216 187 #if L0386_DB_METRIC 217 188 Void dblMetric( TComPic* pcPic, UInt uiNumSlices ); -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncSlice.cpp
r365 r367 219 219 220 220 // slice type 221 #if H_MV222 SliceType eSliceTypeBaseView;223 if( pocLast == 0 || pocCurr % m_pcCfg->getIntraPeriod() == 0 || m_pcGOPEncoder->getGOPSize() == 0 )224 {225 eSliceTypeBaseView = I_SLICE;226 }227 else228 {229 eSliceTypeBaseView = B_SLICE;230 }231 SliceType eSliceType = eSliceTypeBaseView;232 if( eSliceTypeBaseView == I_SLICE && m_pcCfg->getGOPEntry(MAX_GOP).m_POC == 0 && m_pcCfg->getGOPEntry(MAX_GOP).m_sliceType != 'I' )233 {234 eSliceType = B_SLICE;235 }236 #else237 221 SliceType eSliceType; 238 222 … … 241 225 242 226 rpcSlice->setSliceType ( eSliceType ); 243 #endif244 227 245 228 // ------------------------------------------------------------------------------------------------------------------ … … 270 253 if (!(( m_pcCfg->getMaxDeltaQP() == 0 ) && (dQP == -rpcSlice->getSPS()->getQpBDOffsetY() ) && (rpcSlice->getSPS()->getUseLossless()))) 271 254 { 272 #if H_MV273 dQP += m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_QPOffset;274 #else275 255 dQP += m_pcCfg->getGOPEntry(iGOPid).m_QPOffset; 276 #endif277 256 } 278 257 } … … 317 296 #endif 318 297 // Case #1: I or P-slices (key-frame) 319 #if H_MV320 Double dQPFactor;321 if( eSliceType != I_SLICE )322 {323 dQPFactor = m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_QPFactor;324 }325 else326 #else327 298 Double dQPFactor = m_pcCfg->getGOPEntry(iGOPid).m_QPFactor; 328 299 if ( eSliceType==I_SLICE ) 329 #endif330 300 { 331 301 dQPFactor=0.57*dLambda_scale; … … 362 332 if( rpcSlice->getSliceType( ) != I_SLICE ) 363 333 { 364 #if H_MV365 dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_temporalId );366 #else367 334 dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry(iGOPid).m_temporalId ); 368 #endif369 335 } 370 336 … … 405 371 #if HB_LAMBDA_FOR_LDC 406 372 // restore original slice type 407 #if H_MV408 eSliceType = eSliceTypeBaseView;409 if( eSliceTypeBaseView == I_SLICE && m_pcCfg->getGOPEntry(MAX_GOP).m_POC == 0 && m_pcCfg->getGOPEntry(MAX_GOP).m_sliceType != 'I' )410 {411 eSliceType = B_SLICE;412 }413 #else414 373 eSliceType = (pocLast == 0 || pocCurr % m_pcCfg->getIntraPeriod() == 0 || m_pcGOPEncoder->getGOPSize() == 0) ? I_SLICE : eSliceType; 415 #endif416 374 417 375 rpcSlice->setSliceType ( eSliceType ); … … 431 389 rpcSlice->setSliceQpDeltaCb ( 0 ); 432 390 rpcSlice->setSliceQpDeltaCr ( 0 ); 433 #if H_MV434 rpcSlice->setNumRefIdx(REF_PIC_LIST_0,m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_numRefPicsActive);435 rpcSlice->setNumRefIdx(REF_PIC_LIST_1,m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_numRefPicsActive);436 #else437 391 rpcSlice->setNumRefIdx(REF_PIC_LIST_0,m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive); 438 392 rpcSlice->setNumRefIdx(REF_PIC_LIST_1,m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive); 439 #endif440 393 441 394 #if L0386_DB_METRIC … … 458 411 if ( !m_pcCfg->getLoopFilterOffsetInPPS() && eSliceType!=I_SLICE) 459 412 { 460 #if H_MV461 rpcSlice->getPPS()->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() );462 rpcSlice->getPPS()->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() );463 rpcSlice->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() );464 rpcSlice->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() );465 #else466 413 rpcSlice->getPPS()->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() ); 467 414 rpcSlice->getPPS()->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() ); 468 415 rpcSlice->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() ); 469 416 rpcSlice->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() ); 470 #endif471 417 } 472 418 else … … 489 435 rpcSlice->setDepth ( depth ); 490 436 491 #if H_MV492 pcPic->setTLayer( m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_temporalId );493 #else494 437 pcPic->setTLayer( m_pcCfg->getGOPEntry(iGOPid).m_temporalId ); 495 #endif496 438 if(eSliceType==I_SLICE) 497 439 { -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncTop.cpp
r366 r367 42 42 #include "TLibCommon/ContextModel.h" 43 43 #endif 44 #if H_MV45 #include "../../App/TAppEncoder/TAppEncTop.h"46 #endif47 44 48 45 //! \ingroup TLibEncoder … … 81 78 m_pcBitCounters = NULL; 82 79 m_pcRdCosts = NULL; 83 #if H_MV84 m_ivPicLists = NULL;85 #endif86 80 } 87 81 … … 95 89 Void TEncTop::create () 96 90 { 97 #if !H_MV98 91 // initialize global variables 99 92 initROM(); 100 #endif101 93 102 94 // create processing unit classes … … 276 268 delete[] m_pcRdCosts; 277 269 278 #if !H_MV279 270 // destroy ROM 280 271 destroyROM(); 281 #endif282 272 283 273 return; … … 329 319 // ==================================================================================================================== 330 320 331 #if H_MV332 Void TEncTop::initNewPic( TComPicYuv* pcPicYuvOrg )333 {334 TComPic* pcPicCurr = NULL;335 336 // get original YUV337 xGetNewPicBuffer( pcPicCurr );338 pcPicYuvOrg->copyToPic( pcPicCurr->getPicYuvOrg() );339 340 // compute image characteristics341 if ( getUseAdaptiveQP() )342 {343 m_cPreanalyzer.xPreanalyze( dynamic_cast<TEncPic*>( pcPicCurr ) );344 }345 }346 #endif347 321 Void TEncTop::deletePicBuffer() 348 322 { … … 371 345 \retval iNumEncoded number of encoded pictures 372 346 */ 373 #if H_MV374 Void TEncTop::encode(Bool flush, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded , Int gopId )375 {376 #else377 347 Void TEncTop::encode(Bool flush, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded ) 378 348 { 379 #endif380 #if H_3D381 TComPic* picLastCoded = getPic( getGOPEncoder()->getPocLastCoded() );382 if( picLastCoded )383 {384 picLastCoded->compressMotion();385 }386 #endif387 #if H_MV388 if( gopId == 0)389 {390 m_cGOPEncoder.initGOP(m_iPOCLast, m_iNumPicRcvd, m_cListPic, rcListPicYuvRecOut, accessUnitsOut);391 #else392 349 if (pcPicYuvOrg) { 393 350 // get original YUV … … 408 365 return; 409 366 } 410 #endif411 367 412 368 #if RATE_CONTROL_LAMBDA_DOMAIN … … 417 373 #endif 418 374 419 #if H_MV420 }421 m_cGOPEncoder.compressPicInGOP(m_iPOCLast, m_iNumPicRcvd, m_cListPic, rcListPicYuvRecOut, accessUnitsOut, gopId );422 423 if( gopId + 1 == m_cGOPEncoder.getGOPSize() )424 {425 #else426 375 // compress GOP 427 376 m_cGOPEncoder.compressGOP(m_iPOCLast, m_iNumPicRcvd, m_cListPic, rcListPicYuvRecOut, accessUnitsOut); 428 #endif429 377 430 378 #if RATE_CONTROL_LAMBDA_DOMAIN … … 438 386 m_iNumPicRcvd = 0; 439 387 m_uiNumAllPicCoded += iNumEncoded; 440 #if H_MV441 }442 #endif443 388 } 444 389 … … 505 450 Void TEncTop::xInitSPS() 506 451 { 507 #if H_MV508 m_cSPS.setSPSId( getLayerIdInVps() );509 #endif510 452 ProfileTierLevel& profileTierLevel = *m_cSPS.getPTL()->getGeneralPTL(); 511 453 profileTierLevel.setLevelIdc(m_level); … … 652 594 Void TEncTop::xInitPPS() 653 595 { 654 #if H_MV655 if( m_cVPS.getNumDirectRefLayers( getLayerIdInVps() ) > 0 )656 {657 m_cPPS.setListsModificationPresentFlag( true );658 }659 m_cPPS.setPPSId( getLayerIdInVps() );660 m_cPPS.setSPSId( getLayerIdInVps() );661 #endif662 596 m_cPPS.setConstrainedIntraPred( m_bUseConstrainedIntraPred ); 663 597 Bool bUseDQP = (getMaxCuDQPDepth() > 0)? true : false; … … 963 897 Void TEncTop::selectReferencePictureSet(TComSlice* slice, Int POCCurr, Int GOPid ) 964 898 { 965 #if H_MV966 if( slice->getRapPicFlag() == true && getLayerId() > 0 && POCCurr == 0 )967 {968 TComReferencePictureSet* rps = slice->getLocalRPS();969 rps->setNumberOfNegativePictures(0);970 rps->setNumberOfPositivePictures(0);971 rps->setNumberOfLongtermPictures(0);972 rps->setNumberOfPictures(0);973 slice->setRPS(rps);974 }975 else976 {977 #endif978 899 slice->setRPSidx(GOPid); 979 900 … … 1003 924 slice->setRPS(getSPS()->getRPSList()->getReferencePictureSet(slice->getRPSidx())); 1004 925 slice->getRPS()->setNumberOfPictures(slice->getRPS()->getNumberOfNegativePictures()+slice->getRPS()->getNumberOfPositivePictures()); 1005 #if H_MV1006 }1007 #endif1008 926 1009 927 } … … 1120 1038 } 1121 1039 } 1122 #if H_MV1123 Void TEncTop::printSummary( Int numAllPicCoded )1124 {1125 assert (numAllPicCoded == m_cAnalyzeAll.getNumPic());1126 1127 //--CFG_KDY1128 m_cAnalyzeAll.setFrmRate( getFrameRate() );1129 m_cAnalyzeI.setFrmRate( getFrameRate() );1130 m_cAnalyzeP.setFrmRate( getFrameRate() );1131 m_cAnalyzeB.setFrmRate( getFrameRate() );1132 1133 //-- all1134 printf( "\n\nSUMMARY ------------------------------------------- LayerId %2d\n", m_layerId );1135 1136 m_cAnalyzeAll.printOut('a');1137 1138 printf( "\n\nI Slices--------------------------------------------------------\n" );1139 m_cAnalyzeI.printOut('i');1140 1141 printf( "\n\nP Slices--------------------------------------------------------\n" );1142 m_cAnalyzeP.printOut('p');1143 1144 printf( "\n\nB Slices--------------------------------------------------------\n" );1145 m_cAnalyzeB.printOut('b');1146 1147 #if _SUMMARY_OUT_1148 m_cAnalyzeAll.printSummaryOut();1149 #endif1150 #if _SUMMARY_PIC_1151 m_cAnalyzeI.printSummary('I');1152 m_cAnalyzeP.printSummary('P');1153 m_cAnalyzeB.printSummary('B');1154 #endif1155 }1156 1157 Int TEncTop::getFrameId(Int iGOPid)1158 {1159 if(m_iPOCLast == 0)1160 {1161 return(0 );1162 }1163 else1164 {1165 return m_iPOCLast -m_iNumPicRcvd+ getGOPEntry(iGOPid).m_POC ;1166 }1167 }1168 1169 TComPic* TEncTop::getPic( Int poc )1170 {1171 TComList<TComPic*>* listPic = getListPic();1172 TComPic* pcPic = NULL;1173 for(TComList<TComPic*>::iterator it=listPic->begin(); it!=listPic->end(); it++)1174 {1175 if( (*it)->getPOC() == poc )1176 {1177 pcPic = *it ;1178 break ;1179 }1180 }1181 return pcPic;1182 }1183 #endif1184 1040 //! \} -
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncTop.h
r364 r367 74 74 TComList<TComPic*> m_cListPic; ///< dynamic list of pictures 75 75 76 #if H_MV77 TComPicLists* m_ivPicLists; ///< access to picture lists of other layers78 #endif79 76 // encoder search 80 77 TEncSearch m_cSearch; ///< encoder search class … … 125 122 TEncRateCtrl m_cRateCtrl; ///< Rate control class 126 123 127 #if H_MV128 TEncAnalyze m_cAnalyzeAll;129 TEncAnalyze m_cAnalyzeI;130 TEncAnalyze m_cAnalyzeP;131 TEncAnalyze m_cAnalyzeB;132 #endif133 124 protected: 134 125 Void xGetNewPicBuffer ( TComPic*& rpcPic ); ///< get picture buffer which will be processed … … 146 137 Void destroy (); 147 138 Void init (); 148 #if H_MV149 TComPicLists* getIvPicLists() { return m_ivPicLists; }150 #endif151 139 Void deletePicBuffer (); 152 140 153 141 Void createWPPCoders(Int iNumSubstreams); 154 142 155 #if H_MV156 Void initNewPic(TComPicYuv* pcPicYuvOrg);157 #endif158 143 // ------------------------------------------------------------------------------------------------------------------- 159 144 // member access functions … … 192 177 #endif 193 178 TComScalingList* getScalingList () { return &m_scalingList; } 194 #if H_MV195 TEncAnalyze* getAnalyzeAll () { return &m_cAnalyzeAll; }196 TEncAnalyze* getAnalyzeI () { return &m_cAnalyzeI; }197 TEncAnalyze* getAnalyzeP () { return &m_cAnalyzeP; }198 TEncAnalyze* getAnalyzeB () { return &m_cAnalyzeB; }199 200 Int getNumAllPicCoded () { return m_uiNumAllPicCoded; }201 202 Int getFrameId (Int iGOPid);203 204 TComPic* getPic ( Int poc );205 Void setIvPicLists ( TComPicLists* picLists) { m_ivPicLists = picLists; }206 #endif207 179 // ------------------------------------------------------------------------------------------------------------------- 208 180 // encoder function … … 210 182 211 183 /// encode several number of pictures until end-of-sequence 212 #if H_MV213 Void encode( Bool bEos, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded , Int gopId );214 #else215 184 Void encode( Bool bEos, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, 216 185 std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded ); 217 #endif218 186 219 #if H_MV220 Void printSummary ( Int numAllPicCoded );221 #else222 187 void printSummary() { m_cGOPEncoder.printOutSummary (m_uiNumAllPicCoded); } 223 #endif224 188 }; 225 189
Note: See TracChangeset for help on using the changeset viewer.