Changeset 854 in 3DVCSoftware for branches/HTM-10.0-dev0/source/Lib/TLibDecoder/TDecTop.cpp
- Timestamp:
- 13 Feb 2014, 22:58:51 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-10.0-dev0/source/Lib/TLibDecoder/TDecTop.cpp
r852 r854 51 51 m_aaiCodedOffset = new Int* [ MAX_NUM_LAYERS ]; 52 52 m_aaiCodedScale = new Int* [ MAX_NUM_LAYERS ]; 53 #if !FIX_CAM_PARS_COLLECTOR 53 54 m_aiViewId = new Int [ MAX_NUM_LAYERS ]; 54 55 55 56 m_bViewReceived = new Bool [ MAX_NUM_LAYERS ]; 57 #endif 56 58 for( UInt uiId = 0; uiId < MAX_NUM_LAYERS; uiId++ ) 57 59 { … … 63 65 m_iLog2Precision = LOG2_DISP_PREC_LUT; 64 66 m_uiBitDepthForLUT = 8; // fixed 67 #if FIX_CAM_PARS_COLLECTOR 68 m_receivedIdc = NULL; 69 m_vps = NULL; 70 #endif 65 71 } 66 72 … … 74 80 delete [] m_aaiCodedOffset; 75 81 delete [] m_aaiCodedScale; 82 #if !FIX_CAM_PARS_COLLECTOR 76 83 delete [] m_aiViewId; 77 84 delete [] m_bViewReceived; 85 #endif 78 86 79 87 xDeleteArray( m_adBaseViewShiftLUT, MAX_NUM_LAYERS, MAX_NUM_LAYERS, 2 ); 80 88 xDeleteArray( m_aiBaseViewShiftLUT, MAX_NUM_LAYERS, MAX_NUM_LAYERS, 2 ); 81 } 82 89 #if FIX_CAM_PARS_COLLECTOR 90 xDeleteArray( m_receivedIdc, m_uiMaxViewIndex + 1 ); 91 #endif 92 } 93 94 95 #if FIX_CAM_PARS_COLLECTOR 96 Void 97 CamParsCollector::init( FILE* pCodedScaleOffsetFile, TComVPS* vps) 98 { 99 assert( !isInitialized() ); // Only one initialization currently supported 100 m_bInitialized = true; 101 m_vps = vps; 102 m_bCamParsVaryOverTime = false; 103 m_pCodedScaleOffsetFile = pCodedScaleOffsetFile; 104 m_lastPoc = -1; 105 m_firstReceivedPoc = -2; 106 107 m_uiMaxViewIndex = -1; 108 for (Int i = 0; i <= vps->getMaxLayersMinus1(); i++) 109 { 110 Int curViewIdx = m_vps->getViewIndex( m_vps->getLayerIdInNuh( i )); 111 m_bCamParsVaryOverTime = m_bCamParsVaryOverTime || vps->hasCamParInSliceHeader( curViewIdx ); 112 m_uiMaxViewIndex = std::max( m_uiMaxViewIndex, curViewIdx ) ; 113 } 114 115 assert( m_receivedIdc == NULL ); 116 m_receivedIdc = new Int*[ m_uiMaxViewIndex + 1]; 117 for (Int i = 0; i <= m_uiMaxViewIndex; i++) 118 { 119 m_receivedIdc[i] = new Int[ m_uiMaxViewIndex + 1 ]; 120 } 121 122 xResetReceivedIdc( true ); 123 124 for (Int viewIndex = 0; viewIndex <= m_uiMaxViewIndex ; viewIndex++ ) 125 { 126 if (m_vps->getCamParPresent( viewIndex ) ) 127 { 128 if( !m_vps->hasCamParInSliceHeader( viewIndex ) ) 129 { 130 for (Int baseViewIndex = 0; baseViewIndex < viewIndex ; baseViewIndex++ ) 131 { 132 m_receivedIdc [ baseViewIndex ][ viewIndex ] = -1; 133 m_aaiCodedScale [ baseViewIndex ][ viewIndex ] = m_vps->getCodedScale (viewIndex) [ baseViewIndex ]; 134 m_aaiCodedOffset[ baseViewIndex ][ viewIndex ] = m_vps->getCodedOffset (viewIndex) [ baseViewIndex ]; 135 136 m_receivedIdc [ viewIndex ][ baseViewIndex ] = -1; 137 m_aaiCodedScale [ viewIndex ][ baseViewIndex ] = m_vps->getInvCodedScale (viewIndex) [ baseViewIndex ]; 138 m_aaiCodedOffset[ viewIndex ][ baseViewIndex ] = m_vps->getInvCodedOffset(viewIndex) [ baseViewIndex ]; 139 xInitLUTs( baseViewIndex, viewIndex, m_aaiCodedScale[ baseViewIndex ][ viewIndex ], m_aaiCodedOffset[ baseViewIndex ][ viewIndex ], m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT ); 140 xInitLUTs( viewIndex, baseViewIndex, m_aaiCodedScale[ viewIndex ][ baseViewIndex ], m_aaiCodedOffset[ viewIndex ][ baseViewIndex ], m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT ); 141 } 142 } 143 } 144 } 145 } 146 147 Void 148 CamParsCollector::xResetReceivedIdc( Bool overWriteFlag ) 149 { 150 for (Int i = 0; i <= m_uiMaxViewIndex; i++) 151 { 152 for (Int j = 0; j <= m_uiMaxViewIndex; j++) 153 { 154 if ( overWriteFlag || ( m_receivedIdc[i][j] != -1 ) ) 155 { 156 m_receivedIdc[i][j] = 0; 157 } 158 } 159 } 160 } 161 #else 83 162 Void 84 163 CamParsCollector::init( FILE* pCodedScaleOffsetFile ) … … 92 171 m_uiMaxViewIndex = 0; 93 172 } 173 #endif 174 175 94 176 95 177 Void … … 124 206 CamParsCollector::xInitLUTs( UInt uiSourceView, UInt uiTargetView, Int iScale, Int iOffset, Double****& radLUT, Int****& raiLUT) 125 207 { 208 #if FIX_CAM_PARS_COLLECTOR 209 Int iLog2DivLuma = m_uiBitDepthForLUT + m_vps->getCamParPrecision() + 1 - m_iLog2Precision; AOF( iLog2DivLuma > 0 ); 210 #else 126 211 Int iLog2DivLuma = m_uiBitDepthForLUT + m_uiCamParsCodedPrecision + 1 - m_iLog2Precision; AOF( iLog2DivLuma > 0 ); 212 #endif 127 213 Int iLog2DivChroma = iLog2DivLuma + 1; 128 214 … … 166 252 } 167 253 254 #if !FIX_CAM_PARS_COLLECTOR 168 255 Void 169 256 CamParsCollector::setSlice( TComSlice* pcSlice ) … … 284 371 } 285 372 373 #else 374 Void 375 CamParsCollector::setSlice( TComSlice* pcSlice ) 376 { 377 if( pcSlice == 0 ) 378 { 379 xOutput( m_lastPoc ); 380 return; 381 } 382 383 if ( pcSlice->getIsDepth()) 384 { 385 return; 386 } 387 388 Int curPoc = pcSlice->getPOC(); 389 if( m_firstReceivedPoc == -2 ) 390 { 391 m_firstReceivedPoc = curPoc; 392 } 393 394 Bool newPocFlag = ( m_lastPoc != curPoc ); 395 396 if ( newPocFlag ) 397 { 398 if( m_lastPoc != -1 ) 399 { 400 xOutput( m_lastPoc ); 401 } 402 403 xResetReceivedIdc( false ); 404 m_lastPoc = pcSlice->getPOC(); 405 } 406 407 UInt uiViewIndex = pcSlice->getViewIndex(); 408 if( m_vps->getCamParPresent( uiViewIndex ) ) 409 { 410 if( m_vps->hasCamParInSliceHeader( uiViewIndex ) ) // check consistency of slice parameters here 411 { 412 for( UInt uiBaseViewIndex = 0; uiBaseViewIndex < uiViewIndex; uiBaseViewIndex++ ) 413 { 414 if ( m_receivedIdc[ uiViewIndex ][ uiBaseViewIndex ] != 0 ) 415 { 416 AOF( m_aaiCodedScale [ uiViewIndex ][ uiBaseViewIndex ] == pcSlice->getInvCodedScale () [ uiBaseViewIndex ] ); 417 AOF( m_aaiCodedOffset[ uiViewIndex ][ uiBaseViewIndex ] == pcSlice->getInvCodedOffset() [ uiBaseViewIndex ] ); 418 } 419 else 420 { 421 m_receivedIdc [ uiViewIndex ][ uiBaseViewIndex ] = 1; 422 m_aaiCodedScale [ uiViewIndex ][ uiBaseViewIndex ] = pcSlice->getInvCodedScale () [ uiBaseViewIndex ]; 423 m_aaiCodedOffset[ uiViewIndex ][ uiBaseViewIndex ] = pcSlice->getInvCodedOffset() [ uiBaseViewIndex ]; 424 xInitLUTs( uiViewIndex, uiBaseViewIndex, m_aaiCodedScale[ uiViewIndex ][ uiBaseViewIndex ], m_aaiCodedOffset[ uiViewIndex ][ uiBaseViewIndex ], m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT); 425 } 426 if ( m_receivedIdc[ uiBaseViewIndex ][ uiViewIndex ] != 0 ) 427 { 428 AOF( m_aaiCodedScale [ uiBaseViewIndex ][ uiViewIndex ] == pcSlice->getCodedScale () [ uiBaseViewIndex ] ); 429 AOF( m_aaiCodedOffset[ uiBaseViewIndex ][ uiViewIndex ] == pcSlice->getCodedOffset () [ uiBaseViewIndex ] ); 430 } 431 else 432 { 433 m_receivedIdc [ uiBaseViewIndex ][ uiViewIndex ] = 1; 434 m_aaiCodedScale [ uiBaseViewIndex ][ uiViewIndex ] = pcSlice->getCodedScale () [ uiBaseViewIndex ]; 435 m_aaiCodedOffset[ uiBaseViewIndex ][ uiViewIndex ] = pcSlice->getCodedOffset () [ uiBaseViewIndex ]; 436 xInitLUTs( uiBaseViewIndex, uiViewIndex, m_aaiCodedScale[ uiBaseViewIndex ][ uiViewIndex ], m_aaiCodedOffset[ uiBaseViewIndex ][ uiViewIndex ], m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT); 437 } 438 } 439 } 440 } 441 } 442 #endif 443 444 286 445 #if H_3D_IV_MERGE 287 446 Void … … 295 454 #endif 296 455 456 #if !FIX_CAM_PARS_COLLECTOR 297 457 Bool 298 458 CamParsCollector::xIsComplete() … … 307 467 return true; 308 468 } 469 #endif 309 470 310 471 Void … … 313 474 if( m_pCodedScaleOffsetFile ) 314 475 { 476 #if FIX_CAM_PARS_COLLECTOR 477 if( iPOC == m_firstReceivedPoc ) 478 #else 315 479 if( iPOC == 0 ) 480 #endif 316 481 { 317 482 fprintf( m_pCodedScaleOffsetFile, "# ViewIndex ViewId\n" ); 318 483 fprintf( m_pCodedScaleOffsetFile, "#----------- ------------\n" ); 484 #if FIX_CAM_PARS_COLLECTOR 319 485 for( UInt uiViewIndex = 0; uiViewIndex <= m_uiMaxViewIndex; uiViewIndex++ ) 320 486 { 487 fprintf( m_pCodedScaleOffsetFile, "%12d %12d\n", uiViewIndex, m_vps->getViewIdVal( uiViewIndex ) ); 488 #else 489 for( UInt uiViewIndex = 0; uiViewIndex <= m_uiMaxViewIndex; uiViewIndex++ ) 490 { 321 491 fprintf( m_pCodedScaleOffsetFile, "%12d %12d\n", uiViewIndex, m_aiViewId[ uiViewIndex ] ); 492 #endif 322 493 } 323 494 fprintf( m_pCodedScaleOffsetFile, "\n\n"); … … 325 496 fprintf( m_pCodedScaleOffsetFile, "#----------- ------------ ------------ ------------ ------------ ------------ ------------\n" ); 326 497 } 498 #if FIX_CAM_PARS_COLLECTOR 499 if( iPOC == m_firstReceivedPoc || m_bCamParsVaryOverTime ) 500 #else 327 501 if( iPOC == 0 || m_bCamParsVaryOverTime ) 502 #endif 328 503 { 329 504 Int iS = iPOC; … … 335 510 if( uiViewIndex != uiBaseIndex ) 336 511 { 512 #if FIX_CAM_PARS_COLLECTOR 513 if ( m_receivedIdc[uiBaseIndex][uiViewIndex] != 0 ) 514 { 515 fprintf( m_pCodedScaleOffsetFile, "%12d %12d %12d %12d %12d %12d %12d\n", 516 iS, iE, uiViewIndex, uiBaseIndex, m_aaiCodedScale[ uiBaseIndex ][ uiViewIndex ], m_aaiCodedOffset[ uiBaseIndex ][ uiViewIndex ], m_vps->getCamParPrecision() ); 517 } 518 #else 337 519 fprintf( m_pCodedScaleOffsetFile, "%12d %12d %12d %12d %12d %12d %12d\n", 338 520 iS, iE, uiViewIndex, uiBaseIndex, m_aaiCodedScale[ uiBaseIndex ][ uiViewIndex ], m_aaiCodedOffset[ uiBaseIndex ][ uiViewIndex ], m_uiCamParsCodedPrecision ); 521 #endif 522 339 523 } 340 524 } … … 457 641 for( Int temporalLayer=0; temporalLayer < MAX_TLAYER; temporalLayer++) 458 642 { 643 #if H_MV_HLS_7_SPS_P0155_16_32 644 numReorderPics[temporalLayer] = ( getLayerId() == 0 ) ? pcSlice->getSPS()->getNumReorderPics(temporalLayer) : pcSlice->getVPS()->getNumReorderPics(temporalLayer); 645 #else 459 646 numReorderPics[temporalLayer] = pcSlice->getSPS()->getNumReorderPics(temporalLayer); 460 } 461 647 #endif 648 } 649 #if H_MV_HLS_7_SPS_P0155_16_32 650 if ( getLayerId() == 0 ) 651 { 652 m_iMaxRefPicNum = pcSlice->getSPS()->getMaxDecPicBuffering(pcSlice->getTLayer()); 653 } 654 else 655 { 656 m_iMaxRefPicNum = pcSlice->getVPS()->getMaxDecPicBuffering(pcSlice->getTLayer()); 657 #if H_MV_HLS7_GEN 658 TComVPS* vps = pcSlice->getVPS(); 659 TComDpbSize* dpbSize = vps->getDpbSize(); 660 Int lsIdx = vps->getLayerSetIdxForOutputLayerSet( getTargetOutputLayerSetIdx()); // Is this correct, seems to be missing in spec? 661 Int layerIdx = vps->getIdxInLayerSet ( lsIdx, getLayerId() ); 662 Int subDpbIdx = dpbSize->getSubDpbAssigned( lsIdx, layerIdx ); 663 m_iMaxRefPicNum = dpbSize->getMaxVpsDecPicBufferingMinus1(getTargetOutputLayerSetIdx(), subDpbIdx , vps->getSubLayersVpsMaxMinus1( vps->getLayerIdInVps( getLayerId() ) ) + 1 ) + 1 ; 664 #endif 665 } 666 #else 462 667 m_iMaxRefPicNum = pcSlice->getSPS()->getMaxDecPicBuffering(pcSlice->getTLayer()); // m_uiMaxDecPicBuffering has the space for the picture currently being decoded 668 #endif 463 669 if (m_cListPic.size() < (UInt)m_iMaxRefPicNum) 464 670 {
Note: See TracChangeset for help on using the changeset viewer.