Changeset 1328 in 3DVCSoftware for branches/HTM-15.1-dev0/source/Lib/TLibEncoder
- Timestamp:
- 14 Sep 2015, 19:41:29 (10 years ago)
- Location:
- branches/HTM-15.1-dev0/source/Lib/TLibEncoder
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-15.1-dev0/source/Lib/TLibEncoder/SEIEncoder.cpp
r1313 r1328 465 465 466 466 #if NH_MV 467 #if !NH_MV_SEI 467 468 Void SEIEncoder::initSEISubBitstreamProperty(SEISubBitstreamProperty *seiSubBitstreamProperty, const TComSPS *sps) 468 469 { … … 476 477 seiSubBitstreamProperty->m_maxBitRate = m_pcCfg->getMaxBitRate(); 477 478 } 479 #else 480 Void SEIEncoder::createAnnexFGISeiMessages( SEIMessages& seiMessage, const TComSlice* slice ) 481 { 482 const SEIMessages* seiMessageCfg = m_pcCfg->getSeiMessages(); 483 484 for( SEIMessages::const_iterator itS = seiMessageCfg->begin(); itS != seiMessageCfg->end(); itS++ ) 485 { 486 const SEI* curSei = (*itS); 487 SEI* newSei; 488 if ( curSei->insertSei( slice->getLayerId(), slice->getPOC(), slice->getTemporalId(), slice->getNalUnitType() ) ) 489 { 490 newSei = curSei->getCopy( ) ; 491 492 if ( curSei->m_modifyByEncoder ) 493 { 494 newSei->setupFromSlice ( slice ); 495 } 496 497 if ( newSei ->checkCfg( slice ) ) 498 { 499 std::cout << "--> Omit sending SEI." << std::endl; 500 delete newSei; 501 } 502 else 503 { 504 seiMessage.push_back(newSei); 505 } 506 507 } 508 } 509 } 478 510 #endif 511 #endif 479 512 480 513 //! \} -
branches/HTM-15.1-dev0/source/Lib/TLibEncoder/SEIEncoder.h
r1313 r1328 86 86 Void initTemporalLevel0IndexSEI(SEITemporalLevel0Index *sei, TComSlice *slice); 87 87 #if NH_MV 88 #if !NH_MV_SEI 88 89 Void initSEISubBitstreamProperty(SEISubBitstreamProperty *seiSubBitstreamProperty, const TComSPS *sps); 90 #else 91 Void createAnnexFGISeiMessages( SEIMessages& seiMessage, const TComSlice* slice );; 92 #endif 89 93 #endif 90 94 private: -
branches/HTM-15.1-dev0/source/Lib/TLibEncoder/SEIwrite.cpp
r1313 r1328 122 122 break; 123 123 #if NH_MV 124 #if !NH_MV_SEI 124 125 case SEI::SUB_BITSTREAM_PROPERTY: 125 126 xWriteSEISubBitstreamProperty(*static_cast<const SEISubBitstreamProperty*>(&sei)); 126 127 break; 127 128 #endif 129 #endif 130 #if NH_MV_SEI 131 #if NH_MV_SEI_TBD 132 case SEI::LAYERS_NOT_PRESENT: 133 xWriteSEILayersNotPresent(*static_cast<const SEILayersNotPresent*>(&sei)); 134 break; 135 #endif 136 case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS: 137 xWriteSEIInterLayerConstrainedTileSets(*static_cast<const SEIInterLayerConstrainedTileSets*>(&sei)); 138 break; 139 #if NH_MV_SEI_TBD 140 case SEI::BSP_NESTING: 141 xWriteSEIBspNesting(*static_cast<const SEIBspNesting*>(&sei)); 142 break; 143 case SEI::BSP_INITIAL_ARRIVAL_TIME: 144 xWriteSEIBspInitialArrivalTime(*static_cast<const SEIBspInitialArrivalTime*>(&sei)); 145 break; 146 #endif 147 case SEI::SUB_BITSTREAM_PROPERTY: 148 xWriteSEISubBitstreamProperty(*static_cast<const SEISubBitstreamProperty*>(&sei)); 149 break; 150 #if NH_MV_SEI_TBD 151 case SEI::ALPHA_CHANNEL_INFO: 152 xWriteSEIAlphaChannelInfo(*static_cast<const SEIAlphaChannelInfo*>(&sei)); 153 break; 154 case SEI::OVERLAY_INFO: 155 xWriteSEIOverlayInfo(*static_cast<const SEIOverlayInfo*>(&sei)); 156 break; 157 #endif 158 case SEI::TEMPORAL_MV_PREDICTION_CONSTRAINTS: 159 xWriteSEITemporalMvPredictionConstraints(*static_cast<const SEITemporalMvPredictionConstraints*>(&sei)); 160 break; 161 #if NH_MV_SEI_TBD 162 case SEI::FRAME_FIELD_INFO: 163 xWriteSEIFrameFieldInfo(*static_cast<const SEIFrameFieldInfo*>(&sei)); 164 break; 165 case SEI::THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO: 166 xWriteSEIThreeDimensionalReferenceDisplaysInfo(*static_cast<const SEIThreeDimensionalReferenceDisplaysInfo*>(&sei)); 167 break; 168 case SEI::DEPTH_REPRESENTATION_INFO: 169 xWriteSEIDepthRepresentationInfo(*static_cast<const SEIDepthRepresentationInfo*>(&sei)); 170 break; 171 #endif 172 case SEI::MULTIVIEW_SCENE_INFO: 173 xWriteSEIMultiviewSceneInfo(*static_cast<const SEIMultiviewSceneInfo*>(&sei)); 174 break; 175 case SEI::MULTIVIEW_ACQUISITION_INFO: 176 xWriteSEIMultiviewAcquisitionInfo(*static_cast<const SEIMultiviewAcquisitionInfo*>(&sei)); 177 break; 178 179 case SEI::MULTIVIEW_VIEW_POSITION: 180 xWriteSEIMultiviewViewPosition(*static_cast<const SEIMultiviewViewPosition*>(&sei)); 181 break; 182 #if NH_MV_SEI_TBD 183 case SEI::ALTERNATIVE_DEPTH_INFO: 184 xWriteSEIAlternativeDepthInfo(*static_cast<const SEIAlternativeDepthInfo*>(&sei)); 185 break; 186 #endif 187 #endif 188 128 189 129 190 default: … … 748 809 749 810 #if NH_MV 811 #if !NH_MV_SEI 750 812 Void SEIWriter::xWriteSEISubBitstreamProperty(const SEISubBitstreamProperty &sei) 751 813 { … … 764 826 xWriteByteAlign(); 765 827 } 828 #endif 766 829 #endif 767 830 … … 818 881 } 819 882 883 #if NH_MV_SEI_TBD 884 Void SEIWriter::xWriteSEILayersNotPresent( const SEILayersNotPresent& sei) 885 { 886 WRITE_CODE( sei.m_lnpSeiActiveVpsId, 4, "lnp_sei_active_vps_id" ); 887 for( Int i = 0; i <= MaxLayersMinus1; i++ ) 888 { 889 WRITE_FLAG( ( sei.m_layerNotPresentFlag[i] ? 1 : 0 ), "layer_not_present_flag" ); 890 } 891 }; 892 #endif 893 894 895 896 Void SEIWriter::xWriteSEIInterLayerConstrainedTileSets( const SEIInterLayerConstrainedTileSets& sei) 897 { 898 WRITE_FLAG( ( sei.m_ilAllTilesExactSampleValueMatchFlag ? 1 : 0 ), "il_all_tiles_exact_sample_value_match_flag" ); 899 WRITE_FLAG( ( sei.m_ilOneTilePerTileSetFlag ? 1 : 0 ), "il_one_tile_per_tile_set_flag" ); 900 if( !sei.m_ilOneTilePerTileSetFlag ) 901 { 902 WRITE_UVLC( sei.m_ilNumSetsInMessageMinus1, "il_num_sets_in_message_minus1" ); 903 if( sei.m_ilNumSetsInMessageMinus1 ) 904 { 905 WRITE_FLAG( ( sei.m_skippedTileSetPresentFlag ? 1 : 0 ), "skipped_tile_set_present_flag" ); 906 } 907 Int numSignificantSets = sei.m_ilNumSetsInMessageMinus1 - sei.m_skippedTileSetPresentFlag + 1; 908 for( Int i = 0; i < numSignificantSets; i++ ) 909 { 910 WRITE_UVLC( sei.m_ilctsId[i], "ilcts_id" ); 911 WRITE_UVLC( sei.m_ilNumTileRectsInSetMinus1[i], "il_num_tile_rects_in_set_minus1" ); 912 for( Int j = 0; j <= sei.m_ilNumTileRectsInSetMinus1[ i ]; j++ ) 913 { 914 WRITE_UVLC( sei.m_ilTopLeftTileIndex[i][j], "il_top_left_tile_index" ); 915 WRITE_UVLC( sei.m_ilBottomRightTileIndex[i][j], "il_bottom_right_tile_index" ); 916 } 917 WRITE_CODE( sei.m_ilcIdc[i], 2, "ilc_idc" ); 918 if ( !sei.m_ilAllTilesExactSampleValueMatchFlag ) 919 { 920 WRITE_FLAG( ( sei.m_ilExactSampleValueMatchFlag[i] ? 1 : 0 ), "il_exact_sample_value_match_flag" ); 921 } 922 } 923 } 924 else 925 { 926 WRITE_CODE( sei.m_allTilesIlcIdc, 2, "all_tiles_ilc_idc" ); 927 } 928 }; 929 930 #if NH_MV_SEI_TBD 931 Void SEIWriter::xWriteSEIBspNesting( const SEIBspNesting& sei) 932 { 933 WRITE_UVLC( sei.m_seiOlsIdx, "sei_ols_idx" ); 934 WRITE_UVLC( sei.m_seiPartitioningSchemeIdx, "sei_partitioning_scheme_idx" ); 935 WRITE_UVLC( sei.m_bspIdx, "bsp_idx" ); 936 while( !ByteaLigned(() ) ); 937 { 938 WRITE_CODE( sei.m_bspNestingZeroBit, *equalto0*/u1, "bsp_nesting_zero_bit" ); 939 } 940 WRITE_UVLC( sei.m_numSeisInBspMinus1, "num_seis_in_bsp_minus1" ); 941 for( Int i = 0; i <= NumSeisInBspMinus1( ); i++ ) 942 { 943 SeiMessage(() ); 944 } 945 }; 946 947 Void SEIWriter::xWriteSEIBspInitialArrivalTime( const SEIBspInitialArrivalTime& sei) 948 { 949 psIdx = SeiPartitioningSchemeIdx(); 950 if( nalInitialArrivalDelayPresent ) 951 { 952 for( Int i = 0; i < BspSchedCnt( SeiOlsIdx(), psIdx, MaxTemporalId( 0 ) ); i++ ) 953 { 954 WRITE_CODE( sei.m_nalInitialArrivalDelay[i], getNalInitialArrivalDelayLen ), "nal_initial_arrival_delay" ); 955 } 956 } 957 if( vclInitialArrivalDelayPresent ) 958 { 959 for( Int i = 0; i < BspSchedCnt( SeiOlsIdx(), psIdx, MaxTemporalId( 0 ) ); i++ ) 960 { 961 WRITE_CODE( sei.m_vclInitialArrivalDelay[i], getVclInitialArrivalDelayLen ), "vcl_initial_arrival_delay" ); 962 } 963 } 964 }; 965 #endif 966 Void SEIWriter::xWriteSEISubBitstreamProperty( const SEISubBitstreamProperty& sei) 967 { 968 WRITE_CODE( sei.m_sbPropertyActiveVpsId, 4, "sb_property_active_vps_id" ); 969 WRITE_UVLC( sei.m_numAdditionalSubStreamsMinus1, "num_additional_sub_streams_minus1" ); 970 for( Int i = 0; i <= sei.m_numAdditionalSubStreamsMinus1; i++ ) 971 { 972 WRITE_CODE( sei.m_subBitstreamMode [i], 2, "sub_bitstream_mode" ); 973 WRITE_UVLC( sei.m_olsIdxToVps [i], "ols_idx_to_vps" ); 974 WRITE_CODE( sei.m_highestSublayerId [i], 3, "highest_sublayer_id" ); 975 WRITE_CODE( sei.m_avgSbPropertyBitRate[i], 16, "avg_sb_property_bit_rate" ); 976 WRITE_CODE( sei.m_maxSbPropertyBitRate[i], 16, "max_sb_property_bit_rate" ); 977 } 978 }; 979 #if NH_MV_SEI_TBD 980 Void SEIWriter::xWriteSEIAlphaChannelInfo( const SEIAlphaChannelInfo& sei) 981 { 982 WRITE_FLAG( ( sei.m_alphaChannelCancelFlag ? 1 : 0 ), "alpha_channel_cancel_flag" ); 983 if( !sei.m_alphaChannelCancelFlag ) 984 { 985 WRITE_CODE( sei.m_alphaChannelUseIdc, 3, "alpha_channel_use_idc" ); 986 WRITE_CODE( sei.m_alphaChannelBitDepthMinus8, 3, "alpha_channel_bit_depth_minus8" ); 987 WRITE_CODE( sei.m_alphaTransparentValue, getAlphaTransparentValueLen ), "alpha_transparent_value" ); 988 WRITE_CODE( sei.m_alphaOpaqueValue, getAlphaOpaqueValueLen ), "alpha_opaque_value" ); 989 WRITE_FLAG( ( sei.m_alphaChannelIncrFlag ? 1 : 0 ), "alpha_channel_incr_flag" ); 990 WRITE_FLAG( ( sei.m_alphaChannelClipFlag ? 1 : 0 ), "alpha_channel_clip_flag" ); 991 if( sei.m_alphaChannelClipFlag ) 992 { 993 WRITE_FLAG( ( sei.m_alphaChannelClipTypeFlag ? 1 : 0 ), "alpha_channel_clip_type_flag" ); 994 } 995 } 996 }; 997 998 Void SEIWriter::xWriteSEIOverlayInfo( const SEIOverlayInfo& sei) 999 { 1000 WRITE_FLAG( ( sei.m_overlayInfoCancelFlag ? 1 : 0 ), "overlay_info_cancel_flag" ); 1001 if( !sei.m_overlayInfoCancelFlag ) 1002 { 1003 WRITE_UVLC( sei.m_overlayContentAuxIdMinus128, "overlay_content_aux_id_minus128" ); 1004 WRITE_UVLC( sei.m_overlayLabelAuxIdMinus128, "overlay_label_aux_id_minus128" ); 1005 WRITE_UVLC( sei.m_overlayAlphaAuxIdMinus128, "overlay_alpha_aux_id_minus128" ); 1006 WRITE_UVLC( sei.m_overlayElementLabelValueLengthMinus8, "overlay_element_label_value_length_minus8" ); 1007 WRITE_UVLC( sei.m_numOverlaysMinus1, "num_overlays_minus1" ); 1008 for( Int i = 0; i <= NumOverlaysMinus1( ); i++ ) 1009 { 1010 WRITE_UVLC( sei.m_overlayIdx[i], "overlay_idx" ); 1011 WRITE_FLAG( ( sei.m_languageOverlayPresentFlag[i] ? 1 : 0 ), "language_overlay_present_flag" ); 1012 WRITE_CODE( sei.m_overlayContentLayerId[i], 6, "overlay_content_layer_id" ); 1013 WRITE_FLAG( ( sei.m_overlayLabelPresentFlag[i] ? 1 : 0 ), "overlay_label_present_flag" ); 1014 if( sei.m_overlayLabelPresentFlag( i ) ) 1015 { 1016 WRITE_CODE( sei.m_overlayLabelLayerId[i], 6, "overlay_label_layer_id" ); 1017 } 1018 WRITE_FLAG( ( sei.m_overlayAlphaPresentFlag[i] ? 1 : 0 ), "overlay_alpha_present_flag" ); 1019 if( sei.m_overlayAlphaPresentFlag( i ) ) 1020 { 1021 WRITE_CODE( sei.m_overlayAlphaLayerId[i], 6, "overlay_alpha_layer_id" ); 1022 } 1023 if( sei.m_overlayLabelPresentFlag( i ) ) 1024 { 1025 WRITE_UVLC( sei.m_numOverlayElementsMinus1[i], "num_overlay_elements_minus1" ); 1026 for( Int j = 0; j <= sei.m_numOverlayElementsMinus1( i ); j++ ) 1027 { 1028 WRITE_CODE( sei.m_overlayElementLabelMin[i][j], getOverlayElementLabelMinLen ), "overlay_element_label_min" ); 1029 WRITE_CODE( sei.m_overlayElementLabelMax[i][j], getOverlayElementLabelMaxLen ), "overlay_element_label_max" ); 1030 } 1031 } 1032 } 1033 while( !ByteaLigned(() ) ); 1034 { 1035 WRITE_CODE( sei.m_overlayZeroBit, *equalto0*/f1, "overlay_zero_bit" ); 1036 } 1037 for( Int i = 0; i <= NumOverlaysMinus1( ); i++ ) 1038 { 1039 if( sei.m_languageOverlayPresentFlag( i ) ) 1040 { 1041 WRITE_CODE( sei.m_overlayLanguage[i], tv, "overlay_language" ); 1042 } 1043 WRITE_CODE( sei.m_overlayName[i], tv, "overlay_name" ); 1044 if( sei.m_overlayLabelPresentFlag( i ) ) 1045 { 1046 for( Int j = 0; j <= sei.m_numOverlayElementsMinus1( i ); j++ ) 1047 { 1048 WRITE_CODE( sei.m_overlayElementName[i][j], tv, "overlay_element_name" ); 1049 } 1050 } 1051 } 1052 WRITE_FLAG( ( sei.m_overlayInfoPersistenceFlag ? 1 : 0 ), "overlay_info_persistence_flag" ); 1053 } 1054 }; 1055 #endif 1056 1057 Void SEIWriter::xWriteSEITemporalMvPredictionConstraints( const SEITemporalMvPredictionConstraints& sei) 1058 { 1059 WRITE_FLAG( ( sei.m_prevPicsNotUsedFlag ? 1 : 0 ), "prev_pics_not_used_flag" ); 1060 WRITE_FLAG( ( sei.m_noIntraLayerColPicFlag ? 1 : 0 ), "no_intra_layer_col_pic_flag" ); 1061 }; 1062 1063 #if NH_MV_SEI_TBD 1064 Void SEIWriter::xWriteSEIFrameFieldInfo( const SEIFrameFieldInfo& sei) 1065 { 1066 WRITE_CODE( sei.m_ffinfoPicStruct, 4, "ffinfo_pic_struct" ); 1067 WRITE_CODE( sei.m_ffinfoSourceScanType, 2, "ffinfo_source_scan_type" ); 1068 WRITE_FLAG( ( sei.m_ffinfoDuplicateFlag ? 1 : 0 ), "ffinfo_duplicate_flag" ); 1069 }; 1070 1071 Void SEIWriter::xWriteSEIThreeDimensionalReferenceDisplaysInfo( const SEIThreeDimensionalReferenceDisplaysInfo& sei) 1072 { 1073 WRITE_UVLC( sei.m_precRefDisplayWidth, "prec_ref_display_width" ); 1074 WRITE_FLAG( ( sei.m_refViewingDistanceFlag ? 1 : 0 ), "ref_viewing_distance_flag" ); 1075 if( sei.m_refViewingDistanceFlag ) 1076 { 1077 WRITE_UVLC( sei.m_precRefViewingDist, "prec_ref_viewing_dist" ); 1078 } 1079 WRITE_UVLC( sei.m_numRefDisplaysMinus1, "num_ref_displays_minus1" ); 1080 for( Int i = 0; i <= NumRefDisplaysMinus1( ); i++ ) 1081 { 1082 WRITE_UVLC( sei.m_leftViewId[i], "left_view_id" ); 1083 WRITE_UVLC( sei.m_rightViewId[i], "right_view_id" ); 1084 WRITE_CODE( sei.m_exponentRefDisplayWidth[i], 6, "exponent_ref_display_width" ); 1085 WRITE_CODE( sei.m_mantissaRefDisplayWidth[i], getMantissaRefDisplayWidthLen ), "mantissa_ref_display_width" ); 1086 if( sei.m_refViewingDistanceFlag ) 1087 { 1088 WRITE_CODE( sei.m_exponentRefViewingDistance[i], 6, "exponent_ref_viewing_distance" ); 1089 WRITE_CODE( sei.m_mantissaRefViewingDistance[i], getMantissaRefViewingDistanceLen ), "mantissa_ref_viewing_distance" ); 1090 } 1091 WRITE_FLAG( ( sei.m_additionalShiftPresentFlag[i] ? 1 : 0 ), "additional_shift_present_flag" ); 1092 if( sei.m_additionalShiftPresentFlag( i ) ) 1093 { 1094 WRITE_CODE( sei.m_numSampleShiftPlus512[i], 10, "num_sample_shift_plus512" ); 1095 } 1096 } 1097 WRITE_FLAG( ( sei.m_threeDimensionalReferenceDisplaysExtensionFlag ? 1 : 0 ), "three_dimensional_reference_displays_extension_flag" ); 1098 }; 1099 1100 Void SEIWriter::xWriteSEIDepthRepresentationInfo( const SEIDepthRepresentationInfo& sei) 1101 { 1102 WRITE_FLAG( ( sei.m_zNearFlag ? 1 : 0 ), "z_near_flag" ); 1103 WRITE_FLAG( ( sei.m_zFarFlag ? 1 : 0 ), "z_far_flag" ); 1104 WRITE_FLAG( ( sei.m_dMinFlag ? 1 : 0 ), "d_min_flag" ); 1105 WRITE_FLAG( ( sei.m_dMaxFlag ? 1 : 0 ), "d_max_flag" ); 1106 WRITE_UVLC( sei.m_depthRepresentationType, "depth_representation_type" ); 1107 if( sei.m_dMinFlag | | sei.m_dMaxFlag ) 1108 { 1109 WRITE_UVLC( sei.m_disparityRefViewId, "disparity_ref_view_id" ); 1110 } 1111 if( sei.m_zNearFlag ) 1112 { 1113 DepthRepInfoElement(() ZNearSign, ZNearExp, ZNearMantissa, ZNearManLen ); 1114 } 1115 if( sei.m_zFarFlag ) 1116 { 1117 DepthRepInfoElement(() ZFarSign, ZFarExp, ZFarMantissa, ZFarManLen ); 1118 } 1119 if( sei.m_dMinFlag ) 1120 { 1121 DepthRepInfoElement(() DMinSign, DMinExp, DMinMantissa, DMinManLen ); 1122 } 1123 if( sei.m_dMaxFlag ) 1124 { 1125 DepthRepInfoElement(() DMaxSign, DMaxExp, DMaxMantissa, DMaxManLen ); 1126 } 1127 if( sei.m_depthRepresentationType == 3 ) 1128 { 1129 WRITE_UVLC( sei.m_depthNonlinearRepresentationNumMinus1, "depth_nonlinear_representation_num_minus1" ); 1130 for( Int i = 1; i <= sei.m_depthNonlinearRepresentationNumMinus1 + 1; i++ ) 1131 { 1132 DepthNonlinearRepresentationModel( i ); 1133 } 1134 } 1135 }; 1136 1137 Void SEIWriter::xWriteSEIDepthRepInfoElement( const SEIDepthRepInfoElement& sei) 1138 { 1139 WRITE_FLAG( ( sei.m_daSignFlag ? 1 : 0 ), "da_sign_flag" ); 1140 WRITE_CODE( sei.m_daExponent, 7, "da_exponent" ); 1141 WRITE_CODE( sei.m_daMantissaLenMinus1, 5, "da_mantissa_len_minus1" ); 1142 WRITE_CODE( sei.m_daMantissa, getDaMantissaLen ), "da_mantissa" ); 1143 }; 1144 1145 #endif 1146 Void SEIWriter::xWriteSEIMultiviewSceneInfo( const SEIMultiviewSceneInfo& sei) 1147 { 1148 WRITE_SVLC( sei.m_minDisparity , "min_disparity" ); 1149 WRITE_UVLC( sei.m_maxDisparityRange, "max_disparity_range" ); 1150 }; 1151 1152 1153 Void SEIWriter::xWriteSEIMultiviewAcquisitionInfo( const SEIMultiviewAcquisitionInfo& sei) 1154 { 1155 WRITE_FLAG( ( sei.m_intrinsicParamFlag ? 1 : 0 ), "intrinsic_param_flag" ); 1156 WRITE_FLAG( ( sei.m_extrinsicParamFlag ? 1 : 0 ), "extrinsic_param_flag" ); 1157 if( sei.m_intrinsicParamFlag ) 1158 { 1159 WRITE_FLAG( ( sei.m_intrinsicParamsEqualFlag ? 1 : 0 ), "intrinsic_params_equal_flag" ); 1160 WRITE_UVLC( sei.m_precFocalLength , "prec_focal_length" ); 1161 WRITE_UVLC( sei.m_precPrincipalPoint , "prec_principal_point" ); 1162 WRITE_UVLC( sei.m_precSkewFactor , "prec_skew_factor" ); 1163 1164 for( Int i = 0; i <= ( sei.m_intrinsicParamsEqualFlag ? 0 : sei.getNumViewsMinus1() ); i++ ) 1165 { 1166 WRITE_FLAG( ( sei.m_signFocalLengthX [i] ? 1 : 0 ), "sign_focal_length_x" ); 1167 WRITE_CODE( sei.m_exponentFocalLengthX [i] , 6 , "exponent_focal_length_x" ); 1168 WRITE_CODE( sei.m_mantissaFocalLengthX [i] , sei.getMantissaFocalLengthXLen( i ), "mantissa_focal_length_x" ); 1169 WRITE_FLAG( ( sei.m_signFocalLengthY [i] ? 1 : 0 ), "sign_focal_length_y" ); 1170 WRITE_CODE( sei.m_exponentFocalLengthY [i] , 6 , "exponent_focal_length_y" ); 1171 WRITE_CODE( sei.m_mantissaFocalLengthY [i] , sei.getMantissaFocalLengthYLen( i ), "mantissa_focal_length_y" ); 1172 WRITE_FLAG( ( sei.m_signPrincipalPointX [i] ? 1 : 0 ), "sign_principal_point_x" ); 1173 WRITE_CODE( sei.m_exponentPrincipalPointX[i] , 6, "exponent_principal_point_x" ); 1174 WRITE_CODE( sei.m_mantissaPrincipalPointX[i] , sei.getMantissaPrincipalPointXLen( i ), "mantissa_principal_point_x" ); 1175 WRITE_FLAG( ( sei.m_signPrincipalPointY [i] ? 1 : 0 ), "sign_principal_point_y" ); 1176 WRITE_CODE( sei.m_exponentPrincipalPointY[i] , 6, "exponent_principal_point_y" ); 1177 WRITE_CODE( sei.m_mantissaPrincipalPointY[i] , sei.getMantissaPrincipalPointYLen( i ), "mantissa_principal_point_y" ); 1178 WRITE_FLAG( ( sei.m_signSkewFactor [i] ? 1 : 0 ), "sign_skew_factor" ); 1179 WRITE_CODE( sei.m_exponentSkewFactor [i] , 6, "exponent_skew_factor" ); 1180 WRITE_CODE( sei.m_mantissaSkewFactor [i] , sei.getMantissaSkewFactorLen( i ) , "mantissa_skew_factor" ); 1181 } 1182 } 1183 if( sei.m_extrinsicParamFlag ) 1184 { 1185 WRITE_UVLC( sei.m_precRotationParam , "prec_rotation_param" ); 1186 WRITE_UVLC( sei.m_precTranslationParam, "prec_translation_param" ); 1187 for( Int i = 0; i <= sei.getNumViewsMinus1(); i++ ) 1188 { 1189 for( Int j = 0; j <= 2; j++ ) /* row */ 1190 { 1191 for( Int k = 0; k <= 2; k++ ) /* column */ 1192 { 1193 WRITE_FLAG( ( sei.m_signR [i][j][k] ? 1 : 0 ), "sign_r" ); 1194 WRITE_CODE( sei.m_exponentR[i][j][k] , 6, "exponent_r" ); 1195 WRITE_CODE( sei.m_mantissaR[i][j][k] , sei.getMantissaRLen( i,j,k ) , "mantissa_r" ); 1196 } 1197 WRITE_FLAG( ( sei.m_signT [i][j] ? 1 : 0 ), "sign_t" ); 1198 WRITE_CODE( sei.m_exponentT[i][j] , 6, "exponent_t" ); 1199 WRITE_CODE( sei.m_mantissaT[i][j] , sei.getMantissaTLen( i,j ),"mantissa_t" ); 1200 } 1201 } 1202 } 1203 }; 1204 1205 1206 #if NH_MV_SEI 1207 Void SEIWriter::xWriteSEIMultiviewViewPosition( const SEIMultiviewViewPosition& sei) 1208 { 1209 WRITE_UVLC( sei.m_numViewsMinus1, "num_views_minus1" ); 1210 for( Int i = 0; i <= sei.m_numViewsMinus1; i++ ) 1211 { 1212 WRITE_UVLC( sei.m_viewPosition[i], "view_position" ); 1213 } 1214 }; 1215 #endif 1216 1217 #if NH_MV_SEI_TBD 1218 Void SEIWriter::xWriteSEIAlternativeDepthInfo( const SEIAlternativeDepthInfo& sei) 1219 { 1220 WRITE_FLAG( ( sei.m_alternativeDepthInfoCancelFlag ? 1 : 0 ), "alternative_depth_info_cancel_flag" ); 1221 if( sei.m_alternativeDepthInfoCancelFlag == 0 ) 1222 { 1223 WRITE_CODE( sei.m_depthType, 2, "depth_type" ); 1224 if( sei.m_depthType == 0 ) 1225 { 1226 WRITE_UVLC( sei.m_numConstituentViewsGvdMinus1, "num_constituent_views_gvd_minus1" ); 1227 WRITE_FLAG( ( sei.m_depthPresentGvdFlag ? 1 : 0 ), "depth_present_gvd_flag" ); 1228 WRITE_FLAG( ( sei.m_zGvdFlag ? 1 : 0 ), "z_gvd_flag" ); 1229 WRITE_FLAG( ( sei.m_intrinsicParamGvdFlag ? 1 : 0 ), "intrinsic_param_gvd_flag" ); 1230 WRITE_FLAG( ( sei.m_rotationGvdFlag ? 1 : 0 ), "rotation_gvd_flag" ); 1231 WRITE_FLAG( ( sei.m_translationGvdFlag ? 1 : 0 ), "translation_gvd_flag" ); 1232 if( sei.m_zGvdFlag ) 1233 { 1234 for( Int i = 0; i <= sei.m_numConstituentViewsGvdMinus1 + 1; i++ ) 1235 { 1236 WRITE_FLAG( ( sei.m_signGvdZNearFlag[i] ? 1 : 0 ), "sign_gvd_z_near_flag" ); 1237 WRITE_CODE( sei.m_expGvdZNear[i], 7, "exp_gvd_z_near" ); 1238 WRITE_CODE( sei.m_manLenGvdZNearMinus1[i], 5, "man_len_gvd_z_near_minus1" ); 1239 WRITE_CODE( sei.m_manGvdZNear[i], getManGvdZNearLen ), "man_gvd_z_near" ); 1240 WRITE_FLAG( ( sei.m_signGvdZFarFlag[i] ? 1 : 0 ), "sign_gvd_z_far_flag" ); 1241 WRITE_CODE( sei.m_expGvdZFar[i], 7, "exp_gvd_z_far" ); 1242 WRITE_CODE( sei.m_manLenGvdZFarMinus1[i], 5, "man_len_gvd_z_far_minus1" ); 1243 WRITE_CODE( sei.m_manGvdZFar[i], getManGvdZFarLen ), "man_gvd_z_far" ); 1244 } 1245 } 1246 if( sei.m_intrinsicParamGvdFlag ) 1247 { 1248 WRITE_UVLC( sei.m_precGvdFocalLength, "prec_gvd_focal_length" ); 1249 WRITE_UVLC( sei.m_precGvdPrincipalPoint, "prec_gvd_principal_point" ); 1250 } 1251 if( sei.m_rotationGvdFlag ) 1252 { 1253 WRITE_UVLC( sei.m_precGvdRotationParam, "prec_gvd_rotation_param" ); 1254 } 1255 if( sei.m_translationGvdFlag ) 1256 { 1257 WRITE_UVLC( sei.m_precGvdTranslationParam, "prec_gvd_translation_param" ); 1258 } 1259 for( Int i = 0; i <= sei.m_numConstituentViewsGvdMinus1 + 1; i++ ) 1260 { 1261 if( sei.m_intrinsicParamGvdFlag ) 1262 { 1263 WRITE_FLAG( ( sei.m_signGvdFocalLengthX[i] ? 1 : 0 ), "sign_gvd_focal_length_x" ); 1264 WRITE_CODE( sei.m_expGvdFocalLengthX[i], 6, "exp_gvd_focal_length_x" ); 1265 WRITE_CODE( sei.m_manGvdFocalLengthX[i], getManGvdFocalLengthXLen ), "man_gvd_focal_length_x" ); 1266 WRITE_FLAG( ( sei.m_signGvdFocalLengthY[i] ? 1 : 0 ), "sign_gvd_focal_length_y" ); 1267 WRITE_CODE( sei.m_expGvdFocalLengthY[i], 6, "exp_gvd_focal_length_y" ); 1268 WRITE_CODE( sei.m_manGvdFocalLengthY[i], getManGvdFocalLengthYLen ), "man_gvd_focal_length_y" ); 1269 WRITE_FLAG( ( sei.m_signGvdPrincipalPointX[i] ? 1 : 0 ), "sign_gvd_principal_point_x" ); 1270 WRITE_CODE( sei.m_expGvdPrincipalPointX[i], 6, "exp_gvd_principal_point_x" ); 1271 WRITE_CODE( sei.m_manGvdPrincipalPointX[i], getManGvdPrincipalPointXLen ), "man_gvd_principal_point_x" ); 1272 WRITE_FLAG( ( sei.m_signGvdPrincipalPointY[i] ? 1 : 0 ), "sign_gvd_principal_point_y" ); 1273 WRITE_CODE( sei.m_expGvdPrincipalPointY[i], 6, "exp_gvd_principal_point_y" ); 1274 WRITE_CODE( sei.m_manGvdPrincipalPointY[i], getManGvdPrincipalPointYLen ), "man_gvd_principal_point_y" ); 1275 } 1276 if( sei.m_rotationGvdFlag ) 1277 { 1278 for( Int j = 10; j <= 3; j++ ) /* row */ 1279 { 1280 for( Int k = 10; k <= 3; k++ ) /* column */ 1281 { 1282 WRITE_FLAG( ( sei.m_signGvdR[i][j][k] ? 1 : 0 ), "sign_gvd_r" ); 1283 WRITE_CODE( sei.m_expGvdR[i][j][k], 6, "exp_gvd_r" ); 1284 WRITE_CODE( sei.m_manGvdR[i][j][k], getManGvdRLen ), "man_gvd_r" ); 1285 } 1286 } 1287 } 1288 if( sei.m_translationGvdFlag ) 1289 { 1290 WRITE_FLAG( ( sei.m_signGvdTX[i] ? 1 : 0 ), "sign_gvd_t_x" ); 1291 WRITE_CODE( sei.m_expGvdTX[i], 6, "exp_gvd_t_x" ); 1292 WRITE_CODE( sei.m_manGvdTX[i], getManGvdTXLen ), "man_gvd_t_x" ); 1293 } 1294 } 1295 } 1296 if( sei.m_depthType == 1 ) 1297 { 1298 WRITE_SVLC( sei.m_minOffsetXInt, "min_offset_x_int" ); 1299 WRITE_CODE( sei.m_minOffsetXFrac, 8, "min_offset_x_frac" ); 1300 WRITE_SVLC( sei.m_maxOffsetXInt, "max_offset_x_int" ); 1301 WRITE_CODE( sei.m_maxOffsetXFrac, 8, "max_offset_x_frac" ); 1302 WRITE_FLAG( ( sei.m_offsetYPresentFlag ? 1 : 0 ), "offset_y_present_flag" ); 1303 if( sei.m_offsetYPresentFlag ) 1304 { 1305 WRITE_SVLC( sei.m_minOffsetYInt, "min_offset_y_int" ); 1306 WRITE_CODE( sei.m_minOffsetYFrac, 8, "min_offset_y_frac" ); 1307 WRITE_SVLC( sei.m_maxOffsetYInt, "max_offset_y_int" ); 1308 WRITE_CODE( sei.m_maxOffsetYFrac, 8, "max_offset_y_frac" ); 1309 } 1310 WRITE_FLAG( ( sei.m_warpMapSizePresentFlag ? 1 : 0 ), "warp_map_size_present_flag" ); 1311 if( sei.m_warpMapSizePresentFlag ) 1312 { 1313 WRITE_UVLC( sei.m_warpMapWidthMinus2, "warp_map_width_minus2" ); 1314 WRITE_UVLC( sei.m_warpMapHeightMinus2, "warp_map_height_minus2" ); 1315 } 1316 } 1317 } 1318 }; 1319 1320 #endif 1321 820 1322 //! \} -
branches/HTM-15.1-dev0/source/Lib/TLibEncoder/SEIwrite.h
r1313 r1328 72 72 Void xWriteSEIScalableNesting(TComBitIf& bs, const SEIScalableNesting& sei, const TComSPS *sps); 73 73 #if NH_MV 74 #if !NH_MV_SEI 74 75 Void xWriteSEISubBitstreamProperty(const SEISubBitstreamProperty &sei); 76 #endif 75 77 #endif 76 78 Void xWriteSEITempMotionConstrainedTileSets(const SEITempMotionConstrainedTileSets& sei); … … 81 83 Void xWriteSEIMasteringDisplayColourVolume( const SEIMasteringDisplayColourVolume& sei); 82 84 85 #if NH_MV_SEI 86 #if NH_MV_SEI_TBD 87 Void xWriteSEILayersNotPresent ( const SEILayersNotPresent& sei); 88 #endif 89 Void xWriteSEIInterLayerConstrainedTileSets ( const SEIInterLayerConstrainedTileSets& sei); 90 #if NH_MV_SEI_TBD 91 Void xWriteSEIBspNesting ( const SEIBspNesting& sei); 92 Void xWriteSEIBspInitialArrivalTime ( const SEIBspInitialArrivalTime& sei); 93 #endif 94 Void xWriteSEISubBitstreamProperty ( const SEISubBitstreamProperty& sei); 95 #if NH_MV_SEI_TBD 96 Void xWriteSEIAlphaChannelInfo ( const SEIAlphaChannelInfo& sei); 97 Void xWriteSEIOverlayInfo ( const SEIOverlayInfo& sei); 98 #endif 99 Void xWriteSEITemporalMvPredictionConstraints ( const SEITemporalMvPredictionConstraints& sei); 100 #if NH_MV_SEI_TBD 101 Void xWriteSEIFrameFieldInfo ( const SEIFrameFieldInfo& sei); 102 Void xWriteSEIThreeDimensionalReferenceDisplaysInfo ( const SEIThreeDimensionalReferenceDisplaysInfo& sei); 103 Void xWriteSEIDepthRepresentationInfo ( const SEIDepthRepresentationInfo& sei); 104 Void xWriteSEIDepthRepInfoElement ( const SEIDepthRepInfoElement& sei); 105 #endif 106 Void xWriteSEIMultiviewSceneInfo ( const SEIMultiviewSceneInfo& sei); 107 Void xWriteSEIMultiviewAcquisitionInfo ( const SEIMultiviewAcquisitionInfo& sei); 108 Void xWriteSEIMultiviewViewPosition ( const SEIMultiviewViewPosition& sei); 109 #if NH_MV_SEI_TBD 110 Void xWriteSEIAlternativeDepthInfo ( const SEIAlternativeDepthInfo& sei); 111 #endif 83 112 Void xWriteByteAlign(); 84 113 }; 114 #endif 85 115 86 116 //! \} -
branches/HTM-15.1-dev0/source/Lib/TLibEncoder/TEncCfg.h
r1313 r1328 49 49 #include "TAppCommon/TAppComCamPara.h" 50 50 #include "TLibRenderer/TRenModSetupStrParser.h" 51 #endif 52 53 #if NH_MV 54 #include "TLibCommon/SEI.h" 51 55 #endif 52 56 … … 350 354 Int* m_kneeSEIOutputKneePoint; 351 355 TComSEIMasteringDisplay m_masteringDisplay; 356 #if NH_MV_SEI 357 SEIMessages* m_seiMessages; 358 #endif 352 359 //====== Weighted Prediction ======== 353 360 Bool m_useWeightedPred; //< Use of Weighting Prediction (P_SLICE) … … 432 439 433 440 #if NH_MV 441 #if !NH_MV_SEI 434 442 Bool m_subBistreamPropSEIEnabled; 435 443 Int m_numAdditionalSubStreams; … … 439 447 std::vector<Int> m_avgBitRate; 440 448 std::vector<Int> m_maxBitRate; 449 #endif 441 450 #endif 442 451 … … 933 942 const TComSEIMasteringDisplay &getMasteringDisplaySEI() const { return m_masteringDisplay; } 934 943 #if NH_MV 944 #if NH_MV_SEI 945 Void setSeiMessages(SEIMessages *p) { m_seiMessages = p; } 946 const SEIMessages* getSeiMessages() { return m_seiMessages; } 947 #else 935 948 Bool getSubBitstreamPropSEIEnabled() { return m_subBistreamPropSEIEnabled;} 936 949 Void setSubBitstreamPropSEIEnabled(Bool x) { m_subBistreamPropSEIEnabled = x;} … … 958 971 Int getMaxBitRate(Int idx) { return m_maxBitRate[idx];} 959 972 Void setMaxBitRate(std::vector<Int> &x) { m_maxBitRate = x;} 960 973 #endif 961 974 #endif 962 975 -
branches/HTM-15.1-dev0/source/Lib/TLibEncoder/TEncGOP.cpp
r1321 r1328 412 412 Void TEncGOP::xCreateIRAPLeadingSEIMessages (SEIMessages& seiMessages, const TComSPS *sps, const TComPPS *pps) 413 413 { 414 #if NH_MV415 OutputNALUnit nalu(NAL_UNIT_PREFIX_SEI, 0, getLayerId());416 #else417 414 OutputNALUnit nalu(NAL_UNIT_PREFIX_SEI); 418 #endif 415 419 416 if(m_pcCfg->getActiveParameterSetsSEIEnabled()) 420 417 { … … 482 479 483 480 #if NH_MV 481 #if !NH_MV_SEI 484 482 if( m_pcCfg->getSubBitstreamPropSEIEnabled() && ( getLayerId() == 0 ) ) 485 483 { … … 488 486 seiMessages.push_back(sei); 489 487 } 488 #endif 490 489 #endif 491 490 } … … 1835 1834 xCreatePerPictureSEIMessages(iGOPid, leadingSeiMessages, nestedSeiMessages, pcSlice); 1836 1835 1836 #if NH_MV_SEI 1837 m_seiEncoder.createAnnexFGISeiMessages( leadingSeiMessages, pcSlice ); 1838 #endif 1839 1837 1840 /* use the main bitstream buffer for storing the marshalled picture */ 1838 1841 m_pcEntropyCoder->setBitstream(NULL);
Note: See TracChangeset for help on using the changeset viewer.