Changeset 894 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder
- Timestamp:
- 26 Sep 2014, 03:22:40 (11 years ago)
- Location:
- branches/SHM-dev/source/Lib/TLibEncoder
- Files:
-
- 7 edited
-
SEIwrite.cpp (modified) (11 diffs)
-
SEIwrite.h (modified) (2 diffs)
-
TEncCavlc.cpp (modified) (3 diffs)
-
TEncCavlc.h (modified) (1 diff)
-
TEncGOP.cpp (modified) (4 diffs)
-
TEncGOP.h (modified) (1 diff)
-
TEncTop.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.cpp
r884 r894 149 149 150 150 #if O0164_MULTI_LAYER_HRD 151 #if VPS_VUI_BSP_HRD_PARAMS 152 void SEIWriter::xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting* nestingSeiPtr, const SEIBspNesting* bspNestingSeiPtr) 153 #else 151 154 void SEIWriter::xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting& nestingSei, const SEIBspNesting& bspNestingSei) 155 #endif 152 156 #else 153 157 void SEIWriter::xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComSPS *sps) 154 158 #endif 155 159 { 160 #if VPS_VUI_BSP_HRD_PARAMS 161 SEIScalableNesting nestingSei; 162 SEIBspNesting bspNestingSei; 163 if( nestingSeiPtr ) 164 { 165 nestingSei = *nestingSeiPtr; 166 } 167 if( bspNestingSeiPtr ) 168 { 169 bspNestingSei = *bspNestingSeiPtr; 170 } 171 #endif 156 172 switch (sei.payloadType()) 157 173 { … … 162 178 xWriteSEIActiveParameterSets(*static_cast<const SEIActiveParameterSets*>(& sei)); 163 179 break; 180 case SEI::DECODED_PICTURE_HASH: 181 xWriteSEIDecodedPictureHash(*static_cast<const SEIDecodedPictureHash*>(&sei)); 182 break; 183 #if VPS_VUI_BSP_HRD_PARAMS 184 case SEI::DECODING_UNIT_INFO: 185 xWriteSEIDecodingUnitInfo(*static_cast<const SEIDecodingUnitInfo*>(& sei), sps, nestingSeiPtr, bspNestingSeiPtr, vps); 186 break; 187 case SEI::BUFFERING_PERIOD: 188 xWriteSEIBufferingPeriod(*static_cast<const SEIBufferingPeriod*>(&sei), sps, nestingSeiPtr, bspNestingSeiPtr, vps); 189 break; 190 case SEI::PICTURE_TIMING: 191 xWriteSEIPictureTiming(*static_cast<const SEIPictureTiming*>(&sei), sps, nestingSeiPtr, bspNestingSeiPtr, vps); 192 break; 193 #else 164 194 case SEI::DECODING_UNIT_INFO: 165 195 xWriteSEIDecodingUnitInfo(*static_cast<const SEIDecodingUnitInfo*>(& sei), sps); 166 196 break; 167 case SEI::DECODED_PICTURE_HASH:168 xWriteSEIDecodedPictureHash(*static_cast<const SEIDecodedPictureHash*>(&sei));169 break;170 197 case SEI::BUFFERING_PERIOD: 171 198 xWriteSEIBufferingPeriod(*static_cast<const SEIBufferingPeriod*>(&sei), sps); … … 174 201 xWriteSEIPictureTiming(*static_cast<const SEIPictureTiming*>(&sei), sps); 175 202 break; 203 #endif 176 204 case SEI::RECOVERY_POINT: 177 205 xWriteSEIRecoveryPoint(*static_cast<const SEIRecoveryPoint*>(&sei)); … … 287 315 #endif 288 316 #if O0164_MULTI_LAYER_HRD 317 #if VPS_VUI_BSP_HRD_PARAMS 318 xWriteSEIpayloadData(bs_count, sei, vps, sps, nestingSei, bspNestingSei); 319 #else 289 320 xWriteSEIpayloadData(bs_count, sei, vps, sps, *nestingSei, *bspNestingSei); 321 #endif 290 322 #else 291 323 xWriteSEIpayloadData(bs_count, sei, sps); … … 326 358 327 359 #if O0164_MULTI_LAYER_HRD 360 #if VPS_VUI_BSP_HRD_PARAMS 361 xWriteSEIpayloadData(bs, sei, vps, sps, nestingSei, bspNestingSei); 362 #else 328 363 xWriteSEIpayloadData(bs, sei, vps, sps, *nestingSei, *bspNestingSei); 364 #endif 329 365 #else 330 366 xWriteSEIpayloadData(bs, sei, sps); … … 403 439 } 404 440 441 #if VPS_VUI_BSP_HRD_PARAMS 442 Void SEIWriter::xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps) 443 #else 405 444 Void SEIWriter::xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps) 406 { 445 #endif 446 { 447 #if VPS_VUI_BSP_HRD_PARAMS 448 TComHRD *hrd; 449 if( bspNestingSei ) // If DU info SEI contained inside a BSP nesting SEI message 450 { 451 assert( nestingSei ); 452 Int psIdx = bspNestingSei->m_seiPartitioningSchemeIdx; 453 Int seiOlsIdx = bspNestingSei->m_seiOlsIdx; 454 Int maxTemporalId = nestingSei->m_nestingMaxTemporalIdPlus1[0] - 1; 455 Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1; 456 std::vector<Int> hrdIdx(maxValues, 0); 457 std::vector<TComHRD *> hrdVec; 458 std::vector<Int> syntaxElemLen(maxValues, 0); 459 for(Int i = 0; i < maxValues; i++) 460 { 461 hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei->m_bspIdx); 462 hrdVec.push_back(vps->getBspHrd(hrdIdx[i])); 463 464 syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1; 465 if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) ) 466 { 467 assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23 468 } 469 if( i > 0 ) 470 { 471 assert( hrdVec[i]->getSubPicCpbParamsPresentFlag() == hrdVec[i-1]->getSubPicCpbParamsPresentFlag() ); 472 assert( hrdVec[i]->getSubPicCpbParamsInPicTimingSEIFlag() == hrdVec[i-1]->getSubPicCpbParamsInPicTimingSEIFlag() ); 473 assert( hrdVec[i]->getDpbOutputDelayDuLengthMinus1() == hrdVec[i-1]->getDpbOutputDelayDuLengthMinus1() ); 474 // To be done: Check CpbDpbDelaysPresentFlag 475 } 476 } 477 hrd = hrdVec[0]; 478 } 479 else 480 { 481 TComVUI *vui = sps->getVuiParameters(); 482 hrd = vui->getHrdParameters(); 483 } 484 #else 407 485 TComVUI *vui = sps->getVuiParameters(); 486 TComHrd *hrd = vui->getHrdParameters(); 487 #endif 408 488 WRITE_UVLC(sei.m_decodingUnitIdx, "decoding_unit_idx"); 409 if( vui->getHrdParameters()->getSubPicCpbParamsInPicTimingSEIFlag())410 { 411 WRITE_CODE( sei.m_duSptCpbRemovalDelay, ( vui->getHrdParameters()->getDuCpbRemovalDelayLengthMinus1() + 1), "du_spt_cpb_removal_delay");489 if(hrd->getSubPicCpbParamsInPicTimingSEIFlag()) 490 { 491 WRITE_CODE( sei.m_duSptCpbRemovalDelay, (hrd->getDuCpbRemovalDelayLengthMinus1() + 1), "du_spt_cpb_removal_delay"); 412 492 } 413 493 WRITE_FLAG( sei.m_dpbOutputDuDelayPresentFlag, "dpb_output_du_delay_present_flag"); 414 494 if(sei.m_dpbOutputDuDelayPresentFlag) 415 495 { 416 WRITE_CODE(sei.m_picSptDpbOutputDuDelay, vui->getHrdParameters()->getDpbOutputDelayDuLengthMinus1() + 1, "pic_spt_dpb_output_du_delay"); 417 } 418 xWriteByteAlign(); 419 } 420 496 WRITE_CODE(sei.m_picSptDpbOutputDuDelay,hrd->getDpbOutputDelayDuLengthMinus1() + 1, "pic_spt_dpb_output_du_delay"); 497 } 498 xWriteByteAlign(); 499 } 500 501 #if VPS_VUI_BSP_HRD_PARAMS 502 Void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps) 503 #else 421 504 Void SEIWriter::xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps) 505 #endif 422 506 { 423 507 Int i, nalOrVcl; 508 #if VPS_VUI_BSP_HRD_PARAMS 509 TComHRD *hrd; 510 if( bspNestingSei ) // If BP SEI contained inside a BSP nesting SEI message 511 { 512 assert( nestingSei ); 513 Int psIdx = bspNestingSei->m_seiPartitioningSchemeIdx; 514 Int seiOlsIdx = bspNestingSei->m_seiOlsIdx; 515 Int maxTemporalId = nestingSei->m_nestingMaxTemporalIdPlus1[0] - 1; 516 Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1; 517 std::vector<Int> hrdIdx(maxValues, 0); 518 std::vector<TComHRD *> hrdVec; 519 std::vector<Int> syntaxElemLen(maxValues, 0); 520 for(i = 0; i < maxValues; i++) 521 { 522 hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei->m_bspIdx); 523 hrdVec.push_back(vps->getBspHrd(hrdIdx[i])); 524 525 syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1; 526 if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) ) 527 { 528 assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23 529 } 530 if( i > 0 ) 531 { 532 assert( hrdVec[i]->getCpbRemovalDelayLengthMinus1() == hrdVec[i-1]->getCpbRemovalDelayLengthMinus1() ); 533 assert( hrdVec[i]->getDpbOutputDelayDuLengthMinus1() == hrdVec[i-1]->getDpbOutputDelayDuLengthMinus1() ); 534 assert( hrdVec[i]->getSubPicCpbParamsPresentFlag() == hrdVec[i-1]->getSubPicCpbParamsPresentFlag() ); 535 } 536 } 537 hrd = hrdVec[i]; 538 } 539 else 540 { 541 TComVUI *vui = sps->getVuiParameters(); 542 hrd = vui->getHrdParameters(); 543 } 544 // To be done: When contained in an BSP HRD SEI message, the hrd structure is to be chosen differently. 545 #else 424 546 TComVUI *vui = sps->getVuiParameters(); 425 547 TComHRD *hrd = vui->getHrdParameters(); 548 #endif 426 549 427 550 WRITE_UVLC( sei.m_bpSeqParameterSetId, "bp_seq_parameter_set_id" ); … … 462 585 xWriteByteAlign(); 463 586 } 587 #if VPS_VUI_BSP_HRD_PARAMS 588 Void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps) 589 #else 464 590 Void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, TComSPS *sps) 591 #endif 465 592 { 466 593 Int i; 594 #if VPS_VUI_BSP_HRD_PARAMS 595 TComHRD *hrd; 596 TComVUI *vui = sps->getVuiParameters(); 597 if( bspNestingSei ) // If BP SEI contained inside a BSP nesting SEI message 598 { 599 assert( nestingSei ); 600 Int psIdx = bspNestingSei->m_seiPartitioningSchemeIdx; 601 Int seiOlsIdx = bspNestingSei->m_seiOlsIdx; 602 Int maxTemporalId = nestingSei->m_nestingMaxTemporalIdPlus1[0] - 1; 603 Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1; 604 std::vector<Int> hrdIdx(maxValues, 0); 605 std::vector<TComHRD *> hrdVec; 606 std::vector<Int> syntaxElemLen(maxValues, 0); 607 for(i = 0; i < maxValues; i++) 608 { 609 hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei->m_bspIdx); 610 hrdVec.push_back(vps->getBspHrd(hrdIdx[i])); 611 612 syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1; 613 if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) ) 614 { 615 assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23 616 } 617 if( i > 0 ) 618 { 619 assert( hrdVec[i]->getSubPicCpbParamsPresentFlag() == hrdVec[i-1]->getSubPicCpbParamsPresentFlag() ); 620 assert( hrdVec[i]->getSubPicCpbParamsInPicTimingSEIFlag() == hrdVec[i-1]->getSubPicCpbParamsInPicTimingSEIFlag() ); 621 assert( hrdVec[i]->getCpbRemovalDelayLengthMinus1() == hrdVec[i-1]->getCpbRemovalDelayLengthMinus1() ); 622 assert( hrdVec[i]->getDpbOutputDelayLengthMinus1() == hrdVec[i-1]->getDpbOutputDelayLengthMinus1() ); 623 assert( hrdVec[i]->getDpbOutputDelayDuLengthMinus1() == hrdVec[i-1]->getDpbOutputDelayDuLengthMinus1() ); 624 assert( hrdVec[i]->getDuCpbRemovalDelayLengthMinus1() == hrdVec[i-1]->getDuCpbRemovalDelayLengthMinus1() ); 625 // To be done: Check CpbDpbDelaysPresentFlag 626 } 627 } 628 hrd = hrdVec[0]; 629 } 630 else 631 { 632 hrd = vui->getHrdParameters(); 633 } 634 // To be done: When contained in an BSP HRD SEI message, the hrd structure is to be chosen differently. 635 #else 467 636 TComVUI *vui = sps->getVuiParameters(); 468 637 TComHRD *hrd = vui->getHrdParameters(); 469 470 if( vui->getFrameFieldInfoPresentFlag() ) 638 #endif 639 640 if( vui->getFrameFieldInfoPresentFlag() ) // To be done: Check whether this is the correct invocation of vui when PT SEI contained in BSP nesting SEI 471 641 { 472 642 WRITE_CODE( sei.m_picStruct, 4, "pic_struct" ); … … 754 924 { 755 925 WRITE_FLAG( sei.m_defaultOpFlag, "default_op_flag" ); 756 WRITE_UVLC( sei.m_nestingNumOpsMinus1, "nesting_num_ops ");926 WRITE_UVLC( sei.m_nestingNumOpsMinus1, "nesting_num_ops_minus1" ); 757 927 for (UInt i = (sei.m_defaultOpFlag ? 1 : 0); i <= sei.m_nestingNumOpsMinus1; i++) 758 928 { 759 WRITE_CODE( sei.m_nestingNoOpMaxTemporalIdPlus1, 3, "nesting_no_op_max_temporal_id" ); 760 WRITE_CODE( sei.m_nestingMaxTemporalIdPlus1[i], 3, "nesting_max_temporal_id" ); 929 WRITE_CODE( sei.m_nestingMaxTemporalIdPlus1[i], 3, "nesting_max_temporal_id_plus1" ); 761 930 WRITE_UVLC( sei.m_nestingOpIdx[i], "nesting_op_idx" ); 762 931 } … … 767 936 if (!sei.m_allLayersFlag) 768 937 { 769 WRITE_CODE( sei.m_nestingNoOpMaxTemporalIdPlus1, 3, "nesting_no_op_max_temporal_id " );770 WRITE_UVLC( sei.m_nestingNumLayersMinus1, "nesting_num_layers" );938 WRITE_CODE( sei.m_nestingNoOpMaxTemporalIdPlus1, 3, "nesting_no_op_max_temporal_id_plus1" ); 939 WRITE_UVLC( sei.m_nestingNumLayersMinus1, "nesting_num_layers" ); 771 940 for (UInt i = 0; i <= sei.m_nestingNumLayersMinus1; i++) 772 941 { … … 917 1086 assert(vps->getVpsVuiPresentFlag()); 918 1087 1088 #if VPS_VUI_BSP_HRD_PARAMS 1089 Int psIdx = bspNestingSei.m_seiPartitioningSchemeIdx; 1090 Int seiOlsIdx = bspNestingSei.m_seiOlsIdx; 1091 Int maxTemporalId = nestingSei.m_nestingMaxTemporalIdPlus1[0] - 1; 1092 Int maxValues = vps->getNumBspSchedulesMinus1(seiOlsIdx, psIdx, maxTemporalId) + 1; 1093 std::vector<Int> hrdIdx(maxValues, 0); 1094 std::vector<TComHRD *> hrdVec; 1095 std::vector<Int> syntaxElemLen(maxValues, 0); 1096 for(Int i = 0; i < maxValues; i++) 1097 { 1098 hrdIdx[i] = vps->getBspHrdIdx( seiOlsIdx, psIdx, maxTemporalId, i, bspNestingSei.m_bspIdx); 1099 hrdVec.push_back(vps->getBspHrd(hrdIdx[i])); 1100 1101 syntaxElemLen[i] = hrdVec[i]->getInitialCpbRemovalDelayLengthMinus1() + 1; 1102 if ( !(hrdVec[i]->getNalHrdParametersPresentFlag() || hrdVec[i]->getVclHrdParametersPresentFlag()) ) 1103 { 1104 assert( syntaxElemLen[i] == 24 ); // Default of value init_cpb_removal_delay_length_minus1 is 23 1105 } 1106 if( i > 0 ) 1107 { 1108 assert( hrdVec[i]->getNalHrdParametersPresentFlag() == hrdVec[i-1]->getNalHrdParametersPresentFlag() ); 1109 assert( hrdVec[i]->getVclHrdParametersPresentFlag() == hrdVec[i-1]->getVclHrdParametersPresentFlag() ); 1110 } 1111 } 1112 if (hrdVec[0]->getNalHrdParametersPresentFlag()) 1113 { 1114 for(UInt i = 0; i < maxValues; i++) 1115 { 1116 WRITE_CODE( sei.m_nalInitialArrivalDelay[i], syntaxElemLen[i], "nal_initial_arrival_delay[i]" ); 1117 } 1118 } 1119 if( hrdVec[0]->getVclHrdParametersPresentFlag() ) 1120 { 1121 for(UInt i = 0; i < maxValues; i++) 1122 { 1123 WRITE_CODE( sei.m_vclInitialArrivalDelay[i], syntaxElemLen[i], "vcl_initial_arrival_delay[i]" ); 1124 } 1125 } 1126 #else 919 1127 UInt schedCombCnt = vps->getNumBspSchedCombinations(nestingSei.m_nestingOpIdx[0]); 920 1128 UInt len; … … 959 1167 } 960 1168 } 1169 #endif 961 1170 } 962 1171 -
branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.h
r856 r894 55 55 protected: 56 56 #if O0164_MULTI_LAYER_HRD 57 #if VPS_VUI_BSP_HRD_PARAMS 58 Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei); 59 #else 57 60 Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting& nestingSei, const SEIBspNesting& bspNestingSei); 61 #endif 58 62 #else 59 63 Void xWriteSEIpayloadData(TComBitIf& bs, const SEI& sei, TComSPS *sps); … … 61 65 Void xWriteSEIuserDataUnregistered(const SEIuserDataUnregistered &sei); 62 66 Void xWriteSEIActiveParameterSets(const SEIActiveParameterSets& sei); 67 Void xWriteSEIDecodedPictureHash(const SEIDecodedPictureHash& sei); 68 #if VPS_VUI_BSP_HRD_PARAMS 69 Void xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps); 70 Void xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps); 71 Void xWriteSEIPictureTiming(const SEIPictureTiming& sei, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps); 72 #else 63 73 Void xWriteSEIDecodingUnitInfo(const SEIDecodingUnitInfo& sei, TComSPS *sps); 64 Void xWriteSEIDecodedPictureHash(const SEIDecodedPictureHash& sei);65 74 Void xWriteSEIBufferingPeriod(const SEIBufferingPeriod& sei, TComSPS *sps); 66 75 Void xWriteSEIPictureTiming(const SEIPictureTiming& sei, TComSPS *sps); 76 #endif 67 77 TComSPS *m_pSPS; 68 78 Void xWriteSEIRecoveryPoint(const SEIRecoveryPoint& sei); -
branches/SHM-dev/source/Lib/TLibEncoder/TEncCavlc.cpp
r891 r894 1813 1813 if (vps->getVpsVuiBspHrdPresentFlag()) 1814 1814 { 1815 #if VPS_VUI_BSP_HRD_PARAMS 1816 codeVpsVuiBspHrdParams(vps); 1817 #else 1815 1818 WRITE_UVLC( vps->getVpsNumBspHrdParametersMinus1(), "vps_num_bsp_hrd_parameters_minus1" ); 1816 1819 for( i = 0; i <= vps->getVpsNumBspHrdParametersMinus1(); i++ ) … … 1856 1859 } 1857 1860 } 1861 #endif 1858 1862 } 1859 1863 #endif … … 3188 3192 } 3189 3193 #endif 3190 3194 #if VPS_VUI_BSP_HRD_PARAMS 3195 Void TEncCavlc::codeVpsVuiBspHrdParams(TComVPS * const vps) 3196 { 3197 WRITE_UVLC( vps->getVpsNumAddHrdParams(), "vps_num_add_hrd_params" ); 3198 for( Int i = vps->getNumHrdParameters(), j = 0; i < vps->getNumHrdParameters() + vps->getVpsNumAddHrdParams(); i++, j++ ) // j = i - vps->getNumHrdParameters() 3199 { 3200 if( i > 0 ) 3201 { 3202 WRITE_FLAG( vps->getCprmsAddPresentFlag(j), "cprms_add_present_flag[i]" ); 3203 } 3204 WRITE_UVLC( vps->getNumSubLayerHrdMinus1(j), "num_sub_layer_hrd_minus1[i]" ); 3205 codeHrdParameters(vps->getBspHrd(j), i == 0 ? true : vps->getCprmsAddPresentFlag(j), vps->getNumSubLayerHrdMinus1(j)); 3206 } 3207 for( Int h = 1; h < vps->getNumOutputLayerSets(); h++ ) 3208 { 3209 Int lsIdx = vps->getOutputLayerSetIdx( h ); 3210 WRITE_UVLC( vps->getNumSignalledPartitioningSchemes(h), "num_signalled_partitioning_schemes[h]"); 3211 for( Int j = 0; j < vps->getNumSignalledPartitioningSchemes(h); j++ ) 3212 { 3213 WRITE_UVLC( vps->getNumPartitionsInSchemeMinus1(h, j), "num_partitions_in_scheme_minus1[h][j]" ); 3214 for( Int k = 0; k <= vps->getNumPartitionsInSchemeMinus1(h, j); k++ ) 3215 { 3216 for( Int r = 0; r < vps->getNumLayersInIdList( lsIdx ); r++ ) 3217 { 3218 WRITE_FLAG( vps->getLayerIncludedInPartitionFlag(h, j, k, r), "layer_included_in_partition_flag[h][j][k][r]" ); 3219 } 3220 } 3221 } 3222 for( Int i = 0; i < vps->getNumSignalledPartitioningSchemes(h) + 1; i++ ) 3223 { 3224 for( Int t = 0; t <= vps->getMaxSLayersInLayerSetMinus1(lsIdx); t++ ) 3225 { 3226 WRITE_UVLC(vps->getNumBspSchedulesMinus1(h, i, t), "num_bsp_schedules_minus1[h][i][t]"); 3227 for( Int j = 0; j <= vps->getNumBspSchedulesMinus1(h, i, t); j++ ) 3228 { 3229 for( Int k = 0; k < vps->getNumPartitionsInSchemeMinus1(h, i); k++ ) 3230 { 3231 WRITE_UVLC( vps->getBspHrdIdx(h, i, t, j, k), "bsp_comb_hrd_idx[h][i][t][j][k]"); 3232 WRITE_UVLC( vps->getBspSchedIdx(h, i, t, j, k), "bsp_comb_sched_idx[h][i][t][j][k]"); 3233 } 3234 } 3235 } 3236 } 3237 } 3238 } 3239 #endif 3191 3240 #endif 3192 3241 //! \} -
branches/SHM-dev/source/Lib/TLibEncoder/TEncCavlc.h
r877 r894 169 169 Void codeVpsDpbSizeTable (TComVPS *vps); 170 170 #endif 171 #if VPS_VUI_BSP_HRD_PARAMS 172 Void codeVpsVuiBspHrdParams (TComVPS * const); 173 #endif 171 174 #if Q0048_CGS_3D_ASYMLUT 172 175 #if R0179_ENC_OPT_3DLUT_SIZE -
branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp
r890 r894 2361 2361 if (pcSlice->getLayerId() == 0 && m_pcEncTop->getVPS()->getVpsVuiBspHrdPresentFlag()) 2362 2362 { 2363 nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, 1); 2364 m_pcEntropyCoder->setEntropyCoder(m_pcCavlcCoder, pcSlice); 2365 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 2366 SEIScalableNesting *scalableBspNestingSei = xCreateBspNestingSEI(pcSlice); 2367 m_seiWriter.writeSEImessage(nalu.m_Bitstream, *scalableBspNestingSei, m_pcEncTop->getVPS(), pcSlice->getSPS()); 2368 writeRBSPTrailingBits(nalu.m_Bitstream); 2369 2370 UInt seiPositionInAu = xGetFirstSeiLocation(accessUnit); 2371 UInt offsetPosition = m_activeParameterSetSEIPresentInAU 2372 + m_bufferingPeriodSEIPresentInAU 2373 + m_pictureTimingSEIPresentInAU 2374 + m_nestedPictureTimingSEIPresentInAU; // Insert SEI after APS, BP and PT SEI 2375 AccessUnit::iterator it; 2376 for(j = 0, it = accessUnit.begin(); j < seiPositionInAu + offsetPosition; j++) 2377 { 2378 it++; 2379 } 2380 accessUnit.insert(it, new NALUnitEBSP(nalu)); 2363 #if VPS_VUI_BSP_HRD_PARAMS 2364 TComVPS *vps = m_pcEncTop->getVPS(); 2365 for(Int i = 0; i < vps->getNumOutputLayerSets(); i++) 2366 { 2367 for(Int k = 0; k < vps->getNumSignalledPartitioningSchemes(i); k++) 2368 { 2369 for(Int l = 0; l < vps->getNumPartitionsInSchemeMinus1(i, k)+1; l++) 2370 { 2371 #endif 2372 nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, 1); 2373 m_pcEntropyCoder->setEntropyCoder(m_pcCavlcCoder, pcSlice); 2374 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 2375 #if VPS_VUI_BSP_HRD_PARAMS 2376 SEIScalableNesting *scalableBspNestingSei = xCreateBspNestingSEI(pcSlice, i, k, l); 2377 #else 2378 SEIScalableNesting *scalableBspNestingSei = xCreateBspNestingSEI(pcSlice); 2379 #endif 2380 m_seiWriter.writeSEImessage(nalu.m_Bitstream, *scalableBspNestingSei, m_pcEncTop->getVPS(), pcSlice->getSPS()); 2381 writeRBSPTrailingBits(nalu.m_Bitstream); 2382 2383 UInt seiPositionInAu = xGetFirstSeiLocation(accessUnit); 2384 UInt offsetPosition = m_activeParameterSetSEIPresentInAU 2385 + m_bufferingPeriodSEIPresentInAU 2386 + m_pictureTimingSEIPresentInAU 2387 + m_nestedPictureTimingSEIPresentInAU; // Insert SEI after APS, BP and PT SEI 2388 AccessUnit::iterator it; 2389 for(j = 0, it = accessUnit.begin(); j < seiPositionInAu + offsetPosition; j++) 2390 { 2391 it++; 2392 } 2393 accessUnit.insert(it, new NALUnitEBSP(nalu)); 2394 #if VPS_VUI_BSP_HRD_PARAMS 2395 } 2396 } 2397 } 2398 #endif 2381 2399 } 2382 2400 #endif … … 4746 4764 4747 4765 #if O0164_MULTI_LAYER_HRD 4766 #if VPS_VUI_BSP_HRD_PARAMS 4767 SEIScalableNesting* TEncGOP::xCreateBspNestingSEI(TComSlice *pcSlice, Int olsIdx, Int partitioningSchemeIdx, Int bspIdx) 4768 #else 4748 4769 SEIScalableNesting* TEncGOP::xCreateBspNestingSEI(TComSlice *pcSlice) 4770 #endif 4749 4771 { 4750 4772 SEIScalableNesting *seiScalableNesting = new SEIScalableNesting(); … … 4759 4781 seiScalableNesting->m_defaultOpFlag = 0; 4760 4782 seiScalableNesting->m_nestingNumOpsMinus1 = 0; //nesting_num_ops_minus1 4783 #if VPS_VUI_BSP_HRD_PARAMS 4784 seiScalableNesting->m_nestingOpIdx[0] = pcSlice->getVPS()->getOutputLayerSetIdx(olsIdx); 4785 seiScalableNesting->m_nestingMaxTemporalIdPlus1[0] = 6 + 1; 4786 #else 4761 4787 seiScalableNesting->m_nestingOpIdx[0] = 1; 4788 #endif 4762 4789 seiScalableNesting->m_allLayersFlag = 0; 4763 4790 seiScalableNesting->m_nestingNoOpMaxTemporalIdPlus1 = 6 + 1; //nesting_no_op_max_temporal_id_plus1 … … 4805 4832 seiBspNesting->m_nestedSEIs.push_back(seiBufferingPeriod); 4806 4833 seiBspNesting->m_nestedSEIs.push_back(seiBspInitialArrivalTime); 4834 #if VPS_VUI_BSP_HRD_PARAMS 4835 seiBspNesting->m_bspIdx = bspIdx; 4836 seiBspNesting->m_seiOlsIdx = olsIdx; 4837 seiBspNesting->m_seiPartitioningSchemeIdx = partitioningSchemeIdx; 4838 #endif 4807 4839 seiScalableNesting->m_nestedSEIs.push_back(seiBspNesting); // BSP nesting SEI is contained in scalable nesting SEI 4808 4840 -
branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.h
r856 r894 253 253 #endif 254 254 #if O0164_MULTI_LAYER_HRD 255 #if VPS_VUI_BSP_HRD_PARAMS 256 SEIScalableNesting* TEncGOP::xCreateBspNestingSEI(TComSlice *pcSlice, Int olsIdx, Int partitioningSchemeIdx, Int bspIdx); 257 #else 255 258 SEIScalableNesting* xCreateBspNestingSEI(TComSlice *pcSlice); 259 #endif 256 260 #endif 257 261 #if Q0048_CGS_3D_ASYMLUT -
branches/SHM-dev/source/Lib/TLibEncoder/TEncTop.cpp
r873 r894 323 323 /* set the VPS profile information */ 324 324 *m_cVPS.getPTL() = *m_cSPS.getPTL(); 325 #if VPS_VUI_BSP_HRD_PARAMS 326 m_cVPS.getTimingInfo()->setTimingInfoPresentFlag ( true ); 327 #else 325 328 m_cVPS.getTimingInfo()->setTimingInfoPresentFlag ( false ); 329 #endif 326 330 // initialize PPS 327 331 m_cPPS.setSPS(&m_cSPS);
Note: See TracChangeset for help on using the changeset viewer.