Changeset 912 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder
- Timestamp:
- 31 Oct 2014, 18:18:38 (10 years ago)
- Location:
- branches/SHM-dev/source/Lib/TLibEncoder
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.cpp
r894 r912 140 140 break; 141 141 #endif 142 #if Q0096_OVERLAY_SEI 143 case SEI::OVERLAY_INFO: 144 fprintf( g_hTrace, "=========== Overlay Information SEI message ===========\n"); 145 break; 146 #endif 142 147 #endif //SVC_EXTENSION 143 148 default: … … 285 290 case SEI::FRAME_FIELD_INFO: 286 291 xWriteSEIFrameFieldInfo(*static_cast<const SEIFrameFieldInfo*>(&sei)); 292 break; 293 #endif 294 #if Q0096_OVERLAY_SEI 295 case SEI::OVERLAY_INFO: 296 xWriteSEIOverlayInfo(*static_cast<const SEIOverlayInfo*>(&sei)); 287 297 break; 288 298 #endif … … 1330 1340 #endif 1331 1341 1342 #if Q0096_OVERLAY_SEI 1343 Void SEIWriter::xWriteSEIOverlayInfo(const SEIOverlayInfo &sei) 1344 { 1345 Int i,j; 1346 WRITE_FLAG( sei.m_overlayInfoCancelFlag, "overlay_info_cancel_flag" ); 1347 if ( !sei.m_overlayInfoCancelFlag ) 1348 { 1349 WRITE_UVLC( sei.m_overlayContentAuxIdMinus128, "overlay_content_aux_id_minus128" ); 1350 WRITE_UVLC( sei.m_overlayLabelAuxIdMinus128, "overlay_label_aux_id_minus128" ); 1351 WRITE_UVLC( sei.m_overlayAlphaAuxIdMinus128, "overlay_alpha_aux_id_minus128" ); 1352 WRITE_UVLC( sei.m_overlayElementLabelValueLengthMinus8, "overlay_element_label_value_length_minus8" ); 1353 assert( sei.m_numOverlaysMinus1 < MAX_OVERLAYS ); 1354 WRITE_UVLC( sei.m_numOverlaysMinus1, "num_overlays_minus1" ); 1355 for (i=0 ; i<=sei.m_numOverlaysMinus1 ; i++) 1356 { 1357 WRITE_UVLC( sei.m_overlayIdx[i], "overlay_idx" ); 1358 WRITE_FLAG( sei.m_languageOverlayPresentFlag[i], "language_overlay_present_flag" ); 1359 WRITE_CODE( sei.m_overlayContentLayerId[i], 6, "overlay_content_layer_id"); 1360 WRITE_FLAG( sei.m_overlayLabelPresentFlag[i], "overlay_label_present_flag" ); 1361 if ( sei.m_overlayLabelPresentFlag[i] ) 1362 { 1363 WRITE_CODE( sei.m_overlayLabelLayerId[i], 6, "overlay_label_layer_id"); 1364 } 1365 WRITE_FLAG( sei.m_overlayAlphaPresentFlag[i], "overlay_alpha_present_flag" ); 1366 if ( sei.m_overlayAlphaPresentFlag[i] ) 1367 { 1368 WRITE_CODE( sei.m_overlayAlphaLayerId[i], 6, "overlay_alpha_layer_id"); 1369 } 1370 if ( sei.m_overlayLabelPresentFlag[i] ) 1371 { 1372 assert( sei.m_numOverlayElementsMinus1[i] < MAX_OVERLAY_ELEMENTS ); 1373 WRITE_UVLC( sei.m_numOverlayElementsMinus1[i], "num_overlay_elements_minus1"); 1374 for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++ ) 1375 { 1376 WRITE_CODE(sei.m_overlayElementLabelMin[i][j], sei.m_overlayElementLabelValueLengthMinus8 + 8, "overlay_element_label_min"); 1377 WRITE_CODE(sei.m_overlayElementLabelMax[i][j], sei.m_overlayElementLabelValueLengthMinus8 + 8, "overlay_element_label_max"); 1378 } 1379 } 1380 } 1381 1382 1383 // byte alignment 1384 while ( m_pcBitIf->getNumberOfWrittenBits() % 8 != 0 ) 1385 { 1386 WRITE_FLAG( 0, "overlay_zero_bit" ); 1387 } 1388 1389 for ( i=0 ; i<=sei.m_numOverlaysMinus1 ; i++ ) 1390 { 1391 if ( sei.m_languageOverlayPresentFlag[i] ) 1392 { 1393 WRITE_STRING( sei.m_overlayLanguage[i], sei.m_overlayLanguageLength[i], "overlay_language" ); //WRITE_STRING adds zero-termination byte 1394 } 1395 WRITE_STRING( sei.m_overlayName[i], sei.m_overlayNameLength[i], "overlay_name" ); 1396 if ( sei.m_overlayLabelPresentFlag[i] ) 1397 { 1398 for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++) 1399 { 1400 WRITE_STRING( sei.m_overlayElementName[i][j], sei.m_overlayElementNameLength[i][j], "overlay_element_name" ); 1401 } 1402 } 1403 } 1404 WRITE_FLAG( sei.m_overlayInfoPersistenceFlag, "overlay_info_persistence_flag" ); 1405 } 1406 xWriteByteAlign(); 1407 } 1408 #endif 1409 1332 1410 #endif //SVC_EXTENSION 1333 1411 -
branches/SHM-dev/source/Lib/TLibEncoder/SEIwrite.h
r894 r912 123 123 Void xWriteSEIVPSRewriting(const SEIVPSRewriting &sei); 124 124 #endif 125 #if Q0096_OVERLAY_SEI 126 Void xWriteSEIOverlayInfo(const SEIOverlayInfo &sei); 127 #endif 125 128 #endif //SVC_EXTENSION 126 129 }; -
branches/SHM-dev/source/Lib/TLibEncoder/SyntaxElementWriter.cpp
r595 r912 91 91 } 92 92 93 #if Q0096_OVERLAY_SEI 94 Void SyntaxElementWriter::xWriteStringTr( UChar* value, UInt length, const Char *pSymbolName) 95 { 96 xWriteString(value, length); 97 if( g_HLSTraceEnable ) 98 { 99 fprintf( g_hTrace, "%8lld ", g_nSymbolCounter++ ); 100 fprintf( g_hTrace, "%-50s st(v=%d) : %s\n", pSymbolName, length, value ); 101 } 102 } 103 #endif 104 93 105 #endif 94 106 … … 130 142 } 131 143 144 #if Q0096_OVERLAY_SEI 145 Void SyntaxElementWriter::xWriteString( UChar* sCode, UInt uiLength) 146 { 147 assert(m_pcBitIf->getNumberOfWrittenBits() % 8 == 0 ); 148 for (Int i=0 ; i<uiLength; i++) 149 { 150 m_pcBitIf->write( sCode[i], 8 ); 151 } 152 m_pcBitIf->write( 0, 8 ); //zero-termination byte 153 } 154 #endif 155 132 156 //! \} -
branches/SHM-dev/source/Lib/TLibEncoder/SyntaxElementWriter.h
r595 r912 56 56 #define WRITE_SVLC( value, name) xWriteSvlcTr ( value, name ) 57 57 #define WRITE_FLAG( value, name) xWriteFlagTr ( value, name ) 58 #if Q0096_OVERLAY_SEI 59 #define WRITE_STRING( value, length, name) xWriteStringTr( value, length, name ) 60 #endif 58 61 59 62 #else … … 63 66 #define WRITE_SVLC( value, name) xWriteSvlc ( value ) 64 67 #define WRITE_FLAG( value, name) xWriteFlag ( value ) 68 #if Q0096_OVERLAY_SEI 69 #define WRITE_STRING( value, length, name) xWriteString( value, length ) 70 #endif 65 71 66 72 #endif … … 82 88 Void xWriteSvlc ( Int iCode ); 83 89 Void xWriteFlag ( UInt uiCode ); 90 #if Q0096_OVERLAY_SEI 91 Void xWriteString ( UChar* sCode, UInt uiLength); 92 #endif 84 93 #if ENC_DEC_TRACE 85 94 Void xWriteCodeTr ( UInt value, UInt length, const Char *pSymbolName); … … 87 96 Void xWriteSvlcTr ( Int value, const Char *pSymbolName); 88 97 Void xWriteFlagTr ( UInt value, const Char *pSymbolName); 98 #if Q0096_OVERLAY_SEI 99 Void xWriteStringTr ( UChar* value, UInt length, const Char *pSymbolName); 100 #endif 89 101 #endif 90 102 -
branches/SHM-dev/source/Lib/TLibEncoder/TEncCfg.h
r877 r912 387 387 Int* m_kneeSEIInputKneePoint; 388 388 Int* m_kneeSEIOutputKneePoint; 389 #endif 390 #if Q0096_OVERLAY_SEI 391 Bool m_overlaySEIEnabled; 392 Bool m_overlayInfoCancelFlag; 393 UInt m_overlayContentAuxIdMinus128; 394 UInt m_overlayLabelAuxIdMinus128; 395 UInt m_overlayAlphaAuxIdMinus128; 396 UInt m_overlayElementLabelValueLengthMinus8; 397 UInt m_numOverlaysMinus1; 398 std::vector<UInt> m_overlayIdx; 399 std::vector<Bool> m_overlayLanguagePresentFlag; 400 std::vector<UInt> m_overlayContentLayerId; 401 std::vector<Bool> m_overlayLabelPresentFlag; 402 std::vector<UInt> m_overlayLabelLayerId; 403 std::vector<Bool> m_overlayAlphaPresentFlag; 404 std::vector<UInt> m_overlayAlphaLayerId; 405 std::vector<UInt> m_numOverlayElementsMinus1; 406 std::vector< std::vector<UInt> > m_overlayElementLabelMin; 407 std::vector< std::vector<UInt> > m_overlayElementLabelMax; 408 std::vector<string> m_overlayLanguage; 409 std::vector<string> m_overlayName; 410 std::vector< std::vector<string> > m_overlayElementName; 411 Bool m_overlayInfoPersistenceFlag; 389 412 #endif 390 413 #if Q0189_TMVP_CONSTRAINTS … … 994 1017 UInt getIlcIdc(UInt b) { return m_ilcIdc[b]; } 995 1018 #endif 1019 #if Q0096_OVERLAY_SEI 1020 Void setOverlaySEIEnabled(Int b) { m_overlaySEIEnabled = b; } 1021 Bool getOverlaySEIEnabled() { return m_overlaySEIEnabled; } 1022 Void setOverlaySEICancelFlag(Int b) { m_overlayInfoCancelFlag = b; } 1023 Bool getOverlaySEICancelFlag() { return m_overlayInfoCancelFlag; } 1024 Void setOverlaySEIContentAuxIdMinus128(UInt b) { m_overlayContentAuxIdMinus128 = b; } 1025 UInt getOverlaySEIContentAuxIdMinus128() { return m_overlayContentAuxIdMinus128; } 1026 Void setOverlaySEILabelAuxIdMinus128(UInt b) { m_overlayLabelAuxIdMinus128 = b; } 1027 UInt getOverlaySEILabelAuxIdMinus128() { return m_overlayLabelAuxIdMinus128; } 1028 Void setOverlaySEIAlphaAuxIdMinus128(UInt b) { m_overlayAlphaAuxIdMinus128 = b; } 1029 UInt getOverlaySEIAlphaAuxIdMinus128() { return m_overlayAlphaAuxIdMinus128; } 1030 Void setOverlaySEIElementLabelValueLengthMinus8(UInt b) { m_overlayElementLabelValueLengthMinus8 = b; } 1031 UInt getOverlaySEIElementLabelValueLengthMinus8() { return m_overlayElementLabelValueLengthMinus8; } 1032 Void setOverlaySEINumOverlaysMinus1(UInt b) { m_numOverlaysMinus1 = b; } 1033 UInt getOverlaySEINumOverlaysMinus1() { return m_numOverlaysMinus1; } 1034 Void setOverlaySEIIdx(const std::vector<UInt>& b) { m_overlayIdx = b; } 1035 std::vector<UInt> getOverlaySEIIdx() { return m_overlayIdx; } 1036 Void setOverlaySEILanguagePresentFlag(const std::vector<Bool>& b) { m_overlayLanguagePresentFlag = b; } 1037 std::vector<Bool> getOverlaySEILanguagePresentFlag() { return m_overlayLanguagePresentFlag; } 1038 Void setOverlaySEIContentLayerId(const std::vector<UInt>& b) { m_overlayContentLayerId = b; } 1039 std::vector<UInt> getOverlaySEIContentLayerId() { return m_overlayContentLayerId; } 1040 Void setOverlaySEILabelPresentFlag(const std::vector<Bool>& b) { m_overlayLabelPresentFlag = b; } 1041 std::vector<Bool> getOverlaySEILabelPresentFlag() { return m_overlayLabelPresentFlag; } 1042 Void setOverlaySEILabelLayerId(const std::vector<UInt>& b) { m_overlayLabelLayerId = b; } 1043 std::vector<UInt> getOverlaySEILabelLayerId() { return m_overlayLabelLayerId; } 1044 Void setOverlaySEIAlphaPresentFlag(const std::vector<Bool>& b) { m_overlayAlphaPresentFlag = b; } 1045 std::vector<Bool> getOverlaySEIAlphaPresentFlag() { return m_overlayAlphaPresentFlag; } 1046 Void setOverlaySEIAlphaLayerId(const std::vector<UInt>& b) { m_overlayAlphaLayerId = b; } 1047 std::vector<UInt> getOverlaySEIAlphaLayerId() { return m_overlayAlphaLayerId; } 1048 Void setOverlaySEINumElementsMinus1(const std::vector<UInt>& b) { m_numOverlayElementsMinus1 = b; } 1049 std::vector<UInt> getOverlaySEINumElementsMinus1() { return m_numOverlayElementsMinus1; } 1050 Void setOverlaySEIElementLabelMin(const std::vector< std::vector<UInt> >& b) { m_overlayElementLabelMin = b; } 1051 std::vector< std::vector<UInt> > getOverlaySEIElementLabelMin() { return m_overlayElementLabelMin; } 1052 Void setOverlaySEIElementLabelMax(const std::vector< std::vector<UInt> >& b) { m_overlayElementLabelMax = b; } 1053 std::vector< std::vector<UInt> > getOverlaySEIElementLabelMax() { return m_overlayElementLabelMax; } 1054 Void setOverlaySEILanguage(const std::vector<string>& b) { m_overlayLanguage = b; } 1055 std::vector<string> getOverlaySEILanguage() { return m_overlayLanguage; } 1056 Void setOverlaySEIName(const std::vector<string>& b) { m_overlayName = b; } 1057 std::vector<string> getOverlaySEIName() { return m_overlayName; } 1058 Void setOverlaySEIElementName(const std::vector< std::vector<string> >& b) { m_overlayElementName = b; } 1059 std::vector< std::vector<string> > getOverlaySEIElementName() { return m_overlayElementName; } 1060 Void setOverlaySEIPersistenceFlag(Int b) { m_overlayInfoPersistenceFlag = b; } 1061 Bool getOverlaySEIPersistenceFlag() { return m_overlayInfoPersistenceFlag; } 1062 #endif 996 1063 #if Q0048_CGS_3D_ASYMLUT 997 1064 Void setCGSFlag(Int n) { m_nCGSFlag = n; } -
branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp
r904 r912 382 382 #endif 383 383 384 #if Q0096_OVERLAY_SEI 385 SEIOverlayInfo* TEncGOP::xCreateSEIOverlayInfo() 386 { 387 SEIOverlayInfo *sei = new SEIOverlayInfo(); 388 sei->m_overlayInfoCancelFlag = m_pcCfg->getOverlaySEICancelFlag(); 389 if ( !sei->m_overlayInfoCancelFlag ) 390 { 391 sei->m_overlayContentAuxIdMinus128 = m_pcCfg->getOverlaySEIContentAuxIdMinus128(); 392 sei->m_overlayLabelAuxIdMinus128 = m_pcCfg->getOverlaySEILabelAuxIdMinus128(); 393 sei->m_overlayAlphaAuxIdMinus128 = m_pcCfg->getOverlaySEIAlphaAuxIdMinus128(); 394 sei->m_overlayElementLabelValueLengthMinus8 = m_pcCfg->getOverlaySEIElementLabelValueLengthMinus8(); 395 sei->m_numOverlaysMinus1 = m_pcCfg->getOverlaySEINumOverlaysMinus1(); 396 sei->m_overlayIdx = m_pcCfg->getOverlaySEIIdx(); 397 sei->m_languageOverlayPresentFlag = m_pcCfg->getOverlaySEILanguagePresentFlag(); 398 sei->m_overlayContentLayerId = m_pcCfg->getOverlaySEIContentLayerId(); 399 sei->m_overlayLabelPresentFlag = m_pcCfg->getOverlaySEILabelPresentFlag(); 400 sei->m_overlayLabelLayerId = m_pcCfg->getOverlaySEILabelLayerId(); 401 sei->m_overlayAlphaPresentFlag = m_pcCfg->getOverlaySEIAlphaPresentFlag(); 402 sei->m_overlayAlphaLayerId = m_pcCfg->getOverlaySEIAlphaLayerId(); 403 sei->m_numOverlayElementsMinus1 = m_pcCfg->getOverlaySEINumElementsMinus1(); 404 sei->m_overlayElementLabelMin = m_pcCfg->getOverlaySEIElementLabelMin(); 405 sei->m_overlayElementLabelMax = m_pcCfg->getOverlaySEIElementLabelMax(); 406 sei->m_overlayLanguage.resize ( sei->m_numOverlaysMinus1+1, NULL ); 407 sei->m_overlayLanguageLength.resize ( sei->m_numOverlaysMinus1+1 ); 408 sei->m_overlayName.resize ( sei->m_numOverlaysMinus1+1, NULL ); 409 sei->m_overlayNameLength.resize ( sei->m_numOverlaysMinus1+1 ); 410 sei->m_overlayElementName.resize ( sei->m_numOverlaysMinus1+1 ); 411 sei->m_overlayElementNameLength.resize ( sei->m_numOverlaysMinus1+1 ); 412 413 Int i,j; 414 string strTmp; 415 Int nBytes; 416 assert( m_pcCfg->getOverlaySEILanguage().size() == sei->m_numOverlaysMinus1+1 ); 417 assert( m_pcCfg->getOverlaySEIName().size() == sei->m_numOverlaysMinus1+1 ); 418 assert( m_pcCfg->getOverlaySEIElementName().size() == sei->m_numOverlaysMinus1+1 ); 419 420 for ( i=0 ; i<=sei->m_numOverlaysMinus1; i++ ) 421 { 422 //language tag 423 if ( sei->m_languageOverlayPresentFlag[i] ) 424 { 425 strTmp = m_pcCfg->getOverlaySEILanguage()[i]; 426 nBytes = m_pcCfg->getOverlaySEILanguage()[i].size(); 427 assert( nBytes>0 ); 428 sei->m_overlayLanguage[i] = new UChar[nBytes]; 429 memcpy(sei->m_overlayLanguage[i], strTmp.c_str(), nBytes); 430 sei->m_overlayLanguageLength[i] = nBytes; 431 } 432 433 //overlay name 434 strTmp = m_pcCfg->getOverlaySEIName()[i]; 435 nBytes = m_pcCfg->getOverlaySEIName()[i].size(); 436 assert( nBytes>0 ); 437 sei->m_overlayName[i] = new UChar[nBytes]; 438 memcpy(sei->m_overlayName[i], strTmp.c_str(), nBytes); 439 sei->m_overlayNameLength[i] = nBytes; 440 441 //overlay element names 442 if ( sei->m_overlayLabelPresentFlag[i] ) 443 { 444 sei->m_overlayElementName[i].resize( sei->m_numOverlayElementsMinus1[i]+1, NULL ); 445 sei->m_overlayElementNameLength[i].resize( sei->m_numOverlayElementsMinus1[i]+1 ); 446 assert( m_pcCfg->getOverlaySEIElementName()[i].size() == sei->m_numOverlayElementsMinus1[i]+1 ); 447 for ( j=0 ; j<=sei->m_numOverlayElementsMinus1[i] ; j++) 448 { 449 strTmp = m_pcCfg->getOverlaySEIElementName()[i][j]; 450 nBytes = m_pcCfg->getOverlaySEIElementName()[i][j].size(); 451 assert( nBytes>0 ); 452 sei->m_overlayElementName[i][j] = new UChar[nBytes]; 453 memcpy(sei->m_overlayElementName[i][j], strTmp.c_str(), nBytes); 454 sei->m_overlayElementNameLength[i][j] = nBytes; 455 } 456 } 457 } 458 sei->m_overlayInfoPersistenceFlag = true; 459 } 460 return sei; 461 } 462 #endif 463 384 464 #if Q0074_COLOUR_REMAPPING_SEI 385 465 SEIColourRemappingInfo* TEncGOP::xCreateSEIColourRemappingInfo() … … 574 654 575 655 nalu = NALUnit(NAL_UNIT_PREFIX_SEI, 0, m_pcCfg->getNumLayer()-1); // For highest layer 656 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 657 #if O0164_MULTI_LAYER_HRD 658 m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, m_pcEncTop->getVPS(), sps); 659 #else 660 m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, sps); 661 #endif 662 writeRBSPTrailingBits(nalu.m_Bitstream); 663 accessUnit.push_back(new NALUnitEBSP(nalu)); 664 delete sei; 665 } 666 #endif 667 668 #if Q0096_OVERLAY_SEI 669 if(m_pcCfg->getOverlaySEIEnabled()) 670 { 671 SEIOverlayInfo *sei = xCreateSEIOverlayInfo(); 576 672 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 577 673 #if O0164_MULTI_LAYER_HRD -
branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.h
r896 r912 259 259 #endif 260 260 #endif 261 #if Q0096_OVERLAY_SEI 262 SEIOverlayInfo* xCreateSEIOverlayInfo(); 263 #endif 261 264 #if Q0048_CGS_3D_ASYMLUT 262 265 Void xDetermin3DAsymLUT( TComSlice * pSlice , TComPic * pCurPic , UInt refLayerIdc , TEncCfg * pCfg , Bool bSignalPPS );
Note: See TracChangeset for help on using the changeset viewer.