Changeset 776 in SHVCSoftware
- Timestamp:
- 21 May 2014, 02:18:44 (11 years ago)
- Location:
- branches/SHM-6-dev/source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-6-dev/source/App/TAppEncoder/TAppEncCfg.cpp
r758 r776 513 513 string cfg_codedPivotValue; 514 514 string cfg_targetPivotValue; 515 #if P0050_KNEE_FUNCTION_SEI 516 string cfg_kneeSEIInputKneePointValue; 517 string cfg_kneeSEIOutputKneePointValue; 518 #endif 515 519 po::Options opts; 516 520 opts.addOptions() … … 943 947 ("SEISOPDescription", m_SOPDescriptionSEIEnabled, 0, "Control generation of SOP description SEI messages") 944 948 ("SEIScalableNesting", m_scalableNestingSEIEnabled, 0, "Control generation of scalable nesting SEI messages") 949 #if P0050_KNEE_FUNCTION_SEI 950 ("SEIKneeFunctionInfo", m_kneeSEIEnabled, false, "Control generation of Knee function SEI messages") 951 ("SEIKneeFunctionId", m_kneeSEIId, 0, "Specifies Id of Knee function SEI message for a given session") 952 ("SEIKneeFunctionCancelFlag", m_kneeSEICancelFlag, false, "Indicates that Knee function SEI message cancels the persistance or follows") 953 ("SEIKneeFunctionPersistenceFlag", m_kneeSEIPersistenceFlag, true, "Specifies the persistence of the Knee function SEI message") 954 ("SEIKneeFunctionMappingFlag", m_kneeSEIMappingFlag, false, "Specifies the mapping mode of the Knee function SEI message") 955 ("SEIKneeFunctionInputDrange", m_kneeSEIInputDrange, 1000, "Specifies the peak luminance level for the input picture of Knee function SEI messages") 956 ("SEIKneeFunctionInputDispLuminance", m_kneeSEIInputDispLuminance, 100, "Specifies the expected display brightness for the input picture of Knee function SEI messages") 957 ("SEIKneeFunctionOutputDrange", m_kneeSEIOutputDrange, 4000, "Specifies the peak luminance level for the output picture of Knee function SEI messages") 958 ("SEIKneeFunctionOutputDispLuminance", m_kneeSEIOutputDispLuminance, 800, "Specifies the expected display brightness for the output picture of Knee function SEI messages") 959 ("SEIKneeFunctionNumKneePointsMinus1", m_kneeSEINumKneePointsMinus1, 2, "Specifies the number of knee points - 1") 960 ("SEIKneeFunctionInputKneePointValue", cfg_kneeSEIInputKneePointValue, string("600 800 900"), "Array of input knee point") 961 ("SEIKneeFunctionOutputKneePointValue", cfg_kneeSEIOutputKneePointValue, string("100 250 450"), "Array of output knee point") 962 #endif 963 945 964 #if M0040_ADAPTIVE_RESOLUTION_CHANGE 946 965 ("AdaptiveResolutionChange", m_adaptiveResolutionChange, 0, "Adaptive resolution change frame number. Should coincide with EL RAP picture. (0: disable)") … … 1485 1504 } 1486 1505 } 1506 #if P0050_KNEE_FUNCTION_SEI 1507 if( m_kneeSEIEnabled && !m_kneeSEICancelFlag ) 1508 { 1509 Char* pcInputKneePointValue = cfg_kneeSEIInputKneePointValue.empty() ? NULL : strdup(cfg_kneeSEIInputKneePointValue.c_str()); 1510 Char* pcOutputKneePointValue = cfg_kneeSEIOutputKneePointValue.empty() ? NULL : strdup(cfg_kneeSEIOutputKneePointValue.c_str()); 1511 assert ( m_kneeSEINumKneePointsMinus1 >= 0 && m_kneeSEINumKneePointsMinus1 < 999 ); 1512 m_kneeSEIInputKneePoint = new Int[m_kneeSEINumKneePointsMinus1+1]; 1513 m_kneeSEIOutputKneePoint = new Int[m_kneeSEINumKneePointsMinus1+1]; 1514 char *InputVal = strtok(pcInputKneePointValue, " .,"); 1515 Int i=0; 1516 while( InputVal && i<(m_kneeSEINumKneePointsMinus1+1) ) 1517 { 1518 m_kneeSEIInputKneePoint[i] = (UInt) atoi( InputVal ); 1519 InputVal = strtok(NULL, " .,"); 1520 i++; 1521 } 1522 char *OutputVal = strtok(pcOutputKneePointValue, " .,"); 1523 i=0; 1524 while( OutputVal && i<(m_kneeSEINumKneePointsMinus1+1) ) 1525 { 1526 m_kneeSEIOutputKneePoint[i] = (UInt) atoi( OutputVal ); 1527 OutputVal = strtok(NULL, " .,"); 1528 i++; 1529 } 1530 } 1531 #endif 1487 1532 1488 1533 #if N0383_IL_CONSTRAINED_TILE_SETS_SEI … … 2185 2230 xConfirmPara( m_extendedWhiteLevelLumaCodeValue < m_nominalWhiteLevelLumaCodeValue, "SEIToneMapExtendedWhiteLevelLumaCodeValue shall be greater than or equal to SEIToneMapNominalWhiteLevelLumaCodeValue"); 2186 2231 } 2232 #if P0050_KNEE_FUNCTION_SEI 2233 if (m_kneeSEIEnabled && !m_kneeSEICancelFlag) 2234 { 2235 xConfirmPara( m_kneeSEINumKneePointsMinus1 < 0 || m_kneeSEINumKneePointsMinus1 > 998, "SEIKneeFunctionNumKneePointsMinus1 must be in the range of 0 to 998"); 2236 for ( UInt i=0; i<=m_kneeSEINumKneePointsMinus1; i++ ){ 2237 xConfirmPara( m_kneeSEIInputKneePoint[i] < 1 || m_kneeSEIInputKneePoint[i] > 999, "SEIKneeFunctionInputKneePointValue must be in the range of 1 to 999"); 2238 xConfirmPara( m_kneeSEIOutputKneePoint[i] < 0 || m_kneeSEIOutputKneePoint[i] > 1000, "SEIKneeFunctionInputKneePointValue must be in the range of 0 to 1000"); 2239 if ( i > 0 ) 2240 { 2241 xConfirmPara( m_kneeSEIInputKneePoint[i-1] >= m_kneeSEIInputKneePoint[i], "The i-th SEIKneeFunctionInputKneePointValue must be greather than the (i-1)-th value"); 2242 } 2243 } 2244 } 2245 #endif 2187 2246 2188 2247 #if RC_SHVC_HARMONIZATION -
branches/SHM-6-dev/source/App/TAppEncoder/TAppEncCfg.h
r758 r776 386 386 #endif 387 387 Bool m_crossLayerIrapAlignFlag; 388 #if P0050_KNEE_FUNCTION_SEI 389 Bool m_kneeSEIEnabled; 390 Int m_kneeSEIId; 391 Bool m_kneeSEICancelFlag; 392 Bool m_kneeSEIPersistenceFlag; 393 Bool m_kneeSEIMappingFlag; 394 Int m_kneeSEIInputDrange; 395 Int m_kneeSEIInputDispLuminance; 396 Int m_kneeSEIOutputDrange; 397 Int m_kneeSEIOutputDispLuminance; 398 Int m_kneeSEINumKneePointsMinus1; 399 Int* m_kneeSEIInputKneePoint; 400 Int* m_kneeSEIOutputKneePoint; 401 #endif 388 402 #if P0068_CROSS_LAYER_ALIGNED_IDR_ONLY_FOR_IRAP_FLAG 389 403 Bool m_crossLayerAlignedIdrOnlyFlag; -
branches/SHM-6-dev/source/App/TAppEncoder/TAppEncTop.cpp
r766 r776 485 485 m_acTEncTop[layer].setTMISEINominalWhiteLevelLumaCodeValue ( m_nominalWhiteLevelLumaCodeValue ); 486 486 m_acTEncTop[layer].setTMISEIExtendedWhiteLevelLumaCodeValue ( m_extendedWhiteLevelLumaCodeValue ); 487 #if P0050_KNEE_FUNCTION_SEI 488 m_acTEncTop[layer].setKneeSEIEnabled ( m_kneeSEIEnabled ); 489 m_acTEncTop[layer].setKneeSEIId ( m_kneeSEIId ); 490 m_acTEncTop[layer].setKneeSEICancelFlag ( m_kneeSEICancelFlag ); 491 m_acTEncTop[layer].setKneeSEIPersistenceFlag ( m_kneeSEIPersistenceFlag ); 492 m_acTEncTop[layer].setKneeSEIMappingFlag ( m_kneeSEIMappingFlag ); 493 m_acTEncTop[layer].setKneeSEIInputDrange ( m_kneeSEIInputDrange ); 494 m_acTEncTop[layer].setKneeSEIInputDispLuminance ( m_kneeSEIInputDispLuminance ); 495 m_acTEncTop[layer].setKneeSEIOutputDrange ( m_kneeSEIOutputDrange ); 496 m_acTEncTop[layer].setKneeSEIOutputDispLuminance ( m_kneeSEIOutputDispLuminance ); 497 m_acTEncTop[layer].setKneeSEINumKneePointsMinus1 ( m_kneeSEINumKneePointsMinus1 ); 498 m_acTEncTop[layer].setKneeSEIInputKneePoint ( m_kneeSEIInputKneePoint ); 499 m_acTEncTop[layer].setKneeSEIOutputKneePoint ( m_kneeSEIOutputKneePoint ); 500 #endif 487 501 #if Q0074_SEI_COLOR_MAPPING 488 502 m_acTEncTop[layer].setColorMappingInfoSEIFile ( m_acLayerCfg[layer].m_cSeiColorMappingFile.empty() ? NULL : const_cast<Char *>(m_acLayerCfg[layer].m_cSeiColorMappingFile.c_str()) ); … … 804 818 m_cTEncTop.setTMISEINominalWhiteLevelLumaCodeValue ( m_nominalWhiteLevelLumaCodeValue ); 805 819 m_cTEncTop.setTMISEIExtendedWhiteLevelLumaCodeValue ( m_extendedWhiteLevelLumaCodeValue ); 820 #if P0050_KNEE_FUNCTION_SEI 821 m_cTEncTop.setKneeSEIEnabled ( m_kneeSEIEnabled ); 822 m_cTEncTop.setKneeSEIId ( m_kneeSEIId ); 823 m_cTEncTop.setKneeSEICancelFlag ( m_kneeSEICancelFlag ); 824 m_cTEncTop.setKneeSEIPersistenceFlag ( m_kneeSEIPersistenceFlag ); 825 m_cTEncTop.setKneeSEIMappingFlag ( m_kneeSEIMappingFlag ); 826 m_cTEncTop.setKneeSEIInputDrange ( m_kneeSEIInputDrange ); 827 m_cTEncTop.setKneeSEIInputDispLuminance ( m_kneeSEIInputDispLuminance ); 828 m_cTEncTop.setKneeSEIOutputDrange ( m_kneeSEIOutputDrange ); 829 m_cTEncTop.setKneeSEIOutputDispLuminance ( m_kneeSEIOutputDispLuminance ); 830 m_cTEncTop.setKneeSEINumKneePointsMinus1 ( m_kneeSEINumKneePointsMinus1 ); 831 m_cTEncTop.setKneeSEIInputKneePoint ( m_kneeSEIInputKneePoint ); 832 m_cTEncTop.setKneeSEIOutputKneePoint ( m_kneeSEIOutputKneePoint ); 833 #endif 806 834 #if Q0074_SEI_COLOR_MAPPING 807 835 m_cTEncTop.setColorMappingInfoSEIFile ( m_pchSEIColorMappingFile ); -
branches/SHM-6-dev/source/Lib/TLibCommon/SEI.h
r698 r776 66 66 POST_FILTER_HINT = 22, 67 67 TONE_MAPPING_INFO = 23, 68 #if P0050_KNEE_FUNCTION_SEI 69 KNEE_FUNCTION_INFO = 24, 70 #endif 68 71 FRAME_PACKING = 45, 69 72 DISPLAY_ORIENTATION = 47, … … 407 410 Int m_extendedWhiteLevelLumaCodeValue; 408 411 }; 409 412 #if P0050_KNEE_FUNCTION_SEI 413 class SEIKneeFunctionInfo : public SEI 414 { 415 public: 416 PayloadType payloadType() const { return KNEE_FUNCTION_INFO; } 417 SEIKneeFunctionInfo() {} 418 virtual ~SEIKneeFunctionInfo() {} 419 420 Int m_kneeId; 421 Bool m_kneeCancelFlag; 422 Bool m_kneePersistenceFlag; 423 Bool m_kneeMappingFlag; 424 Int m_kneeInputDrange; 425 Int m_kneeInputDispLuminance; 426 Int m_kneeOutputDrange; 427 Int m_kneeOutputDispLuminance; 428 Int m_kneeNumKneePointsMinus1; 429 std::vector<Int> m_kneeInputKneePoint; 430 std::vector<Int> m_kneeOutputKneePoint; 431 }; 432 #endif 410 433 #if Q0074_SEI_COLOR_MAPPING 411 434 class SEIColorMappingInfo : public SEI -
branches/SHM-6-dev/source/Lib/TLibCommon/TypeDef.h
r773 r776 100 100 #define Q0048_CGS_3D_ASYMLUT 1 ///< JCTVC-Q0048: Colour gamut scalability with look-up table 101 101 #if Q0048_CGS_3D_ASYMLUT 102 102 103 #define CGS_GCC_NO_VECTORIZATION 1 103 104 #define O0194_WEIGHTED_PREDICTION_CGS 0 … … 264 265 #define LAYER_DECPICBUFF_PARAM 1 ///< JCTVC-Q0102 Proposal 2 infer value from layer DPB param 265 266 #define HRD_BPB 1 ///< JCTVC-Q0101 Bitstream Partition Buffering Proposals 267 268 #define P0050_KNEE_FUNCTION_SEI 1 ///< JCTVC-P0050: Knee function SEI 269 266 270 #if VIEW_ID_RELATED_SIGNALING 267 271 /// scalability types -
branches/SHM-6-dev/source/Lib/TLibDecoder/SEIread.cpp
r775 r776 93 93 fprintf( g_hTrace, "===========Tone Mapping Info SEI message ===========\n"); 94 94 break; 95 #if P0050_KNEE_FUNCTION_SEI 96 case SEI::KNEE_FUNCTION_INFO: 97 fprintf( g_hTrace, "=========== Knee Function Information SEI message ===========\n"); 98 break; 99 #endif 95 100 #if Q0074_SEI_COLOR_MAPPING 96 101 case SEI::COLOR_MAPPING_INFO: … … 285 290 xParseSEIToneMappingInfo((SEIToneMappingInfo&) *sei, payloadSize); 286 291 break; 292 #if P0050_KNEE_FUNCTION_SEI 293 case SEI::KNEE_FUNCTION_INFO: 294 sei = new SEIKneeFunctionInfo; 295 xParseSEIKneeFunctionInfo((SEIKneeFunctionInfo&) *sei, payloadSize); 296 break; 297 #endif 287 298 #if Q0074_SEI_COLOR_MAPPING 288 299 case SEI::COLOR_MAPPING_INFO: … … 849 860 } 850 861 862 #if P0050_KNEE_FUNCTION_SEI 863 Void SEIReader::xParseSEIKneeFunctionInfo(SEIKneeFunctionInfo& sei, UInt /*payloadSize*/){ 864 Int i; 865 UInt val; 866 READ_UVLC( val, "knee_function_id" ); sei.m_kneeId = val; 867 READ_FLAG( val, "knee_function_cancel_flag" ); sei.m_kneeCancelFlag = val; 868 if ( !sei.m_kneeCancelFlag ) 869 { 870 READ_FLAG( val, "knee_function_persistence_flag" ); sei.m_kneePersistenceFlag = val; 871 READ_FLAG( val, "mapping_flag" ); sei.m_kneeMappingFlag = val; 872 READ_CODE( 32, val, "input_d_range" ); sei.m_kneeInputDrange = val; 873 READ_CODE( 32, val, "input_disp_luminance" ); sei.m_kneeInputDispLuminance = val; 874 READ_CODE( 32, val, "output_d_range" ); sei.m_kneeOutputDrange = val; 875 READ_CODE( 32, val, "output_disp_luminance" ); sei.m_kneeOutputDispLuminance = val; 876 READ_UVLC( val, "num_knee_points_minus1" ); sei.m_kneeNumKneePointsMinus1 = val; 877 assert( sei.m_kneeNumKneePointsMinus1 > 0 ); 878 sei.m_kneeInputKneePoint.resize(sei.m_kneeNumKneePointsMinus1+1); 879 sei.m_kneeOutputKneePoint.resize(sei.m_kneeNumKneePointsMinus1+1); 880 for(i = 0; i <= sei.m_kneeNumKneePointsMinus1; i++ ) 881 { 882 READ_CODE( 10, val, "input_knee_point" ); sei.m_kneeInputKneePoint[i] = val; 883 READ_CODE( 10, val, "output_knee_point" ); sei.m_kneeOutputKneePoint[i] = val; 884 } 885 } 886 } 887 #endif 888 851 889 #if Q0074_SEI_COLOR_MAPPING 852 890 Void SEIReader::xParseSEIColorMappingInfo(SEIColorMappingInfo& sei, UInt /*payloadSize*/) -
branches/SHM-6-dev/source/Lib/TLibDecoder/SEIread.h
r694 r776 90 90 Void xParseSEIGradualDecodingRefreshInfo (SEIGradualDecodingRefreshInfo &sei, UInt payloadSize); 91 91 Void xParseSEIToneMappingInfo (SEIToneMappingInfo& sei, UInt payloadSize); 92 #if P0050_KNEE_FUNCTION_SEI 93 Void xParseSEIKneeFunctionInfo (SEIKneeFunctionInfo& sei, UInt payloadSize); 94 #endif 92 95 #if Q0074_SEI_COLOR_MAPPING 93 96 Void xParseSEIColorMappingInfo (SEIColorMappingInfo& sei, UInt payloadSize); -
branches/SHM-6-dev/source/Lib/TLibEncoder/SEIwrite.cpp
r774 r776 87 87 fprintf( g_hTrace, "=========== Tone Mapping Info SEI message ===========\n"); 88 88 break; 89 #if P0050_KNEE_FUNCTION_SEI 90 case SEI::KNEE_FUNCTION_INFO: 91 fprintf( g_hTrace, "=========== Knee Function Information SEI message ===========\n"); 92 break; 93 #endif 89 94 #if Q0074_SEI_COLOR_MAPPING 90 95 case SEI::COLOR_MAPPING_INFO: … … 177 182 xWriteSEIToneMappingInfo(*static_cast<const SEIToneMappingInfo*>(&sei)); 178 183 break; 184 #if P0050_KNEE_FUNCTION_SEI 185 case SEI::KNEE_FUNCTION_INFO: 186 xWriteSEIKneeFunctionInfo(*static_cast<const SEIKneeFunctionInfo*>(&sei)); 187 break; 188 #endif 179 189 #if Q0074_SEI_COLOR_MAPPING 180 190 case SEI::COLOR_MAPPING_INFO: … … 575 585 xWriteByteAlign(); 576 586 } 577 587 #if P0050_KNEE_FUNCTION_SEI 588 Void SEIWriter::xWriteSEIKneeFunctionInfo(const SEIKneeFunctionInfo &sei) 589 { 590 WRITE_UVLC( sei.m_kneeId, "knee_function_id" ); 591 WRITE_FLAG( sei.m_kneeCancelFlag, "knee_function_cancel_flag" ); 592 if ( !sei.m_kneeCancelFlag ) 593 { 594 WRITE_FLAG( sei.m_kneePersistenceFlag, "knee_function_persistence_flag" ); 595 WRITE_FLAG( sei.m_kneeMappingFlag, "mapping_flag" ); 596 WRITE_CODE( (UInt)sei.m_kneeInputDrange , 32, "input_d_range" ); 597 WRITE_CODE( (UInt)sei.m_kneeInputDispLuminance, 32, "input_disp_luminance" ); 598 WRITE_CODE( (UInt)sei.m_kneeOutputDrange, 32, "output_d_range" ); 599 WRITE_CODE( (UInt)sei.m_kneeOutputDispLuminance, 32, "output_disp_luminance" ); 600 WRITE_UVLC( sei.m_kneeNumKneePointsMinus1, "num_knee_points_minus1" ); 601 for(Int i = 0; i <= sei.m_kneeNumKneePointsMinus1; i++ ) 602 { 603 WRITE_CODE( (UInt)sei.m_kneeInputKneePoint[i], 10,"input_knee_point" ); 604 WRITE_CODE( (UInt)sei.m_kneeOutputKneePoint[i], 10, "output_knee_point" ); 605 } 606 } 607 xWriteByteAlign(); 608 } 609 #endif 578 610 #if Q0074_SEI_COLOR_MAPPING 579 611 Void SEIWriter::xWriteSEIColorMappingInfo(const SEIColorMappingInfo& sei) -
branches/SHM-6-dev/source/Lib/TLibEncoder/SEIwrite.h
r697 r776 72 72 Void xWriteSEIGradualDecodingRefreshInfo(const SEIGradualDecodingRefreshInfo &sei); 73 73 Void xWriteSEIToneMappingInfo(const SEIToneMappingInfo& sei); 74 #if P0050_KNEE_FUNCTION_SEI 75 Void xWriteSEIKneeFunctionInfo(const SEIKneeFunctionInfo &sei); 76 #endif 74 77 #if Q0074_SEI_COLOR_MAPPING 75 78 Void xWriteSEIColorMappingInfo(const SEIColorMappingInfo& sei); -
branches/SHM-6-dev/source/Lib/TLibEncoder/TEncCfg.h
r756 r776 248 248 Int* m_codedPivotValue; 249 249 Int* m_targetPivotValue; 250 #if P0050_KNEE_FUNCTION_SEI 251 Bool m_kneeSEIEnabled; 252 Int m_kneeSEIId; 253 Bool m_kneeSEICancelFlag; 254 Bool m_kneeSEIPersistenceFlag; 255 Bool m_kneeSEIMappingFlag; 256 Int m_kneeSEIInputDrange; 257 Int m_kneeSEIInputDispLuminance; 258 Int m_kneeSEIOutputDrange; 259 Int m_kneeSEIOutputDispLuminance; 260 Int m_kneeSEINumKneePointsMinus1; 261 Int* m_kneeSEIInputKneePoint; 262 Int* m_kneeSEIOutputKneePoint; 263 #endif 250 264 #if Q0074_SEI_COLOR_MAPPING 251 265 Char* m_seiColorMappingFile; … … 668 682 Void setTMISEIExtendedWhiteLevelLumaCodeValue(Int b) { m_extendedWhiteLevelLumaCodeValue =b; } 669 683 Int getTMISEIExtendedWhiteLevelLumaCodeValue() { return m_extendedWhiteLevelLumaCodeValue; } 684 #if P0050_KNEE_FUNCTION_SEI 685 Void setKneeSEIEnabled(Int b) { m_kneeSEIEnabled = b; } 686 Bool getKneeSEIEnabled() { return m_kneeSEIEnabled; } 687 Void setKneeSEIId(Int b) { m_kneeSEIId = b; } 688 Int getKneeSEIId() { return m_kneeSEIId; } 689 Void setKneeSEICancelFlag(Bool b) { m_kneeSEICancelFlag=b; } 690 Bool getKneeSEICancelFlag() { return m_kneeSEICancelFlag; } 691 Void setKneeSEIPersistenceFlag(Bool b) { m_kneeSEIPersistenceFlag = b; } 692 Bool getKneeSEIPersistenceFlag() { return m_kneeSEIPersistenceFlag; } 693 Void setKneeSEIMappingFlag(Bool b) { m_kneeSEIMappingFlag = b; } 694 Bool getKneeSEIMappingFlag() { return m_kneeSEIMappingFlag; } 695 Void setKneeSEIInputDrange(Int b) { m_kneeSEIInputDrange = b; } 696 Int getKneeSEIInputDrange() { return m_kneeSEIInputDrange; } 697 Void setKneeSEIInputDispLuminance(Int b) { m_kneeSEIInputDispLuminance = b; } 698 Int getKneeSEIInputDispLuminance() { return m_kneeSEIInputDispLuminance; } 699 Void setKneeSEIOutputDrange(Int b) { m_kneeSEIOutputDrange = b; } 700 Int getKneeSEIOutputDrange() { return m_kneeSEIOutputDrange; } 701 Void setKneeSEIOutputDispLuminance(Int b) { m_kneeSEIOutputDispLuminance = b; } 702 Int getKneeSEIOutputDispLuminance() { return m_kneeSEIOutputDispLuminance; } 703 Void setKneeSEINumKneePointsMinus1(Int b) { m_kneeSEINumKneePointsMinus1 = b; } 704 Int getKneeSEINumKneePointsMinus1() { return m_kneeSEINumKneePointsMinus1; } 705 Void setKneeSEIInputKneePoint(Int *p) { m_kneeSEIInputKneePoint = p; } 706 Int* getKneeSEIInputKneePoint() { return m_kneeSEIInputKneePoint; } 707 Void setKneeSEIOutputKneePoint(Int *p) { m_kneeSEIOutputKneePoint = p; } 708 Int* getKneeSEIOutputKneePoint() { return m_kneeSEIOutputKneePoint; } 709 #endif 670 710 #if Q0074_SEI_COLOR_MAPPING 671 711 Void setColorMappingInfoSEIFile( Char* nameFile ) { m_seiColorMappingFile = nameFile; } -
branches/SHM-6-dev/source/Lib/TLibEncoder/TEncGOP.cpp
r771 r776 325 325 } 326 326 327 #if P0050_KNEE_FUNCTION_SEI 328 SEIKneeFunctionInfo* TEncGOP::xCreateSEIKneeFunctionInfo() 329 { 330 SEIKneeFunctionInfo *seiKneeFunctionInfo = new SEIKneeFunctionInfo(); 331 seiKneeFunctionInfo->m_kneeId = m_pcCfg->getKneeSEIId(); 332 seiKneeFunctionInfo->m_kneeCancelFlag = m_pcCfg->getKneeSEICancelFlag(); 333 if ( !seiKneeFunctionInfo->m_kneeCancelFlag ) 334 { 335 seiKneeFunctionInfo->m_kneePersistenceFlag = m_pcCfg->getKneeSEIPersistenceFlag(); 336 seiKneeFunctionInfo->m_kneeMappingFlag = m_pcCfg->getKneeSEIMappingFlag(); 337 seiKneeFunctionInfo->m_kneeInputDrange = m_pcCfg->getKneeSEIInputDrange(); 338 seiKneeFunctionInfo->m_kneeInputDispLuminance = m_pcCfg->getKneeSEIInputDispLuminance(); 339 seiKneeFunctionInfo->m_kneeOutputDrange = m_pcCfg->getKneeSEIOutputDrange(); 340 seiKneeFunctionInfo->m_kneeOutputDispLuminance = m_pcCfg->getKneeSEIOutputDispLuminance(); 341 342 seiKneeFunctionInfo->m_kneeNumKneePointsMinus1 = m_pcCfg->getKneeSEINumKneePointsMinus1(); 343 Int* piInputKneePoint = m_pcCfg->getKneeSEIInputKneePoint(); 344 Int* piOutputKneePoint = m_pcCfg->getKneeSEIOutputKneePoint(); 345 if(piInputKneePoint&&piOutputKneePoint) 346 { 347 seiKneeFunctionInfo->m_kneeInputKneePoint.resize(seiKneeFunctionInfo->m_kneeNumKneePointsMinus1+1); 348 seiKneeFunctionInfo->m_kneeOutputKneePoint.resize(seiKneeFunctionInfo->m_kneeNumKneePointsMinus1+1); 349 for(Int i=0; i<=seiKneeFunctionInfo->m_kneeNumKneePointsMinus1; i++) 350 { 351 seiKneeFunctionInfo->m_kneeInputKneePoint[i] = piInputKneePoint[i]; 352 seiKneeFunctionInfo->m_kneeOutputKneePoint[i] = piOutputKneePoint[i]; 353 } 354 } 355 } 356 return seiKneeFunctionInfo; 357 } 358 #endif 359 327 360 #if Q0074_SEI_COLOR_MAPPING 328 361 SEIColorMappingInfo* TEncGOP::xCreateSEIColorMappingInfo( Char* file ) … … 475 508 delete sei; 476 509 } 510 #if P0050_KNEE_FUNCTION_SEI 511 if(m_pcCfg->getKneeSEIEnabled()) 512 { 513 SEIKneeFunctionInfo *sei = xCreateSEIKneeFunctionInfo(); 514 515 nalu = NALUnit(NAL_UNIT_PREFIX_SEI); 516 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 517 #if O0164_MULTI_LAYER_HRD 518 m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, m_pcEncTop->getVPS(), sps); 519 #else 520 m_seiWriter.writeSEImessage(nalu.m_Bitstream, *sei, sps); 521 #endif 522 writeRBSPTrailingBits(nalu.m_Bitstream); 523 accessUnit.push_back(new NALUnitEBSP(nalu)); 524 delete sei; 525 } 526 #endif 477 527 #if Q0074_SEI_COLOR_MAPPING 478 528 if(m_pcCfg->getColorMappingInfoSEIFile()) -
branches/SHM-6-dev/source/Lib/TLibEncoder/TEncGOP.h
r754 r776 207 207 208 208 SEIToneMappingInfo* xCreateSEIToneMappingInfo(); 209 #if P0050_KNEE_FUNCTION_SEI 210 SEIKneeFunctionInfo* xCreateSEIKneeFunctionInfo(); 211 #endif 209 212 #if Q0074_SEI_COLOR_MAPPING 210 213 SEIColorMappingInfo* xCreateSEIColorMappingInfo( Char* file );
Note: See TracChangeset for help on using the changeset viewer.