Changeset 1029 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibDecoder/SEIread.cpp
- Timestamp:
- 26 Feb 2015, 00:21:54 (10 years ago)
- Location:
- branches/SHM-dev
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SHM-dev
- Property svn:mergeinfo changed
-
branches/SHM-dev/source
- Property svn:mergeinfo changed
-
branches/SHM-dev/source/Lib/TLibDecoder/SEIread.cpp
r912 r1029 32 32 */ 33 33 34 /** 34 /** 35 35 \file SEIread.cpp 36 \brief reading fun ctionality for SEI messages36 \brief reading funtionality for SEI messages 37 37 */ 38 38 … … 43 43 #include "SyntaxElementParser.h" 44 44 #include "SEIread.h" 45 #include "TLibCommon/TComPicYuv.h" 46 #include <iomanip> 47 45 48 46 49 //! \ingroup TLibDecoder 47 50 //! \{ 48 51 52 49 53 #if ENC_DEC_TRACE 50 54 Void xTraceSEIHeader() … … 55 59 Void xTraceSEIMessageType(SEI::PayloadType payloadType) 56 60 { 57 switch (payloadType) 58 { 59 case SEI::DECODED_PICTURE_HASH: 60 fprintf( g_hTrace, "=========== Decoded picture hash SEI message ===========\n"); 61 break; 62 case SEI::USER_DATA_UNREGISTERED: 63 fprintf( g_hTrace, "=========== User Data Unregistered SEI message ===========\n"); 64 break; 65 case SEI::ACTIVE_PARAMETER_SETS: 66 fprintf( g_hTrace, "=========== Active Parameter sets SEI message ===========\n"); 67 break; 68 case SEI::BUFFERING_PERIOD: 69 fprintf( g_hTrace, "=========== Buffering period SEI message ===========\n"); 70 break; 71 case SEI::PICTURE_TIMING: 72 fprintf( g_hTrace, "=========== Picture timing SEI message ===========\n"); 73 break; 74 case SEI::RECOVERY_POINT: 75 fprintf( g_hTrace, "=========== Recovery point SEI message ===========\n"); 76 break; 77 case SEI::FRAME_PACKING: 78 fprintf( g_hTrace, "=========== Frame Packing Arrangement SEI message ===========\n"); 79 break; 80 case SEI::DISPLAY_ORIENTATION: 81 fprintf( g_hTrace, "=========== Display Orientation SEI message ===========\n"); 82 break; 83 case SEI::TEMPORAL_LEVEL0_INDEX: 84 fprintf( g_hTrace, "=========== Temporal Level Zero Index SEI message ===========\n"); 85 break; 86 case SEI::REGION_REFRESH_INFO: 87 fprintf( g_hTrace, "=========== Gradual Decoding Refresh Information SEI message ===========\n"); 88 break; 89 case SEI::DECODING_UNIT_INFO: 90 fprintf( g_hTrace, "=========== Decoding Unit Information SEI message ===========\n"); 91 break; 92 case SEI::TONE_MAPPING_INFO: 93 fprintf( g_hTrace, "===========Tone Mapping Info SEI message ===========\n"); 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 100 #if Q0074_COLOUR_REMAPPING_SEI 101 case SEI::COLOUR_REMAPPING_INFO: 102 fprintf( g_hTrace, "===========Colour Remapping Information SEI message ===========\n"); 103 break; 104 #endif 105 case SEI::SOP_DESCRIPTION: 106 fprintf( g_hTrace, "=========== SOP Description SEI message ===========\n"); 107 break; 108 case SEI::SCALABLE_NESTING: 109 fprintf( g_hTrace, "=========== Scalable Nesting SEI message ===========\n"); 110 break; 111 #if SVC_EXTENSION 112 #if LAYERS_NOT_PRESENT_SEI 113 case SEI::LAYERS_NOT_PRESENT: 114 fprintf( g_hTrace, "=========== Layers Present SEI message ===========\n"); 115 break; 116 #endif 117 #if N0383_IL_CONSTRAINED_TILE_SETS_SEI 118 case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS: 119 fprintf( g_hTrace, "=========== Inter Layer Constrained Tile Sets SEI message ===========\n"); 120 break; 121 #endif 122 #if SUB_BITSTREAM_PROPERTY_SEI 123 case SEI::SUB_BITSTREAM_PROPERTY: 124 fprintf( g_hTrace, "=========== Sub-bitstream property SEI message ===========\n"); 125 break; 126 #endif 127 #if O0164_MULTI_LAYER_HRD 128 case SEI::BSP_NESTING: 129 fprintf( g_hTrace, "=========== Bitstream parition nesting SEI message ===========\n"); 130 break; 131 case SEI::BSP_INITIAL_ARRIVAL_TIME: 132 fprintf( g_hTrace, "=========== Bitstream parition initial arrival time SEI message ===========\n"); 133 break; 134 #if !REMOVE_BSP_HRD_SEI 135 case SEI::BSP_HRD: 136 fprintf( g_hTrace, "=========== Bitstream parition HRD parameters SEI message ===========\n"); 137 break; 138 #endif 139 #endif 140 #if Q0078_ADD_LAYER_SETS 141 case SEI::OUTPUT_LAYER_SET_NESTING: 142 fprintf(g_hTrace, "=========== Output layer set nesting SEI message ===========\n"); 143 break; 144 case SEI::VPS_REWRITING: 145 fprintf(g_hTrace, "=========== VPS rewriting SEI message ===========\n"); 146 break; 147 #endif 148 #if Q0096_OVERLAY_SEI 149 case SEI::OVERLAY_INFO: 150 fprintf( g_hTrace, "=========== Overlay Information SEI message ===========\n"); 151 break; 152 #endif 153 #endif //SVC_EXTENSION 154 default: 155 fprintf( g_hTrace, "=========== Unknown SEI message ===========\n"); 156 break; 157 } 158 } 159 #endif 61 fprintf( g_hTrace, "=========== %s SEI message ===========\n", SEI::getSEIMessageString(payloadType)); 62 } 63 #endif 64 65 Void SEIReader::sei_read_code(std::ostream *pOS, UInt uiLength, UInt& ruiCode, const Char *pSymbolName) 66 { 67 READ_CODE(uiLength, ruiCode, pSymbolName); 68 if (pOS) (*pOS) << " " << std::setw(55) << pSymbolName << ": " << ruiCode << "\n"; 69 } 70 71 Void SEIReader::sei_read_uvlc(std::ostream *pOS, UInt& ruiCode, const Char *pSymbolName) 72 { 73 READ_UVLC(ruiCode, pSymbolName); 74 if (pOS) (*pOS) << " " << std::setw(55) << pSymbolName << ": " << ruiCode << "\n"; 75 } 76 77 Void SEIReader::sei_read_svlc(std::ostream *pOS, Int& ruiCode, const Char *pSymbolName) 78 { 79 READ_SVLC(ruiCode, pSymbolName); 80 if (pOS) (*pOS) << " " << std::setw(55) << pSymbolName << ": " << ruiCode << "\n"; 81 } 82 83 Void SEIReader::sei_read_flag(std::ostream *pOS, UInt& ruiCode, const Char *pSymbolName) 84 { 85 READ_FLAG(ruiCode, pSymbolName); 86 if (pOS) (*pOS) << " " << std::setw(55) << pSymbolName << ": " << (ruiCode?1:0) << "\n"; 87 } 88 89 static inline Void output_sei_message_header(SEI &sei, std::ostream *pDecodedMessageOutputStream, UInt payloadSize) 90 { 91 if (pDecodedMessageOutputStream) 92 { 93 std::string seiMessageHdr(SEI::getSEIMessageString(sei.payloadType())); seiMessageHdr+=" SEI message"; 94 (*pDecodedMessageOutputStream) << std::setfill('-') << std::setw(seiMessageHdr.size()) << "-" << std::setfill(' ') << "\n" << seiMessageHdr << "\n"; 95 } 96 } 97 98 #undef READ_CODE 99 #undef READ_SVLC 100 #undef READ_UVLC 101 #undef READ_FLAG 102 160 103 161 104 /** … … 163 106 */ 164 107 #if LAYERS_NOT_PRESENT_SEI 165 void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps)166 #else 167 void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, TComSPS *sps)108 Void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 109 #else 110 Void SEIReader::parseSEImessage(TComInputBitstream* bs, SEIMessages& seis, const NalUnitType nalUnitType, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 168 111 #endif 169 112 { … … 174 117 { 175 118 #if LAYERS_NOT_PRESENT_SEI 176 xReadSEImessage(seis, nalUnitType, vps, sps );177 #else 178 xReadSEImessage(seis, nalUnitType, sps );119 xReadSEImessage(seis, nalUnitType, vps, sps, pDecodedMessageOutputStream); 120 #else 121 xReadSEImessage(seis, nalUnitType, sps, pDecodedMessageOutputStream); 179 122 #endif 180 123 /* SEI messages are an integer number of bytes, something has failed … … 184 127 185 128 UInt rbspTrailingBits; 186 READ_CODE(8, rbspTrailingBits, "rbsp_trailing_bits");129 sei_read_code(NULL, 8, rbspTrailingBits, "rbsp_trailing_bits"); 187 130 assert(rbspTrailingBits == 0x80); 188 131 } … … 190 133 #if O0164_MULTI_LAYER_HRD 191 134 #if LAYERS_NOT_PRESENT_SEI 192 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, const SEIScalableNesting *nestingSei, const SEIBspNesting *bspNestingSei)193 #else 194 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComSPS *sps, const SEIScalableNesting *nestingSei)135 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, std::ostream *pDecodedMessageOutputStream, const SEIScalableNesting *nestingSei, const SEIBspNesting *bspNestingSei) 136 #else 137 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComSPS *sps, std::ostream *pDecodedMessageOutputStream, const SEIScalableNesting *nestingSei) 195 138 #endif 196 139 #else 197 140 #if LAYERS_NOT_PRESENT_SEI 198 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps )199 #else 200 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComSPS *sps )141 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 142 #else 143 Void SEIReader::xReadSEImessage(SEIMessages& seis, const NalUnitType nalUnitType, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 201 144 #endif 202 145 #endif … … 210 153 do 211 154 { 212 READ_CODE (8, val, "payload_type");155 sei_read_code(NULL, 8, val, "payload_type"); 213 156 payloadType += val; 214 157 } while (val==0xFF); … … 217 160 do 218 161 { 219 READ_CODE (8, val, "payload_size");162 sei_read_code(NULL, 8, val, "payload_size"); 220 163 payloadSize += val; 221 164 } while (val==0xFF); … … 242 185 case SEI::USER_DATA_UNREGISTERED: 243 186 sei = new SEIuserDataUnregistered; 244 xParseSEIuserDataUnregistered((SEIuserDataUnregistered&) *sei, payloadSize );187 xParseSEIuserDataUnregistered((SEIuserDataUnregistered&) *sei, payloadSize, pDecodedMessageOutputStream); 245 188 break; 246 189 case SEI::ACTIVE_PARAMETER_SETS: 247 sei = new SEIActiveParameterSets; 248 xParseSEIActiveParameterSets((SEIActiveParameterSets&) *sei, payloadSize );249 break; 190 sei = new SEIActiveParameterSets; 191 xParseSEIActiveParameterSets((SEIActiveParameterSets&) *sei, payloadSize, pDecodedMessageOutputStream); 192 break; 250 193 case SEI::DECODING_UNIT_INFO: 251 194 if (!sps) … … 255 198 else 256 199 { 257 sei = new SEIDecodingUnitInfo; 200 sei = new SEIDecodingUnitInfo; 258 201 #if VPS_VUI_BSP_HRD_PARAMS 259 xParseSEIDecodingUnitInfo((SEIDecodingUnitInfo&) *sei, payloadSize, sps, nestingSei, bspNestingSei, vps );260 #else 261 xParseSEIDecodingUnitInfo((SEIDecodingUnitInfo&) *sei, payloadSize, sps );262 #endif 263 } 264 break; 202 xParseSEIDecodingUnitInfo((SEIDecodingUnitInfo&) *sei, payloadSize, sps, nestingSei, bspNestingSei, vps, pDecodedMessageOutputStream); 203 #else 204 xParseSEIDecodingUnitInfo((SEIDecodingUnitInfo&) *sei, payloadSize, sps, pDecodedMessageOutputStream); 205 #endif 206 } 207 break; 265 208 case SEI::BUFFERING_PERIOD: 266 209 if (!sps) … … 272 215 sei = new SEIBufferingPeriod; 273 216 #if VPS_VUI_BSP_HRD_PARAMS 274 xParseSEIBufferingPeriod((SEIBufferingPeriod&) *sei, payloadSize, sps, nestingSei, bspNestingSei, vps );275 #else 276 xParseSEIBufferingPeriod((SEIBufferingPeriod&) *sei, payloadSize, sps );217 xParseSEIBufferingPeriod((SEIBufferingPeriod&) *sei, payloadSize, sps, nestingSei, bspNestingSei, vps, pDecodedMessageOutputStream); 218 #else 219 xParseSEIBufferingPeriod((SEIBufferingPeriod&) *sei, payloadSize, sps, pDecodedMessageOutputStream); 277 220 #endif 278 221 } … … 287 230 sei = new SEIPictureTiming; 288 231 #if VPS_VUI_BSP_HRD_PARAMS 289 xParseSEIPictureTiming((SEIPictureTiming&)*sei, payloadSize, sps, nestingSei, bspNestingSei, vps );290 #else 291 xParseSEIPictureTiming((SEIPictureTiming&)*sei, payloadSize, sps );232 xParseSEIPictureTiming((SEIPictureTiming&)*sei, payloadSize, sps, nestingSei, bspNestingSei, vps, pDecodedMessageOutputStream); 233 #else 234 xParseSEIPictureTiming((SEIPictureTiming&)*sei, payloadSize, sps, pDecodedMessageOutputStream); 292 235 #endif 293 236 } … … 295 238 case SEI::RECOVERY_POINT: 296 239 sei = new SEIRecoveryPoint; 297 xParseSEIRecoveryPoint((SEIRecoveryPoint&) *sei, payloadSize );240 xParseSEIRecoveryPoint((SEIRecoveryPoint&) *sei, payloadSize, pDecodedMessageOutputStream); 298 241 break; 299 242 case SEI::FRAME_PACKING: 300 243 sei = new SEIFramePacking; 301 xParseSEIFramePacking((SEIFramePacking&) *sei, payloadSize); 244 xParseSEIFramePacking((SEIFramePacking&) *sei, payloadSize, pDecodedMessageOutputStream); 245 break; 246 case SEI::SEGM_RECT_FRAME_PACKING: 247 sei = new SEISegmentedRectFramePacking; 248 xParseSEISegmentedRectFramePacking((SEISegmentedRectFramePacking&) *sei, payloadSize, pDecodedMessageOutputStream); 302 249 break; 303 250 case SEI::DISPLAY_ORIENTATION: 304 251 sei = new SEIDisplayOrientation; 305 xParseSEIDisplayOrientation((SEIDisplayOrientation&) *sei, payloadSize );252 xParseSEIDisplayOrientation((SEIDisplayOrientation&) *sei, payloadSize, pDecodedMessageOutputStream); 306 253 break; 307 254 case SEI::TEMPORAL_LEVEL0_INDEX: 308 255 sei = new SEITemporalLevel0Index; 309 xParseSEITemporalLevel0Index((SEITemporalLevel0Index&) *sei, payloadSize );256 xParseSEITemporalLevel0Index((SEITemporalLevel0Index&) *sei, payloadSize, pDecodedMessageOutputStream); 310 257 break; 311 258 case SEI::REGION_REFRESH_INFO: 312 259 sei = new SEIGradualDecodingRefreshInfo; 313 xParseSEIGradualDecodingRefreshInfo((SEIGradualDecodingRefreshInfo&) *sei, payloadSize); 260 xParseSEIRegionRefreshInfo((SEIGradualDecodingRefreshInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 261 break; 262 case SEI::NO_DISPLAY: 263 sei = new SEINoDisplay; 264 xParseSEINoDisplay((SEINoDisplay&) *sei, payloadSize, pDecodedMessageOutputStream); 314 265 break; 315 266 case SEI::TONE_MAPPING_INFO: 316 267 sei = new SEIToneMappingInfo; 317 xParseSEIToneMappingInfo((SEIToneMappingInfo&) *sei, payloadSize); 318 break; 319 #if P0050_KNEE_FUNCTION_SEI 268 xParseSEIToneMappingInfo((SEIToneMappingInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 269 break; 270 case SEI::SOP_DESCRIPTION: 271 sei = new SEISOPDescription; 272 xParseSEISOPDescription((SEISOPDescription&) *sei, payloadSize, pDecodedMessageOutputStream); 273 break; 274 case SEI::SCALABLE_NESTING: 275 sei = new SEIScalableNesting; 276 #if LAYERS_NOT_PRESENT_SEI 277 xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, vps, sps, pDecodedMessageOutputStream); 278 #else 279 xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, sps, pDecodedMessageOutputStream); 280 #endif 281 break; 282 case SEI::TEMP_MOTION_CONSTRAINED_TILE_SETS: 283 sei = new SEITempMotionConstrainedTileSets; 284 xParseSEITempMotionConstraintsTileSets((SEITempMotionConstrainedTileSets&) *sei, payloadSize, pDecodedMessageOutputStream); 285 break; 286 case SEI::TIME_CODE: 287 sei = new SEITimeCode; 288 xParseSEITimeCode((SEITimeCode&) *sei, payloadSize, pDecodedMessageOutputStream); 289 break; 290 case SEI::CHROMA_SAMPLING_FILTER_HINT: 291 sei = new SEIChromaSamplingFilterHint; 292 xParseSEIChromaSamplingFilterHint((SEIChromaSamplingFilterHint&) *sei, payloadSize/*, sps*/, pDecodedMessageOutputStream); 293 //} 294 break; 320 295 case SEI::KNEE_FUNCTION_INFO: 321 296 sei = new SEIKneeFunctionInfo; 322 xParseSEIKneeFunctionInfo((SEIKneeFunctionInfo&) *sei, payloadSize); 323 break; 324 #endif 297 xParseSEIKneeFunctionInfo((SEIKneeFunctionInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 298 break; 299 case SEI::MASTERING_DISPLAY_COLOUR_VOLUME: 300 sei = new SEIMasteringDisplayColourVolume; 301 xParseSEIMasteringDisplayColourVolume((SEIMasteringDisplayColourVolume&) *sei, payloadSize, pDecodedMessageOutputStream); 302 break; 325 303 #if Q0074_COLOUR_REMAPPING_SEI 326 304 case SEI::COLOUR_REMAPPING_INFO: 327 305 sei = new SEIColourRemappingInfo; 328 xParseSEIColourRemappingInfo((SEIColourRemappingInfo&) *sei, payloadSize); 329 break; 330 #endif 331 case SEI::SOP_DESCRIPTION: 332 sei = new SEISOPDescription; 333 xParseSEISOPDescription((SEISOPDescription&) *sei, payloadSize); 334 break; 335 case SEI::SCALABLE_NESTING: 336 sei = new SEIScalableNesting; 337 #if LAYERS_NOT_PRESENT_SEI 338 xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, vps, sps); 339 #else 340 xParseSEIScalableNesting((SEIScalableNesting&) *sei, nalUnitType, payloadSize, sps); 341 #endif 342 break; 306 xParseSEIColourRemappingInfo((SEIColourRemappingInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 307 break; 308 #endif 343 309 #if SVC_EXTENSION 344 310 #if LAYERS_NOT_PRESENT_SEI … … 351 317 { 352 318 sei = new SEILayersNotPresent; 353 xParseSEILayersNotPresent((SEILayersNotPresent&) *sei, payloadSize, vps );319 xParseSEILayersNotPresent((SEILayersNotPresent&) *sei, payloadSize, vps, pDecodedMessageOutputStream); 354 320 } 355 321 break; … … 358 324 case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS: 359 325 sei = new SEIInterLayerConstrainedTileSets; 360 xParseSEIInterLayerConstrainedTileSets((SEIInterLayerConstrainedTileSets&) *sei, payloadSize );326 xParseSEIInterLayerConstrainedTileSets((SEIInterLayerConstrainedTileSets&) *sei, payloadSize, pDecodedMessageOutputStream); 361 327 break; 362 328 #endif … … 365 331 sei = new SEISubBitstreamProperty; 366 332 #if OLS_IDX_CHK 367 xParseSEISubBitstreamProperty((SEISubBitstreamProperty&) *sei, vps );368 #else 369 xParseSEISubBitstreamProperty((SEISubBitstreamProperty&) *sei );333 xParseSEISubBitstreamProperty((SEISubBitstreamProperty&) *sei, vps, pDecodedMessageOutputStream); 334 #else 335 xParseSEISubBitstreamProperty((SEISubBitstreamProperty&) *sei, pDecodedMessageOutputStream); 370 336 #endif 371 337 break; … … 375 341 sei = new SEIBspNesting; 376 342 #if LAYERS_NOT_PRESENT_SEI 377 xParseSEIBspNesting((SEIBspNesting&) *sei, nalUnitType, vps, sps, *nestingSei );378 #else 379 xParseSEIBspNesting((SEIBspNesting&) *sei, nalUnitType, sps, *nestingSei );343 xParseSEIBspNesting((SEIBspNesting&) *sei, nalUnitType, vps, sps, *nestingSei, pDecodedMessageOutputStream); 344 #else 345 xParseSEIBspNesting((SEIBspNesting&) *sei, nalUnitType, sps, *nestingSei, pDecodedMessageOutputStream); 380 346 #endif 381 347 break; 382 348 case SEI::BSP_INITIAL_ARRIVAL_TIME: 383 349 sei = new SEIBspInitialArrivalTime; 384 xParseSEIBspInitialArrivalTime((SEIBspInitialArrivalTime&) *sei, vps, sps, *nestingSei, *bspNestingSei );350 xParseSEIBspInitialArrivalTime((SEIBspInitialArrivalTime&) *sei, vps, sps, *nestingSei, *bspNestingSei, pDecodedMessageOutputStream); 385 351 break; 386 352 #if !REMOVE_BSP_HRD_SEI 387 353 case SEI::BSP_HRD: 388 354 sei = new SEIBspHrd; 389 xParseSEIBspHrd((SEIBspHrd&) *sei, sps, *nestingSei );355 xParseSEIBspHrd((SEIBspHrd&) *sei, sps, *nestingSei, pDecodedMessageOutputStream); 390 356 break; 391 357 #endif … … 395 361 sei = new SEIOutputLayerSetNesting; 396 362 #if LAYERS_NOT_PRESENT_SEI 397 xParseSEIOutputLayerSetNesting((SEIOutputLayerSetNesting&)*sei, nalUnitType, vps, sps );398 #else 399 xParseSEIOutputLayerSetNesting((SEIOutputLayerSetNesting&)*sei, nalUnitType, sps );363 xParseSEIOutputLayerSetNesting((SEIOutputLayerSetNesting&)*sei, nalUnitType, vps, sps, pDecodedMessageOutputStream); 364 #else 365 xParseSEIOutputLayerSetNesting((SEIOutputLayerSetNesting&)*sei, nalUnitType, sps, pDecodedMessageOutputStream); 400 366 #endif 401 367 break; 402 368 case SEI::VPS_REWRITING: 403 369 sei = new SEIVPSRewriting; 404 xParseSEIVPSRewriting((SEIVPSRewriting&)*sei );370 xParseSEIVPSRewriting((SEIVPSRewriting&)*sei, pDecodedMessageOutputStream); 405 371 break; 406 372 #endif … … 408 374 case SEI::TMVP_CONSTRAINTS: 409 375 sei = new SEITMVPConstrains; 410 xParseSEITMVPConstraints((SEITMVPConstrains&) *sei, payloadSize );376 xParseSEITMVPConstraints((SEITMVPConstrains&) *sei, payloadSize, pDecodedMessageOutputStream); 411 377 break; 412 378 #endif … … 414 380 case SEI::FRAME_FIELD_INFO: 415 381 sei = new SEIFrameFieldInfo; 416 xParseSEIFrameFieldInfo ((SEIFrameFieldInfo&) *sei, payloadSize );382 xParseSEIFrameFieldInfo ((SEIFrameFieldInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 417 383 break; 418 384 #endif … … 420 386 case SEI::OVERLAY_INFO: 421 387 sei = new SEIOverlayInfo; 422 xParseSEIOverlayInfo((SEIOverlayInfo&) *sei, payloadSize );388 xParseSEIOverlayInfo((SEIOverlayInfo&) *sei, payloadSize, pDecodedMessageOutputStream); 423 389 break; 424 390 #endif … … 429 395 { 430 396 UInt seiByte; 431 READ_CODE (8, seiByte, "unknown prefix SEI payload byte");397 sei_read_code (NULL, 8, seiByte, "unknown prefix SEI payload byte"); 432 398 } 433 399 printf ("Unknown prefix SEI message (payloadType = %d) was found!\n", payloadType); 400 if (pDecodedMessageOutputStream) 401 { 402 (*pDecodedMessageOutputStream) << "Unknown prefix SEI message (payloadType = " << payloadType << ") was found!\n"; 403 } 404 break; 434 405 } 435 406 } … … 440 411 case SEI::USER_DATA_UNREGISTERED: 441 412 sei = new SEIuserDataUnregistered; 442 xParseSEIuserDataUnregistered((SEIuserDataUnregistered&) *sei, payloadSize );413 xParseSEIuserDataUnregistered((SEIuserDataUnregistered&) *sei, payloadSize, pDecodedMessageOutputStream); 443 414 break; 444 415 case SEI::DECODED_PICTURE_HASH: 445 416 sei = new SEIDecodedPictureHash; 446 xParseSEIDecodedPictureHash((SEIDecodedPictureHash&) *sei, payloadSize );417 xParseSEIDecodedPictureHash((SEIDecodedPictureHash&) *sei, payloadSize, pDecodedMessageOutputStream); 447 418 break; 448 419 default: … … 450 421 { 451 422 UInt seiByte; 452 READ_CODE (8, seiByte, "unknown suffix SEI payload byte");423 sei_read_code( NULL, 8, seiByte, "unknown suffix SEI payload byte"); 453 424 } 454 425 printf ("Unknown suffix SEI message (payloadType = %d) was found!\n", payloadType); 455 } 456 } 426 if (pDecodedMessageOutputStream) 427 { 428 (*pDecodedMessageOutputStream) << "Unknown suffix SEI message (payloadType = " << payloadType << ") was found!\n"; 429 } 430 break; 431 } 432 } 433 457 434 if (sei != NULL) 458 435 { … … 473 450 { 474 451 UInt reservedPayloadExtensionData; 475 READ_CODE (1, reservedPayloadExtensionData, "reserved_payload_extension_data");452 sei_read_code ( pDecodedMessageOutputStream, 1, reservedPayloadExtensionData, "reserved_payload_extension_data"); 476 453 } 477 454 … … 488 465 { 489 466 UInt reservedPayloadExtensionData; 490 READ_FLAG (reservedPayloadExtensionData, "reserved_payload_extension_data");467 sei_read_flag ( 0, reservedPayloadExtensionData, "reserved_payload_extension_data"); 491 468 } 492 469 493 470 UInt dummy; 494 READ_FLAG (dummy, "payload_bit_equal_to_one"); payloadBitsRemaining--;471 sei_read_flag( 0, dummy, "payload_bit_equal_to_one"); payloadBitsRemaining--; 495 472 while (payloadBitsRemaining) 496 473 { 497 READ_FLAG (dummy, "payload_bit_equal_to_zero"); payloadBitsRemaining--;474 sei_read_flag( 0, dummy, "payload_bit_equal_to_zero"); payloadBitsRemaining--; 498 475 } 499 476 } … … 505 482 } 506 483 507 #if P0138_USE_ALT_CPB_PARAMS_FLAG508 /**509 * Check if SEI message contains payload extension510 */511 Bool SEIReader::xPayloadExtensionPresent()512 {513 Int payloadBitsRemaining = getBitstream()->getNumBitsLeft();514 Bool payloadExtensionPresent = false;515 516 if (payloadBitsRemaining > 8)517 {518 payloadExtensionPresent = true;519 }520 else521 {522 Int finalBits = getBitstream()->peekBits(payloadBitsRemaining);523 while (payloadBitsRemaining && (finalBits & 1) == 0)524 {525 payloadBitsRemaining--;526 finalBits >>= 1;527 }528 payloadBitsRemaining--;529 if (payloadBitsRemaining > 0)530 {531 payloadExtensionPresent = true;532 }533 }534 535 return payloadExtensionPresent;536 }537 #endif538 539 484 /** 540 485 * parse bitstream bs and unpack a user_data_unregistered SEI message 541 486 * of payloasSize bytes into sei. 542 487 */ 543 Void SEIReader::xParseSEIuserDataUnregistered(SEIuserDataUnregistered &sei, UInt payloadSize) 544 { 545 assert(payloadSize >= 16); 488 489 Void SEIReader::xParseSEIuserDataUnregistered(SEIuserDataUnregistered &sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 490 { 491 assert(payloadSize >= ISO_IEC_11578_LEN); 546 492 UInt val; 547 548 for (UInt i = 0; i < 16; i++) 549 { 550 READ_CODE (8, val, "uuid_iso_iec_11578"); 493 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 494 495 for (UInt i = 0; i < ISO_IEC_11578_LEN; i++) 496 { 497 sei_read_code( pDecodedMessageOutputStream, 8, val, "uuid_iso_iec_11578"); 551 498 sei.uuid_iso_iec_11578[i] = val; 552 499 } 553 500 554 sei.userDataLength = payloadSize - 16;501 sei.userDataLength = payloadSize - ISO_IEC_11578_LEN; 555 502 if (!sei.userDataLength) 556 503 { … … 562 509 for (UInt i = 0; i < sei.userDataLength; i++) 563 510 { 564 READ_CODE (8, val, "user_data" );511 sei_read_code( pDecodedMessageOutputStream, 8, val, "user_data" ); 565 512 sei.userData[i] = val; 566 513 } … … 571 518 * of payloadSize bytes into sei. 572 519 */ 573 Void SEIReader::xParseSEIDecodedPictureHash(SEIDecodedPictureHash& sei, UInt /*payloadSize*/) 574 { 520 Void SEIReader::xParseSEIDecodedPictureHash(SEIDecodedPictureHash& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 521 { 522 UInt bytesRead = 0; 523 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 524 575 525 UInt val; 576 READ_CODE (8, val, "hash_type"); 577 sei.method = static_cast<SEIDecodedPictureHash::Method>(val); 578 for(Int yuvIdx = 0; yuvIdx < 3; yuvIdx++) 579 { 580 if(SEIDecodedPictureHash::MD5 == sei.method) 581 { 582 for (UInt i = 0; i < 16; i++) 583 { 584 READ_CODE(8, val, "picture_md5"); 585 sei.digest[yuvIdx][i] = val; 586 } 587 } 588 else if(SEIDecodedPictureHash::CRC == sei.method) 589 { 590 READ_CODE(16, val, "picture_crc"); 591 sei.digest[yuvIdx][0] = val >> 8 & 0xFF; 592 sei.digest[yuvIdx][1] = val & 0xFF; 593 } 594 else if(SEIDecodedPictureHash::CHECKSUM == sei.method) 595 { 596 READ_CODE(32, val, "picture_checksum"); 597 sei.digest[yuvIdx][0] = (val>>24) & 0xff; 598 sei.digest[yuvIdx][1] = (val>>16) & 0xff; 599 sei.digest[yuvIdx][2] = (val>>8) & 0xff; 600 sei.digest[yuvIdx][3] = val & 0xff; 601 } 602 } 603 } 604 Void SEIReader::xParseSEIActiveParameterSets(SEIActiveParameterSets& sei, UInt /*payloadSize*/) 526 sei_read_code( pDecodedMessageOutputStream, 8, val, "hash_type"); 527 sei.method = static_cast<SEIDecodedPictureHash::Method>(val); bytesRead++; 528 529 const Char *traceString="\0"; 530 switch (sei.method) 531 { 532 case SEIDecodedPictureHash::MD5: traceString="picture_md5"; break; 533 case SEIDecodedPictureHash::CRC: traceString="picture_crc"; break; 534 case SEIDecodedPictureHash::CHECKSUM: traceString="picture_checksum"; break; 535 default: assert(false); break; 536 } 537 538 if (pDecodedMessageOutputStream) (*pDecodedMessageOutputStream) << " " << std::setw(55) << traceString << ": " << std::hex << std::setfill('0'); 539 540 sei.m_digest.hash.clear(); 541 for(;bytesRead < payloadSize; bytesRead++) 542 { 543 sei_read_code( NULL, 8, val, traceString); 544 sei.m_digest.hash.push_back((UChar)val); 545 if (pDecodedMessageOutputStream) (*pDecodedMessageOutputStream) << std::setw(2) << val; 546 } 547 548 if (pDecodedMessageOutputStream) (*pDecodedMessageOutputStream) << std::dec << std::setfill(' ') << "\n"; 549 } 550 551 Void SEIReader::xParseSEIActiveParameterSets(SEIActiveParameterSets& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 605 552 { 606 553 UInt val; 607 READ_CODE(4, val, "active_video_parameter_set_id"); sei.activeVPSId = val; 608 READ_FLAG( val, "self_contained_cvs_flag"); sei.m_selfContainedCvsFlag = val ? true : false; 609 READ_FLAG( val, "no_parameter_set_update_flag"); sei.m_noParameterSetUpdateFlag = val ? true : false; 610 READ_UVLC( val, "num_sps_ids_minus1"); sei.numSpsIdsMinus1 = val; 554 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 555 556 sei_read_code( pDecodedMessageOutputStream, 4, val, "active_video_parameter_set_id"); sei.activeVPSId = val; 557 sei_read_flag( pDecodedMessageOutputStream, val, "self_contained_cvs_flag"); sei.m_selfContainedCvsFlag = (val != 0); 558 sei_read_flag( pDecodedMessageOutputStream, val, "no_parameter_set_update_flag"); sei.m_noParameterSetUpdateFlag = (val != 0); 559 sei_read_uvlc( pDecodedMessageOutputStream, val, "num_sps_ids_minus1"); sei.numSpsIdsMinus1 = val; 611 560 612 561 sei.activeSeqParameterSetId.resize(sei.numSpsIdsMinus1 + 1); … … 616 565 for (Int i=0; i < (sei.numSpsIdsMinus1 + 1); i++) 617 566 { 618 READ_UVLC(val, "active_seq_parameter_set_id"); sei.activeSeqParameterSetId[i] = val;567 sei_read_uvlc( pDecodedMessageOutputStream, val, "active_seq_parameter_set_id[i]"); sei.activeSeqParameterSetId[i] = val; 619 568 } 620 569 #if R0247_SEI_ACTIVE 621 570 for (Int i=1; i < (sei.numSpsIdsMinus1 + 1); i++) 622 571 { 623 READ_UVLC(val, "layer_sps_idx"); sei.layerSpsIdx[i] = val; 624 } 625 #endif 626 xParseByteAlign(); 572 sei_read_uvlc( pDecodedMessageOutputStream, val, "layer_sps_idx"); sei.layerSpsIdx[i] = val; 573 } 574 #endif 627 575 } 628 576 629 577 #if VPS_VUI_BSP_HRD_PARAMS 630 Void SEIReader::xParseSEIDecodingUnitInfo(SEIDecodingUnitInfo& sei, UInt /*payloadSize*/, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps)631 #else 632 Void SEIReader::xParseSEIDecodingUnitInfo(SEIDecodingUnitInfo& sei, UInt /*payloadSize*/, TComSPS *sps)578 Void SEIReader::xParseSEIDecodingUnitInfo(SEIDecodingUnitInfo& sei, UInt payloadSize, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps,std::ostream *pDecodedMessageOutputStream) 579 #else 580 Void SEIReader::xParseSEIDecodingUnitInfo(SEIDecodingUnitInfo& sei, UInt payloadSize, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 633 581 #endif 634 582 { 635 583 UInt val; 636 READ_UVLC(val, "decoding_unit_idx"); 584 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 585 sei_read_uvlc( pDecodedMessageOutputStream, val, "decoding_unit_idx"); 637 586 sei.m_decodingUnitIdx = val; 638 587 … … 674 623 hrd = vui->getHrdParameters(); 675 624 } 676 #else 677 TComVUI *vui = sps->getVuiParameters(); 678 TComHrd *hrd = vui->getHrdParameters(); 679 #endif 625 680 626 if(hrd->getSubPicCpbParamsInPicTimingSEIFlag()) 681 627 { 682 READ_CODE( ( hrd->getDuCpbRemovalDelayLengthMinus1() + 1 ), val, "du_spt_cpb_removal_delay");628 sei_read_code( pDecodedMessageOutputStream, ( hrd->getDuCpbRemovalDelayLengthMinus1() + 1 ), val, "du_spt_cpb_removal_delay_increment"); 683 629 sei.m_duSptCpbRemovalDelay = val; 684 630 } … … 687 633 sei.m_duSptCpbRemovalDelay = 0; 688 634 } 689 READ_FLAG( val, "dpb_output_du_delay_present_flag"); sei.m_dpbOutputDuDelayPresentFlag = val ? true : false;635 sei_read_flag( pDecodedMessageOutputStream, val, "dpb_output_du_delay_present_flag"); sei.m_dpbOutputDuDelayPresentFlag = (val != 0); 690 636 if(sei.m_dpbOutputDuDelayPresentFlag) 691 637 { 692 READ_CODE(hrd->getDpbOutputDelayDuLengthMinus1() + 1, val, "pic_spt_dpb_output_du_delay");638 sei_read_code( pDecodedMessageOutputStream, hrd->getDpbOutputDelayDuLengthMinus1() + 1, val, "pic_spt_dpb_output_du_delay"); 693 639 sei.m_picSptDpbOutputDuDelay = val; 694 640 } 695 xParseByteAlign(); 641 #else 642 TComVUI *vui = sps->getVuiParameters(); 643 644 if(vui->getHrdParameters()->getSubPicCpbParamsInPicTimingSEIFlag()) 645 { 646 sei_read_code( pDecodedMessageOutputStream, ( vui->getHrdParameters()->getDuCpbRemovalDelayLengthMinus1() + 1 ), val, "du_spt_cpb_removal_delay_increment"); 647 sei.m_duSptCpbRemovalDelay = val; 648 } 649 else 650 { 651 sei.m_duSptCpbRemovalDelay = 0; 652 } 653 sei_read_flag( pDecodedMessageOutputStream, val, "dpb_output_du_delay_present_flag"); sei.m_dpbOutputDuDelayPresentFlag = (val != 0); 654 if(sei.m_dpbOutputDuDelayPresentFlag) 655 { 656 sei_read_code( pDecodedMessageOutputStream, vui->getHrdParameters()->getDpbOutputDelayDuLengthMinus1() + 1, val, "pic_spt_dpb_output_du_delay"); 657 sei.m_picSptDpbOutputDuDelay = val; 658 } 659 #endif 696 660 } 697 661 698 662 #if VPS_VUI_BSP_HRD_PARAMS 699 Void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, UInt /*payloadSize*/, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps)700 #else 701 Void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, UInt /*payloadSize*/, TComSPS *sps)663 Void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, UInt payloadSize, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps, std::ostream *pDecodedMessageOutputStream) 664 #else 665 Void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, UInt payloadSize, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 702 666 #endif 703 667 { … … 747 711 #endif 748 712 749 READ_UVLC( code, "bp_seq_parameter_set_id" ); sei.m_bpSeqParameterSetId = code; 713 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 714 715 sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_seq_parameter_set_id" ); sei.m_bpSeqParameterSetId = code; 750 716 if( !pHRD->getSubPicCpbParamsPresentFlag() ) 751 717 { 752 READ_FLAG(code, "irap_cpb_params_present_flag" ); sei.m_rapCpbParamsPresentFlag = code;718 sei_read_flag( pDecodedMessageOutputStream, code, "irap_cpb_params_present_flag" ); sei.m_rapCpbParamsPresentFlag = code; 753 719 } 754 720 if( sei.m_rapCpbParamsPresentFlag ) 755 721 { 756 READ_CODE( pHRD->getCpbRemovalDelayLengthMinus1() + 1, code, "cpb_delay_offset" ); sei.m_cpbDelayOffset = code; 757 READ_CODE( pHRD->getDpbOutputDelayLengthMinus1() + 1, code, "dpb_delay_offset" ); sei.m_dpbDelayOffset = code; 758 } 722 sei_read_code( pDecodedMessageOutputStream, pHRD->getCpbRemovalDelayLengthMinus1() + 1, code, "cpb_delay_offset" ); sei.m_cpbDelayOffset = code; 723 sei_read_code( pDecodedMessageOutputStream, pHRD->getDpbOutputDelayLengthMinus1() + 1, code, "dpb_delay_offset" ); sei.m_dpbDelayOffset = code; 724 } 725 759 726 //read splicing flag and cpb_removal_delay_delta 760 READ_FLAG( code, "concatenation_flag");727 sei_read_flag( pDecodedMessageOutputStream, code, "concatenation_flag"); 761 728 sei.m_concatenationFlag = code; 762 READ_CODE(( pHRD->getCpbRemovalDelayLengthMinus1() + 1 ), code, "au_cpb_removal_delay_delta_minus1" );729 sei_read_code( pDecodedMessageOutputStream, ( pHRD->getCpbRemovalDelayLengthMinus1() + 1 ), code, "au_cpb_removal_delay_delta_minus1" ); 763 730 sei.m_auCpbRemovalDelayDelta = code + 1; 731 764 732 for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ ) 765 733 { … … 769 737 for( i = 0; i < ( pHRD->getCpbCntMinus1( 0 ) + 1 ); i ++ ) 770 738 { 771 READ_CODE( ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, "initial_cpb_removal_delay" );739 sei_read_code( pDecodedMessageOutputStream, ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, nalOrVcl?"vcl_initial_cpb_removal_delay":"nal_initial_cpb_removal_delay" ); 772 740 sei.m_initialCpbRemovalDelay[i][nalOrVcl] = code; 773 READ_CODE( ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, "initial_cpb_removal_delay_offset" );741 sei_read_code( pDecodedMessageOutputStream, ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, nalOrVcl?"vcl_initial_cpb_removal_offset":"vcl_initial_cpb_removal_offset" ); 774 742 sei.m_initialCpbRemovalDelayOffset[i][nalOrVcl] = code; 775 743 if( pHRD->getSubPicCpbParamsPresentFlag() || sei.m_rapCpbParamsPresentFlag ) 776 744 { 777 READ_CODE( ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, "initial_alt_cpb_removal_delay" );745 sei_read_code( pDecodedMessageOutputStream, ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, nalOrVcl?"vcl_initial_alt_cpb_removal_delay":"vcl_initial_alt_cpb_removal_delay" ); 778 746 sei.m_initialAltCpbRemovalDelay[i][nalOrVcl] = code; 779 READ_CODE( ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, "initial_alt_cpb_removal_delay_offset" );747 sei_read_code( pDecodedMessageOutputStream, ( pHRD->getInitialCpbRemovalDelayLengthMinus1() + 1 ) , code, nalOrVcl?"vcl_initial_alt_cpb_removal_offset":"vcl_initial_alt_cpb_removal_offset" ); 780 748 sei.m_initialAltCpbRemovalDelayOffset[i][nalOrVcl] = code; 781 749 } … … 789 757 if (xPayloadExtensionPresent()) 790 758 { 791 READ_FLAG (code, "use_alt_cpb_params_flag");759 sei_read_flag( pDecodedMessageOutputStream, code, "use_alt_cpb_params_flag"); 792 760 sei.m_useAltCpbParamsFlag = code; 793 761 sei.m_useAltCpbParamsFlagPresent = true; 794 762 } 795 763 #endif 796 797 xParseByteAlign(); 798 } 764 } 765 799 766 #if VPS_VUI_BSP_HRD_PARAMS 800 Void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, UInt /*payloadSize*/, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps)801 #else 802 Void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, UInt /*payloadSize*/, TComSPS *sps)767 Void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, UInt payloadSize, TComSPS *sps, const SEIScalableNesting* nestingSei, const SEIBspNesting* bspNestingSei, TComVPS *vps, std::ostream *pDecodedMessageOutputStream) 768 #else 769 Void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, UInt payloadSize, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 803 770 #endif 804 771 { … … 851 818 TComHRD *hrd = vui->getHrdParameters(); 852 819 #endif 820 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 853 821 854 822 if( vui->getFrameFieldInfoPresentFlag() ) 855 823 { 856 READ_CODE(4, code, "pic_struct" ); sei.m_picStruct = code;857 READ_CODE( 2, code, "source_scan_type" ); sei.m_sourceScanType= code;858 READ_FLAG( code, "duplicate_flag" ); sei.m_duplicateFlag = ( code == 1 ? true : false);824 sei_read_code( pDecodedMessageOutputStream, 4, code, "pic_struct" ); sei.m_picStruct = code; 825 sei_read_code( pDecodedMessageOutputStream, 2, code, "source_scan_type" ); sei.m_sourceScanType = code; 826 sei_read_flag( pDecodedMessageOutputStream, code, "duplicate_flag" ); sei.m_duplicateFlag = (code == 1); 859 827 } 860 828 861 829 if( hrd->getCpbDpbDelaysPresentFlag()) 862 830 { 863 READ_CODE(( hrd->getCpbRemovalDelayLengthMinus1() + 1 ), code, "au_cpb_removal_delay_minus1" );831 sei_read_code( pDecodedMessageOutputStream, ( hrd->getCpbRemovalDelayLengthMinus1() + 1 ), code, "au_cpb_removal_delay_minus1" ); 864 832 sei.m_auCpbRemovalDelay = code + 1; 865 READ_CODE(( hrd->getDpbOutputDelayLengthMinus1() + 1 ), code, "pic_dpb_output_delay" );833 sei_read_code( pDecodedMessageOutputStream, ( hrd->getDpbOutputDelayLengthMinus1() + 1 ), code, "pic_dpb_output_delay" ); 866 834 sei.m_picDpbOutputDelay = code; 867 835 868 836 if(hrd->getSubPicCpbParamsPresentFlag()) 869 837 { 870 READ_CODE(hrd->getDpbOutputDelayDuLengthMinus1()+1, code, "pic_dpb_output_du_delay" );838 sei_read_code( pDecodedMessageOutputStream, hrd->getDpbOutputDelayDuLengthMinus1()+1, code, "pic_dpb_output_du_delay" ); 871 839 sei.m_picDpbOutputDuDelay = code; 872 840 } 841 873 842 if( hrd->getSubPicCpbParamsPresentFlag() && hrd->getSubPicCpbParamsInPicTimingSEIFlag() ) 874 843 { 875 READ_UVLC(code, "num_decoding_units_minus1");844 sei_read_uvlc( pDecodedMessageOutputStream, code, "num_decoding_units_minus1"); 876 845 sei.m_numDecodingUnitsMinus1 = code; 877 READ_FLAG(code, "du_common_cpb_removal_delay_flag" );846 sei_read_flag( pDecodedMessageOutputStream, code, "du_common_cpb_removal_delay_flag" ); 878 847 sei.m_duCommonCpbRemovalDelayFlag = code; 879 848 if( sei.m_duCommonCpbRemovalDelayFlag ) 880 849 { 881 READ_CODE( ( hrd->getDuCpbRemovalDelayLengthMinus1() + 1 ), code, "du_common_cpb_removal_delay_minus1" );850 sei_read_code( pDecodedMessageOutputStream, ( hrd->getDuCpbRemovalDelayLengthMinus1() + 1 ), code, "du_common_cpb_removal_delay_increment_minus1" ); 882 851 sei.m_duCommonCpbRemovalDelayMinus1 = code; 883 852 } … … 895 864 for( i = 0; i <= sei.m_numDecodingUnitsMinus1; i ++ ) 896 865 { 897 READ_UVLC( code, "num_nalus_in_du_minus1");866 sei_read_uvlc( pDecodedMessageOutputStream, code, "num_nalus_in_du_minus1[i]"); 898 867 sei.m_numNalusInDuMinus1[ i ] = code; 899 868 if( ( !sei.m_duCommonCpbRemovalDelayFlag ) && ( i < sei.m_numDecodingUnitsMinus1 ) ) 900 869 { 901 READ_CODE( ( hrd->getDuCpbRemovalDelayLengthMinus1() + 1 ), code, "du_cpb_removal_delay_minus1" );870 sei_read_code( pDecodedMessageOutputStream, ( hrd->getDuCpbRemovalDelayLengthMinus1() + 1 ), code, "du_cpb_removal_delay_minus1[i]" ); 902 871 sei.m_duCpbRemovalDelayMinus1[ i ] = code; 903 872 } … … 905 874 } 906 875 } 907 xParseByteAlign(); 908 } 909 Void SEIReader::xParseSEIRecoveryPoint(SEIRecoveryPoint& sei, UInt /*payloadSize*/)876 } 877 878 Void SEIReader::xParseSEIRecoveryPoint(SEIRecoveryPoint& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 910 879 { 911 880 Int iCode; 912 881 UInt uiCode; 913 READ_SVLC( iCode, "recovery_poc_cnt" ); sei.m_recoveryPocCnt = iCode; 914 READ_FLAG( uiCode, "exact_matching_flag" ); sei.m_exactMatchingFlag = uiCode; 915 READ_FLAG( uiCode, "broken_link_flag" ); sei.m_brokenLinkFlag = uiCode; 916 xParseByteAlign(); 917 } 918 Void SEIReader::xParseSEIFramePacking(SEIFramePacking& sei, UInt /*payloadSize*/) 882 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 883 884 sei_read_svlc( pDecodedMessageOutputStream, iCode, "recovery_poc_cnt" ); sei.m_recoveryPocCnt = iCode; 885 sei_read_flag( pDecodedMessageOutputStream, uiCode, "exact_matching_flag" ); sei.m_exactMatchingFlag = uiCode; 886 sei_read_flag( pDecodedMessageOutputStream, uiCode, "broken_link_flag" ); sei.m_brokenLinkFlag = uiCode; 887 } 888 889 Void SEIReader::xParseSEIFramePacking(SEIFramePacking& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 919 890 { 920 891 UInt val; 921 READ_UVLC( val, "frame_packing_arrangement_id" ); sei.m_arrangementId = val; 922 READ_FLAG( val, "frame_packing_arrangement_cancel_flag" ); sei.m_arrangementCancelFlag = val; 892 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 893 894 sei_read_uvlc( pDecodedMessageOutputStream, val, "frame_packing_arrangement_id" ); sei.m_arrangementId = val; 895 sei_read_flag( pDecodedMessageOutputStream, val, "frame_packing_arrangement_cancel_flag" ); sei.m_arrangementCancelFlag = val; 923 896 924 897 if ( !sei.m_arrangementCancelFlag ) 925 898 { 926 READ_CODE(7, val, "frame_packing_arrangement_type" ); sei.m_arrangementType = val;899 sei_read_code( pDecodedMessageOutputStream, 7, val, "frame_packing_arrangement_type" ); sei.m_arrangementType = val; 927 900 assert((sei.m_arrangementType > 2) && (sei.m_arrangementType < 6) ); 928 READ_FLAG( val, "quincunx_sampling_flag" ); sei.m_quincunxSamplingFlag = val; 929 930 READ_CODE( 6, val, "content_interpretation_type" ); sei.m_contentInterpretationType = val; 931 READ_FLAG( val, "spatial_flipping_flag" ); sei.m_spatialFlippingFlag = val; 932 READ_FLAG( val, "frame0_flipped_flag" ); sei.m_frame0FlippedFlag = val; 933 READ_FLAG( val, "field_views_flag" ); sei.m_fieldViewsFlag = val; 934 READ_FLAG( val, "current_frame_is_frame0_flag" ); sei.m_currentFrameIsFrame0Flag = val; 935 READ_FLAG( val, "frame0_self_contained_flag" ); sei.m_frame0SelfContainedFlag = val; 936 READ_FLAG( val, "frame1_self_contained_flag" ); sei.m_frame1SelfContainedFlag = val; 901 902 sei_read_flag( pDecodedMessageOutputStream, val, "quincunx_sampling_flag" ); sei.m_quincunxSamplingFlag = val; 903 904 sei_read_code( pDecodedMessageOutputStream, 6, val, "content_interpretation_type" ); sei.m_contentInterpretationType = val; 905 sei_read_flag( pDecodedMessageOutputStream, val, "spatial_flipping_flag" ); sei.m_spatialFlippingFlag = val; 906 sei_read_flag( pDecodedMessageOutputStream, val, "frame0_flipped_flag" ); sei.m_frame0FlippedFlag = val; 907 sei_read_flag( pDecodedMessageOutputStream, val, "field_views_flag" ); sei.m_fieldViewsFlag = val; 908 sei_read_flag( pDecodedMessageOutputStream, val, "current_frame_is_frame0_flag" ); sei.m_currentFrameIsFrame0Flag = val; 909 sei_read_flag( pDecodedMessageOutputStream, val, "frame0_self_contained_flag" ); sei.m_frame0SelfContainedFlag = val; 910 sei_read_flag( pDecodedMessageOutputStream, val, "frame1_self_contained_flag" ); sei.m_frame1SelfContainedFlag = val; 937 911 938 912 if ( sei.m_quincunxSamplingFlag == 0 && sei.m_arrangementType != 5) 939 913 { 940 READ_CODE( 4, val, "frame0_grid_position_x" ); sei.m_frame0GridPositionX = val; 941 READ_CODE( 4, val, "frame0_grid_position_y" ); sei.m_frame0GridPositionY = val; 942 READ_CODE( 4, val, "frame1_grid_position_x" ); sei.m_frame1GridPositionX = val; 943 READ_CODE( 4, val, "frame1_grid_position_y" ); sei.m_frame1GridPositionY = val; 944 } 945 946 READ_CODE( 8, val, "frame_packing_arrangement_reserved_byte" ); sei.m_arrangementReservedByte = val; 947 READ_FLAG( val, "frame_packing_arrangement_persistence_flag" ); sei.m_arrangementPersistenceFlag = val ? true : false; 948 } 949 READ_FLAG( val, "upsampled_aspect_ratio" ); sei.m_upsampledAspectRatio = val; 950 951 xParseByteAlign(); 952 } 953 954 Void SEIReader::xParseSEIDisplayOrientation(SEIDisplayOrientation& sei, UInt /*payloadSize*/) 914 sei_read_code( pDecodedMessageOutputStream, 4, val, "frame0_grid_position_x" ); sei.m_frame0GridPositionX = val; 915 sei_read_code( pDecodedMessageOutputStream, 4, val, "frame0_grid_position_y" ); sei.m_frame0GridPositionY = val; 916 sei_read_code( pDecodedMessageOutputStream, 4, val, "frame1_grid_position_x" ); sei.m_frame1GridPositionX = val; 917 sei_read_code( pDecodedMessageOutputStream, 4, val, "frame1_grid_position_y" ); sei.m_frame1GridPositionY = val; 918 } 919 920 sei_read_code( pDecodedMessageOutputStream, 8, val, "frame_packing_arrangement_reserved_byte" ); sei.m_arrangementReservedByte = val; 921 sei_read_flag( pDecodedMessageOutputStream, val, "frame_packing_arrangement_persistence_flag" ); sei.m_arrangementPersistenceFlag = (val != 0); 922 } 923 sei_read_flag( pDecodedMessageOutputStream, val, "upsampled_aspect_ratio_flag" ); sei.m_upsampledAspectRatio = val; 924 } 925 926 Void SEIReader::xParseSEISegmentedRectFramePacking(SEISegmentedRectFramePacking& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 955 927 { 956 928 UInt val; 957 READ_FLAG( val, "display_orientation_cancel_flag" ); sei.cancelFlag = val; 958 if( !sei.cancelFlag ) 959 { 960 READ_FLAG( val, "hor_flip" ); sei.horFlip = val; 961 READ_FLAG( val, "ver_flip" ); sei.verFlip = val; 962 READ_CODE( 16, val, "anticlockwise_rotation" ); sei.anticlockwiseRotation = val; 963 READ_FLAG( val, "display_orientation_persistence_flag" ); sei.persistenceFlag = val; 964 } 965 xParseByteAlign(); 966 } 967 968 Void SEIReader::xParseSEITemporalLevel0Index(SEITemporalLevel0Index& sei, UInt /*payloadSize*/) 929 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 930 sei_read_flag( pDecodedMessageOutputStream, val, "segmented_rect_frame_packing_arrangement_cancel_flag" ); sei.m_arrangementCancelFlag = val; 931 if( !sei.m_arrangementCancelFlag ) 932 { 933 sei_read_code( pDecodedMessageOutputStream, 2, val, "segmented_rect_content_interpretation_type" ); sei.m_contentInterpretationType = val; 934 sei_read_flag( pDecodedMessageOutputStream, val, "segmented_rect_frame_packing_arrangement_persistence" ); sei.m_arrangementPersistenceFlag = val; 935 } 936 } 937 938 Void SEIReader::xParseSEIDisplayOrientation(SEIDisplayOrientation& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 969 939 { 970 940 UInt val; 971 READ_CODE ( 8, val, "tl0_idx" ); sei.tl0Idx = val; 972 READ_CODE ( 8, val, "rap_idx" ); sei.rapIdx = val; 973 xParseByteAlign(); 974 } 975 976 Void SEIReader::xParseSEIGradualDecodingRefreshInfo(SEIGradualDecodingRefreshInfo& sei, UInt /*payloadSize*/) 941 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 942 sei_read_flag( pDecodedMessageOutputStream, val, "display_orientation_cancel_flag" ); sei.cancelFlag = val; 943 if( !sei.cancelFlag ) 944 { 945 sei_read_flag( pDecodedMessageOutputStream, val, "hor_flip" ); sei.horFlip = val; 946 sei_read_flag( pDecodedMessageOutputStream, val, "ver_flip" ); sei.verFlip = val; 947 sei_read_code( pDecodedMessageOutputStream, 16, val, "anticlockwise_rotation" ); sei.anticlockwiseRotation = val; 948 sei_read_flag( pDecodedMessageOutputStream, val, "display_orientation_persistence_flag" ); sei.persistenceFlag = val; 949 } 950 } 951 952 Void SEIReader::xParseSEITemporalLevel0Index(SEITemporalLevel0Index& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 977 953 { 978 954 UInt val; 979 READ_FLAG( val, "gdr_foreground_flag" ); sei.m_gdrForegroundFlag = val ? 1 : 0; 980 xParseByteAlign(); 981 } 982 983 Void SEIReader::xParseSEIToneMappingInfo(SEIToneMappingInfo& sei, UInt /*payloadSize*/) 955 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 956 sei_read_code( pDecodedMessageOutputStream, 8, val, "temporal_sub_layer_zero_idx" ); sei.tl0Idx = val; 957 sei_read_code( pDecodedMessageOutputStream, 8, val, "irap_pic_id" ); sei.rapIdx = val; 958 } 959 960 Void SEIReader::xParseSEIRegionRefreshInfo(SEIGradualDecodingRefreshInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 961 { 962 UInt val; 963 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 964 sei_read_flag( pDecodedMessageOutputStream, val, "refreshed_region_flag" ); sei.m_gdrForegroundFlag = val ? 1 : 0; 965 } 966 967 Void SEIReader::xParseSEINoDisplay(SEINoDisplay& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 968 { 969 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 970 sei.m_noDisplay = true; 971 } 972 973 Void SEIReader::xParseSEIToneMappingInfo(SEIToneMappingInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 984 974 { 985 975 Int i; 986 976 UInt val; 987 READ_UVLC( val, "tone_map_id" ); sei.m_toneMapId = val; 988 READ_FLAG( val, "tone_map_cancel_flag" ); sei.m_toneMapCancelFlag = val; 977 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 978 sei_read_uvlc( pDecodedMessageOutputStream, val, "tone_map_id" ); sei.m_toneMapId = val; 979 sei_read_flag( pDecodedMessageOutputStream, val, "tone_map_cancel_flag" ); sei.m_toneMapCancelFlag = val; 989 980 990 981 if ( !sei.m_toneMapCancelFlag ) 991 982 { 992 READ_FLAG( val, "tone_map_persistence_flag" ); sei.m_toneMapPersistenceFlag = val;993 READ_CODE(8, val, "coded_data_bit_depth" ); sei.m_codedDataBitDepth = val;994 READ_CODE(8, val, "target_bit_depth" ); sei.m_targetBitDepth = val;995 READ_UVLC( val, "model_id" ); sei.m_modelId = val;983 sei_read_flag( pDecodedMessageOutputStream, val, "tone_map_persistence_flag" ); sei.m_toneMapPersistenceFlag = val; 984 sei_read_code( pDecodedMessageOutputStream, 8, val, "coded_data_bit_depth" ); sei.m_codedDataBitDepth = val; 985 sei_read_code( pDecodedMessageOutputStream, 8, val, "target_bit_depth" ); sei.m_targetBitDepth = val; 986 sei_read_uvlc( pDecodedMessageOutputStream, val, "tone_map_model_id" ); sei.m_modelId = val; 996 987 switch(sei.m_modelId) 997 988 { 998 989 case 0: 999 990 { 1000 READ_CODE(32, val, "min_value" ); sei.m_minValue = val;1001 READ_CODE(32, val, "max_value" ); sei.m_maxValue = val;991 sei_read_code( pDecodedMessageOutputStream, 32, val, "min_value" ); sei.m_minValue = val; 992 sei_read_code( pDecodedMessageOutputStream, 32, val, "max_value" ); sei.m_maxValue = val; 1002 993 break; 1003 994 } 1004 995 case 1: 1005 996 { 1006 READ_CODE(32, val, "sigmoid_midpoint" ); sei.m_sigmoidMidpoint = val;1007 READ_CODE(32, val, "sigmoid_width" ); sei.m_sigmoidWidth = val;997 sei_read_code( pDecodedMessageOutputStream, 32, val, "sigmoid_midpoint" ); sei.m_sigmoidMidpoint = val; 998 sei_read_code( pDecodedMessageOutputStream, 32, val, "sigmoid_width" ); sei.m_sigmoidWidth = val; 1008 999 break; 1009 1000 } … … 1014 1005 for(i = 0; i < num; i++) 1015 1006 { 1016 READ_CODE( ((( sei.m_codedDataBitDepth + 7 ) >> 3 ) << 3), val, "start_of_coded_interval" );1007 sei_read_code( pDecodedMessageOutputStream, ((( sei.m_codedDataBitDepth + 7 ) >> 3 ) << 3), val, "start_of_coded_interval[i]" ); 1017 1008 sei.m_startOfCodedInterval[i] = val; 1018 1009 } … … 1022 1013 case 3: 1023 1014 { 1024 READ_CODE(16, val, "num_pivots" ); sei.m_numPivots = val;1015 sei_read_code( pDecodedMessageOutputStream, 16, val, "num_pivots" ); sei.m_numPivots = val; 1025 1016 sei.m_codedPivotValue.resize(sei.m_numPivots); 1026 1017 sei.m_targetPivotValue.resize(sei.m_numPivots); 1027 1018 for(i = 0; i < sei.m_numPivots; i++ ) 1028 1019 { 1029 READ_CODE( ((( sei.m_codedDataBitDepth + 7 ) >> 3 ) << 3), val, "coded_pivot_value" );1020 sei_read_code( pDecodedMessageOutputStream, ((( sei.m_codedDataBitDepth + 7 ) >> 3 ) << 3), val, "coded_pivot_value[i]" ); 1030 1021 sei.m_codedPivotValue[i] = val; 1031 READ_CODE( ((( sei.m_targetBitDepth + 7 ) >> 3 ) << 3), val, "target_pivot_value" );1022 sei_read_code( pDecodedMessageOutputStream, ((( sei.m_targetBitDepth + 7 ) >> 3 ) << 3), val, "target_pivot_value[i]" ); 1032 1023 sei.m_targetPivotValue[i] = val; 1033 1024 } … … 1036 1027 case 4: 1037 1028 { 1038 READ_CODE(8, val, "camera_iso_speed_idc" ); sei.m_cameraIsoSpeedIdc = val;1029 sei_read_code( pDecodedMessageOutputStream, 8, val, "camera_iso_speed_idc" ); sei.m_cameraIsoSpeedIdc = val; 1039 1030 if( sei.m_cameraIsoSpeedIdc == 255) //Extended_ISO 1040 1031 { 1041 READ_CODE(32, val, "camera_iso_speed_value" ); sei.m_cameraIsoSpeedValue = val;1042 } 1043 READ_CODE(8, val, "exposure_index_idc" ); sei.m_exposureIndexIdc = val;1032 sei_read_code( pDecodedMessageOutputStream, 32, val, "camera_iso_speed_value" ); sei.m_cameraIsoSpeedValue = val; 1033 } 1034 sei_read_code( pDecodedMessageOutputStream, 8, val, "exposure_index_idc" ); sei.m_exposureIndexIdc = val; 1044 1035 if( sei.m_exposureIndexIdc == 255) //Extended_ISO 1045 1036 { 1046 READ_CODE(32, val, "exposure_index_value" ); sei.m_exposureIndexValue = val;1047 } 1048 READ_FLAG(val, "exposure_compensation_value_sign_flag" ); sei.m_exposureCompensationValueSignFlag = val;1049 READ_CODE(16, val, "exposure_compensation_value_numerator" ); sei.m_exposureCompensationValueNumerator = val;1050 READ_CODE(16, val, "exposure_compensation_value_denom_idc" ); sei.m_exposureCompensationValueDenomIdc = val;1051 READ_CODE(32, val, "ref_screen_luminance_white" ); sei.m_refScreenLuminanceWhite = val;1052 READ_CODE(32, val, "extended_range_white_level" ); sei.m_extendedRangeWhiteLevel = val;1053 READ_CODE( 16, val, "nominal_black_level_luma_code_value" );sei.m_nominalBlackLevelLumaCodeValue = val;1054 READ_CODE( 16, val, "nominal_white_level_luma_code_value" );sei.m_nominalWhiteLevelLumaCodeValue= val;1055 READ_CODE( 16, val, "extended_white_level_luma_code_value" );sei.m_extendedWhiteLevelLumaCodeValue = val;1037 sei_read_code( pDecodedMessageOutputStream, 32, val, "exposure_index_value" ); sei.m_exposureIndexValue = val; 1038 } 1039 sei_read_flag( pDecodedMessageOutputStream, val, "exposure_compensation_value_sign_flag" ); sei.m_exposureCompensationValueSignFlag = val; 1040 sei_read_code( pDecodedMessageOutputStream, 16, val, "exposure_compensation_value_numerator" ); sei.m_exposureCompensationValueNumerator = val; 1041 sei_read_code( pDecodedMessageOutputStream, 16, val, "exposure_compensation_value_denom_idc" ); sei.m_exposureCompensationValueDenomIdc = val; 1042 sei_read_code( pDecodedMessageOutputStream, 32, val, "ref_screen_luminance_white" ); sei.m_refScreenLuminanceWhite = val; 1043 sei_read_code( pDecodedMessageOutputStream, 32, val, "extended_range_white_level" ); sei.m_extendedRangeWhiteLevel = val; 1044 sei_read_code( pDecodedMessageOutputStream, 16, val, "nominal_black_level_code_value" ); sei.m_nominalBlackLevelLumaCodeValue = val; 1045 sei_read_code( pDecodedMessageOutputStream, 16, val, "nominal_white_level_code_value" ); sei.m_nominalWhiteLevelLumaCodeValue= val; 1046 sei_read_code( pDecodedMessageOutputStream, 16, val, "extended_white_level_code_value" ); sei.m_extendedWhiteLevelLumaCodeValue = val; 1056 1047 break; 1057 1048 } … … 1062 1053 } 1063 1054 }//switch model id 1064 }// if(!sei.m_toneMapCancelFlag) 1065 1066 xParseByteAlign(); 1067 } 1068 1069 #if P0050_KNEE_FUNCTION_SEI 1070 Void SEIReader::xParseSEIKneeFunctionInfo(SEIKneeFunctionInfo& sei, UInt /*payloadSize*/){ 1055 }// if(!sei.m_toneMapCancelFlag) 1056 } 1057 1058 Void SEIReader::xParseSEISOPDescription(SEISOPDescription &sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1059 { 1060 Int iCode; 1061 UInt uiCode; 1062 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1063 1064 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "sop_seq_parameter_set_id" ); sei.m_sopSeqParameterSetId = uiCode; 1065 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_pics_in_sop_minus1" ); sei.m_numPicsInSopMinus1 = uiCode; 1066 for (UInt i = 0; i <= sei.m_numPicsInSopMinus1; i++) 1067 { 1068 sei_read_code( pDecodedMessageOutputStream, 6, uiCode, "sop_vcl_nut[i]" ); sei.m_sopDescVclNaluType[i] = uiCode; 1069 sei_read_code( pDecodedMessageOutputStream, 3, sei.m_sopDescTemporalId[i], "sop_temporal_id[i]" ); sei.m_sopDescTemporalId[i] = uiCode; 1070 if (sei.m_sopDescVclNaluType[i] != NAL_UNIT_CODED_SLICE_IDR_W_RADL && sei.m_sopDescVclNaluType[i] != NAL_UNIT_CODED_SLICE_IDR_N_LP) 1071 { 1072 sei_read_uvlc( pDecodedMessageOutputStream, sei.m_sopDescStRpsIdx[i], "sop_short_term_rps_idx[i]" ); sei.m_sopDescStRpsIdx[i] = uiCode; 1073 } 1074 if (i > 0) 1075 { 1076 sei_read_svlc( pDecodedMessageOutputStream, iCode, "sop_poc_delta[i]" ); sei.m_sopDescPocDelta[i] = iCode; 1077 } 1078 } 1079 } 1080 1081 #if LAYERS_NOT_PRESENT_SEI 1082 Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, TComVPS *vps, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 1083 #else 1084 Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 1085 #endif 1086 { 1087 UInt uiCode; 1088 SEIMessages seis; 1089 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1090 1091 sei_read_flag( pDecodedMessageOutputStream, uiCode, "bitstream_subset_flag" ); sei.m_bitStreamSubsetFlag = uiCode; 1092 sei_read_flag( pDecodedMessageOutputStream, uiCode, "nesting_op_flag" ); sei.m_nestingOpFlag = uiCode; 1093 if (sei.m_nestingOpFlag) 1094 { 1095 sei_read_flag( pDecodedMessageOutputStream, uiCode, "default_op_flag" ); sei.m_defaultOpFlag = uiCode; 1096 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "nesting_num_ops_minus1" ); sei.m_nestingNumOpsMinus1 = uiCode; 1097 for (UInt i = sei.m_defaultOpFlag; i <= sei.m_nestingNumOpsMinus1; i++) 1098 { 1099 sei_read_code( pDecodedMessageOutputStream, 3, uiCode, "nesting_max_temporal_id_plus1[i]" ); sei.m_nestingMaxTemporalIdPlus1[i] = uiCode; 1100 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "nesting_op_idx[i]" ); sei.m_nestingOpIdx[i] = uiCode; 1101 } 1102 } 1103 else 1104 { 1105 sei_read_flag( pDecodedMessageOutputStream, uiCode, "all_layers_flag" ); sei.m_allLayersFlag = uiCode; 1106 if (!sei.m_allLayersFlag) 1107 { 1108 sei_read_code( pDecodedMessageOutputStream, 3, uiCode, "nesting_no_op_max_temporal_id_plus1" ); sei.m_nestingNoOpMaxTemporalIdPlus1 = uiCode; 1109 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "nesting_num_layers_minus1" ); sei.m_nestingNumLayersMinus1 = uiCode; 1110 for (UInt i = 0; i <= sei.m_nestingNumLayersMinus1; i++) 1111 { 1112 sei_read_code( pDecodedMessageOutputStream, 6, uiCode, "nesting_layer_id[i]" ); sei.m_nestingLayerId[i] = uiCode; 1113 } 1114 } 1115 } 1116 1117 // byte alignment 1118 while ( m_pcBitstream->getNumBitsRead() % 8 != 0 ) 1119 { 1120 UInt code; 1121 sei_read_flag( pDecodedMessageOutputStream, code, "nesting_zero_bit" ); 1122 } 1123 1124 sei.m_callerOwnsSEIs = false; 1125 1126 // read nested SEI messages 1127 do { 1128 #if O0164_MULTI_LAYER_HRD 1129 #if LAYERS_NOT_PRESENT_SEI 1130 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream, &sei); 1131 #else 1132 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, pDecodedMessageOutputStream, &sei); 1133 #endif 1134 #else 1135 #if LAYERS_NOT_PRESENT_SEI 1136 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream); 1137 #else 1138 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, pDecodedMessageOutputStream); 1139 #endif 1140 #endif 1141 } while (m_pcBitstream->getNumBitsLeft() > 8); 1142 1143 if (pDecodedMessageOutputStream) (*pDecodedMessageOutputStream) << "End of scalable nesting SEI message\n"; 1144 } 1145 1146 Void SEIReader::xParseSEITempMotionConstraintsTileSets(SEITempMotionConstrainedTileSets& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1147 { 1148 UInt code; 1149 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1150 sei_read_flag( pDecodedMessageOutputStream, code, "mc_all_tiles_exact_sample_value_match_flag"); sei.m_mc_all_tiles_exact_sample_value_match_flag = (code != 0); 1151 sei_read_flag( pDecodedMessageOutputStream, code, "each_tile_one_tile_set_flag"); sei.m_each_tile_one_tile_set_flag = (code != 0); 1152 1153 if(!sei.m_each_tile_one_tile_set_flag) 1154 { 1155 sei_read_flag( pDecodedMessageOutputStream, code, "limited_tile_set_display_flag"); sei.m_limited_tile_set_display_flag = (code != 0); 1156 sei_read_uvlc( pDecodedMessageOutputStream, code, "num_sets_in_message_minus1"); sei.setNumberOfTileSets(code + 1); 1157 1158 if(sei.getNumberOfTileSets() != 0) 1159 { 1160 for(Int i = 0; i < sei.getNumberOfTileSets(); i++) 1161 { 1162 sei_read_uvlc( pDecodedMessageOutputStream, code, "mcts_id"); sei.tileSetData(i).m_mcts_id = code; 1163 1164 if(sei.m_limited_tile_set_display_flag) 1165 { 1166 sei_read_flag( pDecodedMessageOutputStream, code, "display_tile_set_flag"); sei.tileSetData(i).m_display_tile_set_flag = (code != 1); 1167 } 1168 1169 sei_read_uvlc( pDecodedMessageOutputStream, code, "num_tile_rects_in_set_minus1"); sei.tileSetData(i).setNumberOfTileRects(code + 1); 1170 1171 for(Int j=0; j<sei.tileSetData(i).getNumberOfTileRects(); j++) 1172 { 1173 sei_read_uvlc( pDecodedMessageOutputStream, code, "top_left_tile_index"); sei.tileSetData(i).topLeftTileIndex(j) = code; 1174 sei_read_uvlc( pDecodedMessageOutputStream, code, "bottom_right_tile_index"); sei.tileSetData(i).bottomRightTileIndex(j) = code; 1175 } 1176 1177 if(!sei.m_mc_all_tiles_exact_sample_value_match_flag) 1178 { 1179 sei_read_flag( pDecodedMessageOutputStream, code, "exact_sample_value_match_flag"); sei.tileSetData(i).m_exact_sample_value_match_flag = (code != 0); 1180 } 1181 sei_read_flag( pDecodedMessageOutputStream, code, "mcts_tier_level_idc_present_flag"); sei.tileSetData(i).m_mcts_tier_level_idc_present_flag = (code != 0); 1182 1183 if(sei.tileSetData(i).m_mcts_tier_level_idc_present_flag) 1184 { 1185 sei_read_flag( pDecodedMessageOutputStream, code, "mcts_tier_flag"); sei.tileSetData(i).m_mcts_tier_flag = (code != 0); 1186 sei_read_code( pDecodedMessageOutputStream, 8, code, "mcts_level_idc"); sei.tileSetData(i).m_mcts_level_idc = code; 1187 } 1188 } 1189 } 1190 } 1191 else 1192 { 1193 sei_read_flag( pDecodedMessageOutputStream, code, "max_mcs_tier_level_idc_present_flag"); sei.m_max_mcs_tier_level_idc_present_flag = code; 1194 if(sei.m_max_mcs_tier_level_idc_present_flag) 1195 { 1196 sei_read_flag( pDecodedMessageOutputStream, code, "max_mcts_tier_flag"); sei.m_max_mcts_tier_flag = code; 1197 sei_read_code( pDecodedMessageOutputStream, 8, code, "max_mcts_level_idc"); sei.m_max_mcts_level_idc = code; 1198 } 1199 } 1200 } 1201 1202 Void SEIReader::xParseSEITimeCode(SEITimeCode& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1203 { 1204 UInt code; 1205 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1206 sei_read_code( pDecodedMessageOutputStream, 2, code, "num_clock_ts"); sei.numClockTs = code; 1207 for(Int i = 0; i < sei.numClockTs; i++) 1208 { 1209 TComSEITimeSet currentTimeSet; 1210 sei_read_flag( pDecodedMessageOutputStream, code, "clock_time_stamp_flag[i]"); currentTimeSet.clockTimeStampFlag = code; 1211 if(currentTimeSet.clockTimeStampFlag) 1212 { 1213 sei_read_flag( pDecodedMessageOutputStream, code, "nuit_field_based_flag"); currentTimeSet.numUnitFieldBasedFlag = code; 1214 sei_read_code( pDecodedMessageOutputStream, 5, code, "counting_type"); currentTimeSet.countingType = code; 1215 sei_read_flag( pDecodedMessageOutputStream, code, "full_timestamp_flag"); currentTimeSet.fullTimeStampFlag = code; 1216 sei_read_flag( pDecodedMessageOutputStream, code, "discontinuity_flag"); currentTimeSet.discontinuityFlag = code; 1217 sei_read_flag( pDecodedMessageOutputStream, code, "cnt_dropped_flag"); currentTimeSet.cntDroppedFlag = code; 1218 sei_read_code( pDecodedMessageOutputStream, 9, code, "n_frames"); currentTimeSet.numberOfFrames = code; 1219 if(currentTimeSet.fullTimeStampFlag) 1220 { 1221 sei_read_code( pDecodedMessageOutputStream, 6, code, "seconds_value"); currentTimeSet.secondsValue = code; 1222 sei_read_code( pDecodedMessageOutputStream, 6, code, "minutes_value"); currentTimeSet.minutesValue = code; 1223 sei_read_code( pDecodedMessageOutputStream, 5, code, "hours_value"); currentTimeSet.hoursValue = code; 1224 } 1225 else 1226 { 1227 sei_read_flag( pDecodedMessageOutputStream, code, "seconds_flag"); currentTimeSet.secondsFlag = code; 1228 if(currentTimeSet.secondsFlag) 1229 { 1230 sei_read_code( pDecodedMessageOutputStream, 6, code, "seconds_value"); currentTimeSet.secondsValue = code; 1231 sei_read_flag( pDecodedMessageOutputStream, code, "minutes_flag"); currentTimeSet.minutesFlag = code; 1232 if(currentTimeSet.minutesFlag) 1233 { 1234 sei_read_code( pDecodedMessageOutputStream, 6, code, "minutes_value"); currentTimeSet.minutesValue = code; 1235 sei_read_flag( pDecodedMessageOutputStream, code, "hours_flag"); currentTimeSet.hoursFlag = code; 1236 if(currentTimeSet.hoursFlag) 1237 sei_read_code( pDecodedMessageOutputStream, 5, code, "hours_value"); currentTimeSet.hoursValue = code; 1238 } 1239 } 1240 } 1241 sei_read_code( pDecodedMessageOutputStream, 5, code, "time_offset_length"); currentTimeSet.timeOffsetLength = code; 1242 if(currentTimeSet.timeOffsetLength > 0) 1243 { 1244 sei_read_code( pDecodedMessageOutputStream, currentTimeSet.timeOffsetLength, code, "time_offset_value"); 1245 if((code & (1 << (currentTimeSet.timeOffsetLength-1))) == 0) 1246 { 1247 currentTimeSet.timeOffsetValue = code; 1248 } 1249 else 1250 { 1251 code &= (1<< (currentTimeSet.timeOffsetLength-1)) - 1; 1252 currentTimeSet.timeOffsetValue = ~code + 1; 1253 } 1254 } 1255 } 1256 sei.timeSetArray[i] = currentTimeSet; 1257 } 1258 } 1259 1260 Void SEIReader::xParseSEIChromaSamplingFilterHint(SEIChromaSamplingFilterHint& sei, UInt payloadSize/*, TComSPS* sps*/, std::ostream *pDecodedMessageOutputStream) 1261 { 1262 UInt uiCode; 1263 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1264 1265 sei_read_code( pDecodedMessageOutputStream, 8, uiCode, "ver_chroma_filter_idc"); sei.m_verChromaFilterIdc = uiCode; 1266 sei_read_code( pDecodedMessageOutputStream, 8, uiCode, "hor_chroma_filter_idc"); sei.m_horChromaFilterIdc = uiCode; 1267 sei_read_flag( pDecodedMessageOutputStream, uiCode, "ver_filtering_process_flag"); sei.m_verFilteringProcessFlag = uiCode; 1268 if(sei.m_verChromaFilterIdc == 1 || sei.m_horChromaFilterIdc == 1) 1269 { 1270 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "target_format_idc"); sei.m_targetFormatIdc = uiCode; 1271 if(sei.m_verChromaFilterIdc == 1) 1272 { 1273 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_vertical_filters"); sei.m_numVerticalFilters = uiCode; 1274 if(sei.m_numVerticalFilters > 0) 1275 { 1276 sei.m_verTapLengthMinus1 = (Int*)malloc(sei.m_numVerticalFilters * sizeof(Int)); 1277 sei.m_verFilterCoeff = (Int**)malloc(sei.m_numVerticalFilters * sizeof(Int*)); 1278 for(Int i = 0; i < sei.m_numVerticalFilters; i ++) 1279 { 1280 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "ver_tap_length_minus_1"); sei.m_verTapLengthMinus1[i] = uiCode; 1281 sei.m_verFilterCoeff[i] = (Int*)malloc(sei.m_verTapLengthMinus1[i] * sizeof(Int)); 1282 for(Int j = 0; j < sei.m_verTapLengthMinus1[i]; j ++) 1283 { 1284 sei_read_svlc( pDecodedMessageOutputStream, sei.m_verFilterCoeff[i][j], "ver_filter_coeff"); 1285 } 1286 } 1287 } 1288 } 1289 if(sei.m_horChromaFilterIdc == 1) 1290 { 1291 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_horizontal_filters"); sei.m_numHorizontalFilters = uiCode; 1292 if(sei.m_numHorizontalFilters > 0) 1293 { 1294 sei.m_horTapLengthMinus1 = (Int*)malloc(sei.m_numHorizontalFilters * sizeof(Int)); 1295 sei.m_horFilterCoeff = (Int**)malloc(sei.m_numHorizontalFilters * sizeof(Int*)); 1296 for(Int i = 0; i < sei.m_numHorizontalFilters; i ++) 1297 { 1298 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "hor_tap_length_minus_1"); sei.m_horTapLengthMinus1[i] = uiCode; 1299 sei.m_horFilterCoeff[i] = (Int*)malloc(sei.m_horTapLengthMinus1[i] * sizeof(Int)); 1300 for(Int j = 0; j < sei.m_horTapLengthMinus1[i]; j ++) 1301 { 1302 sei_read_svlc( pDecodedMessageOutputStream, sei.m_horFilterCoeff[i][j], "hor_filter_coeff"); 1303 } 1304 } 1305 } 1306 } 1307 } 1308 } 1309 1310 Void SEIReader::xParseSEIKneeFunctionInfo(SEIKneeFunctionInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1311 { 1071 1312 Int i; 1072 1313 UInt val; 1073 READ_UVLC( val, "knee_function_id" ); sei.m_kneeId = val; 1074 READ_FLAG( val, "knee_function_cancel_flag" ); sei.m_kneeCancelFlag = val; 1314 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1315 1316 sei_read_uvlc( pDecodedMessageOutputStream, val, "knee_function_id" ); sei.m_kneeId = val; 1317 sei_read_flag( pDecodedMessageOutputStream, val, "knee_function_cancel_flag" ); sei.m_kneeCancelFlag = val; 1075 1318 if ( !sei.m_kneeCancelFlag ) 1076 1319 { 1077 READ_FLAG( val, "knee_function_persistence_flag" ); sei.m_kneePersistenceFlag = val; 1078 READ_FLAG( val, "mapping_flag" ); sei.m_kneeMappingFlag = val; 1079 READ_CODE( 32, val, "input_d_range" ); sei.m_kneeInputDrange = val; 1080 READ_CODE( 32, val, "input_disp_luminance" ); sei.m_kneeInputDispLuminance = val; 1081 READ_CODE( 32, val, "output_d_range" ); sei.m_kneeOutputDrange = val; 1082 READ_CODE( 32, val, "output_disp_luminance" ); sei.m_kneeOutputDispLuminance = val; 1083 READ_UVLC( val, "num_knee_points_minus1" ); sei.m_kneeNumKneePointsMinus1 = val; 1320 sei_read_flag( pDecodedMessageOutputStream, val, "knee_function_persistence_flag" ); sei.m_kneePersistenceFlag = val; 1321 sei_read_code( pDecodedMessageOutputStream, 32, val, "input_d_range" ); sei.m_kneeInputDrange = val; 1322 sei_read_code( pDecodedMessageOutputStream, 32, val, "input_disp_luminance" ); sei.m_kneeInputDispLuminance = val; 1323 sei_read_code( pDecodedMessageOutputStream, 32, val, "output_d_range" ); sei.m_kneeOutputDrange = val; 1324 sei_read_code( pDecodedMessageOutputStream, 32, val, "output_disp_luminance" ); sei.m_kneeOutputDispLuminance = val; 1325 sei_read_uvlc( pDecodedMessageOutputStream, val, "num_knee_points_minus1" ); sei.m_kneeNumKneePointsMinus1 = val; 1084 1326 assert( sei.m_kneeNumKneePointsMinus1 > 0 ); 1085 1327 sei.m_kneeInputKneePoint.resize(sei.m_kneeNumKneePointsMinus1+1); … … 1087 1329 for(i = 0; i <= sei.m_kneeNumKneePointsMinus1; i++ ) 1088 1330 { 1089 READ_CODE( 10, val, "input_knee_point" ); sei.m_kneeInputKneePoint[i] = val; 1090 READ_CODE( 10, val, "output_knee_point" ); sei.m_kneeOutputKneePoint[i] = val; 1091 } 1092 } 1093 } 1094 #endif 1331 sei_read_code( pDecodedMessageOutputStream, 10, val, "input_knee_point" ); sei.m_kneeInputKneePoint[i] = val; 1332 sei_read_code( pDecodedMessageOutputStream, 10, val, "output_knee_point" ); sei.m_kneeOutputKneePoint[i] = val; 1333 } 1334 } 1335 } 1336 1337 Void SEIReader::xParseSEIMasteringDisplayColourVolume(SEIMasteringDisplayColourVolume& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1338 { 1339 UInt code; 1340 output_sei_message_header(sei, pDecodedMessageOutputStream, payloadSize); 1341 1342 sei_read_code( pDecodedMessageOutputStream, 16, code, "display_primaries_x[0]" ); sei.values.primaries[0][0] = code; 1343 sei_read_code( pDecodedMessageOutputStream, 16, code, "display_primaries_y[0]" ); sei.values.primaries[0][1] = code; 1344 1345 sei_read_code( pDecodedMessageOutputStream, 16, code, "display_primaries_x[1]" ); sei.values.primaries[1][0] = code; 1346 sei_read_code( pDecodedMessageOutputStream, 16, code, "display_primaries_y[1]" ); sei.values.primaries[1][1] = code; 1347 1348 sei_read_code( pDecodedMessageOutputStream, 16, code, "display_primaries_x[2]" ); sei.values.primaries[2][0] = code; 1349 sei_read_code( pDecodedMessageOutputStream, 16, code, "display_primaries_y[2]" ); sei.values.primaries[2][1] = code; 1350 1351 1352 sei_read_code( pDecodedMessageOutputStream, 16, code, "white_point_x" ); sei.values.whitePoint[0] = code; 1353 sei_read_code( pDecodedMessageOutputStream, 16, code, "white_point_y" ); sei.values.whitePoint[1] = code; 1354 1355 sei_read_code( pDecodedMessageOutputStream, 32, code, "max_display_mastering_luminance" ); sei.values.maxLuminance = code; 1356 sei_read_code( pDecodedMessageOutputStream, 32, code, "min_display_mastering_luminance" ); sei.values.minLuminance = code; 1357 } 1095 1358 1096 1359 #if Q0074_COLOUR_REMAPPING_SEI 1097 Void SEIReader::xParseSEIColourRemappingInfo(SEIColourRemappingInfo& sei, UInt /*payloadSize*/ )1360 Void SEIReader::xParseSEIColourRemappingInfo(SEIColourRemappingInfo& sei, UInt /*payloadSize*/, std::ostream *pDecodedMessageOutputStream) 1098 1361 { 1099 1362 UInt uiVal; 1100 1363 Int iVal; 1101 1364 1102 READ_UVLC(uiVal, "colour_remap_id" ); sei.m_colourRemapId = uiVal;1103 READ_FLAG(uiVal, "colour_remap_cancel_flag" ); sei.m_colourRemapCancelFlag = uiVal;1365 sei_read_uvlc( pDecodedMessageOutputStream, uiVal, "colour_remap_id" ); sei.m_colourRemapId = uiVal; 1366 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_cancel_flag" ); sei.m_colourRemapCancelFlag = uiVal; 1104 1367 if( !sei.m_colourRemapCancelFlag ) 1105 1368 { 1106 READ_FLAG(uiVal, "colour_remap_persistence_flag" ); sei.m_colourRemapPersistenceFlag = uiVal;1107 READ_FLAG(uiVal, "colour_remap_video_signal_info_present_flag" ); sei.m_colourRemapVideoSignalInfoPresentFlag = uiVal;1369 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_persistence_flag" ); sei.m_colourRemapPersistenceFlag = uiVal; 1370 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_video_signal_info_present_flag" ); sei.m_colourRemapVideoSignalInfoPresentFlag = uiVal; 1108 1371 if ( sei.m_colourRemapVideoSignalInfoPresentFlag ) 1109 1372 { 1110 READ_FLAG(uiVal, "colour_remap_full_range_flag" ); sei.m_colourRemapFullRangeFlag = uiVal;1111 READ_CODE(8, uiVal, "colour_remap_primaries" ); sei.m_colourRemapPrimaries = uiVal;1112 READ_CODE(8, uiVal, "colour_remap_transfer_function" ); sei.m_colourRemapTransferFunction = uiVal;1113 READ_CODE(8, uiVal, "colour_remap_matrix_coefficients" ); sei.m_colourRemapMatrixCoefficients = uiVal;1114 } 1115 READ_CODE(8, uiVal, "colour_remap_input_bit_depth" ); sei.m_colourRemapInputBitDepth = uiVal;1116 READ_CODE(8, uiVal, "colour_remap_bit_depth" ); sei.m_colourRemapBitDepth = uiVal;1373 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_full_range_flag" ); sei.m_colourRemapFullRangeFlag = uiVal; 1374 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_primaries" ); sei.m_colourRemapPrimaries = uiVal; 1375 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_transfer_function" ); sei.m_colourRemapTransferFunction = uiVal; 1376 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_matrix_coefficients" ); sei.m_colourRemapMatrixCoefficients = uiVal; 1377 } 1378 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_input_bit_depth" ); sei.m_colourRemapInputBitDepth = uiVal; 1379 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "colour_remap_bit_depth" ); sei.m_colourRemapBitDepth = uiVal; 1117 1380 1118 1381 for( Int c=0 ; c<3 ; c++ ) 1119 1382 { 1120 READ_CODE(8, uiVal, "pre_lut_num_val_minus1[c]" ); sei.m_preLutNumValMinus1[c] = (uiVal==0) ? 1 : uiVal;1383 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "pre_lut_num_val_minus1[c]" ); sei.m_preLutNumValMinus1[c] = (uiVal==0) ? 1 : uiVal; 1121 1384 sei.m_preLutCodedValue[c].resize(sei.m_preLutNumValMinus1[c]+1); 1122 1385 sei.m_preLutTargetValue[c].resize(sei.m_preLutNumValMinus1[c]+1); … … 1124 1387 for ( Int i=0 ; i<=sei.m_preLutNumValMinus1[c] ; i++ ) 1125 1388 { 1126 READ_CODE((( sei.m_colourRemapInputBitDepth + 7 ) >> 3 ) << 3, uiVal, "pre_lut_coded_value[c][i]" ); sei.m_preLutCodedValue[c][i] = uiVal;1127 READ_CODE((( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "pre_lut_target_value[c][i]" ); sei.m_preLutTargetValue[c][i] = uiVal;1389 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapInputBitDepth + 7 ) >> 3 ) << 3, uiVal, "pre_lut_coded_value[c][i]" ); sei.m_preLutCodedValue[c][i] = uiVal; 1390 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "pre_lut_target_value[c][i]" ); sei.m_preLutTargetValue[c][i] = uiVal; 1128 1391 } 1129 1392 else // pre_lut_num_val_minus1[c] == 0 … … 1136 1399 } 1137 1400 1138 READ_FLAG(uiVal, "colour_remap_matrix_present_flag" ); sei.m_colourRemapMatrixPresentFlag = uiVal;1401 sei_read_flag( pDecodedMessageOutputStream, uiVal, "colour_remap_matrix_present_flag" ); sei.m_colourRemapMatrixPresentFlag = uiVal; 1139 1402 if( sei.m_colourRemapMatrixPresentFlag ) 1140 1403 { 1141 READ_CODE(4, uiVal, "log2_matrix_denom" ); sei.m_log2MatrixDenom = uiVal;1404 sei_read_code( pDecodedMessageOutputStream, 4, uiVal, "log2_matrix_denom" ); sei.m_log2MatrixDenom = uiVal; 1142 1405 for ( Int c=0 ; c<3 ; c++ ) 1143 1406 for ( Int i=0 ; i<3 ; i++ ) 1144 1407 { 1145 READ_SVLC(iVal, "colour_remap_coeffs[c][i]" ); sei.m_colourRemapCoeffs[c][i] = iVal;1408 sei_read_svlc( pDecodedMessageOutputStream, iVal, "colour_remap_coeffs[c][i]" ); sei.m_colourRemapCoeffs[c][i] = iVal; 1146 1409 } 1147 1410 } … … 1155 1418 for( Int c=0 ; c<3 ; c++ ) 1156 1419 { 1157 READ_CODE(8, uiVal, "post_lut_num_val_minus1[c]" ); sei.m_postLutNumValMinus1[c] = (uiVal==0) ? 1 : uiVal;1420 sei_read_code( pDecodedMessageOutputStream, 8, uiVal, "post_lut_num_val_minus1[c]" ); sei.m_postLutNumValMinus1[c] = (uiVal==0) ? 1 : uiVal; 1158 1421 sei.m_postLutCodedValue[c].resize(sei.m_postLutNumValMinus1[c]+1); 1159 1422 sei.m_postLutTargetValue[c].resize(sei.m_postLutNumValMinus1[c]+1); … … 1161 1424 for ( Int i=0 ; i<=sei.m_postLutNumValMinus1[c] ; i++ ) 1162 1425 { 1163 READ_CODE((( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "post_lut_coded_value[c][i]" ); sei.m_postLutCodedValue[c][i] = uiVal;1164 READ_CODE((( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "post_lut_target_value[c][i]" ); sei.m_postLutTargetValue[c][i] = uiVal;1426 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "post_lut_coded_value[c][i]" ); sei.m_postLutCodedValue[c][i] = uiVal; 1427 sei_read_code( pDecodedMessageOutputStream, (( sei.m_colourRemapBitDepth + 7 ) >> 3 ) << 3, uiVal, "post_lut_target_value[c][i]" ); sei.m_postLutTargetValue[c][i] = uiVal; 1165 1428 } 1166 1429 else … … 1173 1436 } 1174 1437 } 1175 1176 xParseByteAlign(); 1177 } 1178 #endif 1179 1180 Void SEIReader::xParseSEISOPDescription(SEISOPDescription &sei, UInt payloadSize) 1181 { 1182 Int iCode; 1183 UInt uiCode; 1184 1185 READ_UVLC( uiCode, "sop_seq_parameter_set_id" ); sei.m_sopSeqParameterSetId = uiCode; 1186 READ_UVLC( uiCode, "num_pics_in_sop_minus1" ); sei.m_numPicsInSopMinus1 = uiCode; 1187 for (UInt i = 0; i <= sei.m_numPicsInSopMinus1; i++) 1188 { 1189 READ_CODE( 6, uiCode, "sop_desc_vcl_nalu_type" ); sei.m_sopDescVclNaluType[i] = uiCode; 1190 READ_CODE( 3, sei.m_sopDescTemporalId[i], "sop_desc_temporal_id" ); sei.m_sopDescTemporalId[i] = uiCode; 1191 if (sei.m_sopDescVclNaluType[i] != NAL_UNIT_CODED_SLICE_IDR_W_RADL && sei.m_sopDescVclNaluType[i] != NAL_UNIT_CODED_SLICE_IDR_N_LP) 1192 { 1193 READ_UVLC( sei.m_sopDescStRpsIdx[i], "sop_desc_st_rps_idx" ); sei.m_sopDescStRpsIdx[i] = uiCode; 1194 } 1195 if (i > 0) 1196 { 1197 READ_SVLC( iCode, "sop_desc_poc_delta" ); sei.m_sopDescPocDelta[i] = iCode; 1198 } 1199 } 1200 1201 xParseByteAlign(); 1202 } 1203 1204 #if Q0189_TMVP_CONSTRAINTS 1205 Void SEIReader::xParseSEITMVPConstraints (SEITMVPConstrains& sei, UInt payloadSize) 1206 { 1207 UInt uiCode; 1208 READ_UVLC( uiCode, "prev_pics_not_used_flag" ); sei.prev_pics_not_used_flag = uiCode; 1209 READ_UVLC( uiCode, "no_intra_layer_col_pic_flag" ); sei.no_intra_layer_col_pic_flag = uiCode; 1210 xParseByteAlign(); 1211 } 1212 #endif 1213 1214 #if Q0247_FRAME_FIELD_INFO 1215 Void SEIReader::xParseSEIFrameFieldInfo (SEIFrameFieldInfo& sei, UInt payloadSize) 1216 { 1217 UInt code; 1218 READ_CODE( 4, code, "ffinfo_pic_struct" ); sei.m_ffinfo_picStruct = code; 1219 READ_CODE( 2, code, "ffinfo_source_scan_type" ); sei.m_ffinfo_sourceScanType = code; 1220 READ_FLAG( code, "ffinfo_duplicate_flag" ); sei.m_ffinfo_duplicateFlag = ( code == 1 ? true : false ); 1221 xParseByteAlign(); 1222 } 1223 #endif 1224 1225 #if LAYERS_NOT_PRESENT_SEI 1226 Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, TComVPS *vps, TComSPS *sps) 1227 #else 1228 Void SEIReader::xParseSEIScalableNesting(SEIScalableNesting& sei, const NalUnitType nalUnitType, UInt payloadSize, TComSPS *sps) 1229 #endif 1230 { 1231 UInt uiCode; 1232 SEIMessages seis; 1233 1234 READ_FLAG( uiCode, "bitstream_subset_flag" ); sei.m_bitStreamSubsetFlag = uiCode; 1235 READ_FLAG( uiCode, "nesting_op_flag" ); sei.m_nestingOpFlag = uiCode; 1236 if (sei.m_nestingOpFlag) 1237 { 1238 READ_FLAG( uiCode, "default_op_flag" ); sei.m_defaultOpFlag = uiCode; 1239 READ_UVLC( uiCode, "nesting_num_ops_minus1" ); sei.m_nestingNumOpsMinus1 = uiCode; 1240 for (UInt i = sei.m_defaultOpFlag; i <= sei.m_nestingNumOpsMinus1; i++) 1241 { 1242 READ_CODE( 3, uiCode, "nesting_max_temporal_id_plus1" ); sei.m_nestingMaxTemporalIdPlus1[i] = uiCode; 1243 READ_UVLC( uiCode, "nesting_op_idx" ); sei.m_nestingOpIdx[i] = uiCode; 1244 } 1245 } 1246 else 1247 { 1248 READ_FLAG( uiCode, "all_layers_flag" ); sei.m_allLayersFlag = uiCode; 1249 if (!sei.m_allLayersFlag) 1250 { 1251 READ_CODE( 3, uiCode, "nesting_no_op_max_temporal_id_plus1" ); sei.m_nestingNoOpMaxTemporalIdPlus1 = uiCode; 1252 READ_UVLC( uiCode, "nesting_num_layers_minus1" ); sei.m_nestingNumLayersMinus1 = uiCode; 1253 for (UInt i = 0; i <= sei.m_nestingNumLayersMinus1; i++) 1254 { 1255 READ_CODE( 6, uiCode, "nesting_layer_id" ); sei.m_nestingLayerId[i] = uiCode; 1256 } 1257 } 1258 } 1259 1260 // byte alignment 1261 while ( m_pcBitstream->getNumBitsRead() % 8 != 0 ) 1262 { 1263 UInt code; 1264 READ_FLAG( code, "nesting_zero_bit" ); 1265 } 1266 1267 sei.m_callerOwnsSEIs = false; 1268 1269 // read nested SEI messages 1270 do { 1271 #if O0164_MULTI_LAYER_HRD 1272 #if LAYERS_NOT_PRESENT_SEI 1273 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, &sei); 1274 #else 1275 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, &sei); 1276 #endif 1277 #else 1278 #if LAYERS_NOT_PRESENT_SEI 1279 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps); 1280 #else 1281 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps); 1282 #endif 1283 #endif 1284 } while (m_pcBitstream->getNumBitsLeft() > 8); 1285 1286 } 1287 1288 Void SEIReader::xParseByteAlign() 1289 { 1290 UInt code; 1291 if( m_pcBitstream->getNumBitsRead() % 8 != 0 ) 1292 { 1293 READ_FLAG( code, "bit_equal_to_one" ); assert( code == 1 ); 1294 } 1295 while( m_pcBitstream->getNumBitsRead() % 8 != 0 ) 1296 { 1297 READ_FLAG( code, "bit_equal_to_zero" ); assert( code == 0 ); 1298 } 1299 } 1438 } 1439 #endif 1440 1300 1441 1301 1442 #if SVC_EXTENSION 1302 1443 #if LAYERS_NOT_PRESENT_SEI 1303 Void SEIReader::xParseSEILayersNotPresent(SEILayersNotPresent &sei, UInt payloadSize, TComVPS *vps )1444 Void SEIReader::xParseSEILayersNotPresent(SEILayersNotPresent &sei, UInt payloadSize, TComVPS *vps, std::ostream *pDecodedMessageOutputStream) 1304 1445 { 1305 1446 UInt uiCode; 1306 1447 UInt i = 0; 1307 1448 1308 READ_UVLC(uiCode, "lp_sei_active_vps_id" ); sei.m_activeVpsId = uiCode;1449 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "lp_sei_active_vps_id" ); sei.m_activeVpsId = uiCode; 1309 1450 assert(vps->getVPSId() == sei.m_activeVpsId); 1310 1451 sei.m_vpsMaxLayers = vps->getMaxLayers(); 1311 1452 for (; i < sei.m_vpsMaxLayers; i++) 1312 1453 { 1313 READ_FLAG(uiCode, "layer_not_present_flag" ); sei.m_layerNotPresentFlag[i] = uiCode ? true : false;1454 sei_read_flag( pDecodedMessageOutputStream, uiCode, "layer_not_present_flag" ); sei.m_layerNotPresentFlag[i] = uiCode ? true : false; 1314 1455 } 1315 1456 for (; i < MAX_LAYERS; i++) … … 1317 1458 sei.m_layerNotPresentFlag[i] = false; 1318 1459 } 1319 xParseByteAlign(); 1320 } 1321 #endif 1460 } 1461 #endif 1462 1322 1463 #if N0383_IL_CONSTRAINED_TILE_SETS_SEI 1323 Void SEIReader::xParseSEIInterLayerConstrainedTileSets (SEIInterLayerConstrainedTileSets &sei, UInt payloadSize )1464 Void SEIReader::xParseSEIInterLayerConstrainedTileSets (SEIInterLayerConstrainedTileSets &sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 1324 1465 { 1325 1466 UInt uiCode; 1326 1467 1327 READ_FLAG(uiCode, "il_all_tiles_exact_sample_value_match_flag" ); sei.m_ilAllTilesExactSampleValueMatchFlag = uiCode;1328 READ_FLAG(uiCode, "il_one_tile_per_tile_set_flag" ); sei.m_ilOneTilePerTileSetFlag = uiCode;1468 sei_read_flag( pDecodedMessageOutputStream, uiCode, "il_all_tiles_exact_sample_value_match_flag" ); sei.m_ilAllTilesExactSampleValueMatchFlag = uiCode; 1469 sei_read_flag( pDecodedMessageOutputStream, uiCode, "il_one_tile_per_tile_set_flag" ); sei.m_ilOneTilePerTileSetFlag = uiCode; 1329 1470 if( !sei.m_ilOneTilePerTileSetFlag ) 1330 1471 { 1331 READ_UVLC(uiCode, "il_num_sets_in_message_minus1" ); sei.m_ilNumSetsInMessageMinus1 = uiCode;1472 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "il_num_sets_in_message_minus1" ); sei.m_ilNumSetsInMessageMinus1 = uiCode; 1332 1473 if( sei.m_ilNumSetsInMessageMinus1 ) 1333 1474 { 1334 READ_FLAG(uiCode, "skipped_tile_set_present_flag" ); sei.m_skippedTileSetPresentFlag = uiCode;1475 sei_read_flag( pDecodedMessageOutputStream, uiCode, "skipped_tile_set_present_flag" ); sei.m_skippedTileSetPresentFlag = uiCode; 1335 1476 } 1336 1477 else … … 1341 1482 for( UInt i = 0; i < numSignificantSets; i++ ) 1342 1483 { 1343 READ_UVLC(uiCode, "ilcts_id" ); sei.m_ilctsId[i] = uiCode;1344 READ_UVLC(uiCode, "il_num_tile_rects_in_set_minus1" ) ;sei.m_ilNumTileRectsInSetMinus1[i] = uiCode;1484 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "ilcts_id" ); sei.m_ilctsId[i] = uiCode; 1485 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "il_num_tile_rects_in_set_minus1" ) ;sei.m_ilNumTileRectsInSetMinus1[i] = uiCode; 1345 1486 for( UInt j = 0; j <= sei.m_ilNumTileRectsInSetMinus1[i]; j++ ) 1346 1487 { 1347 READ_UVLC(uiCode, "il_top_left_tile_index" ); sei.m_ilTopLeftTileIndex[i][j] = uiCode;1348 READ_UVLC(uiCode, "il_bottom_right_tile_index" ); sei.m_ilBottomRightTileIndex[i][j] = uiCode;1349 } 1350 READ_CODE(2, uiCode, "ilc_idc" ); sei.m_ilcIdc[i] = uiCode;1488 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "il_top_left_tile_index" ); sei.m_ilTopLeftTileIndex[i][j] = uiCode; 1489 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "il_bottom_right_tile_index" ); sei.m_ilBottomRightTileIndex[i][j] = uiCode; 1490 } 1491 sei_read_code( pDecodedMessageOutputStream, 2, uiCode, "ilc_idc" ); sei.m_ilcIdc[i] = uiCode; 1351 1492 if( sei.m_ilAllTilesExactSampleValueMatchFlag ) 1352 1493 { 1353 READ_FLAG(uiCode, "il_exact_sample_value_match_flag" ); sei.m_ilExactSampleValueMatchFlag[i] = uiCode;1494 sei_read_flag( pDecodedMessageOutputStream, uiCode, "il_exact_sample_value_match_flag" ); sei.m_ilExactSampleValueMatchFlag[i] = uiCode; 1354 1495 } 1355 1496 } … … 1357 1498 else 1358 1499 { 1359 READ_CODE( 2, uiCode, "all_tiles_ilc_idc" ); sei.m_allTilesIlcIdc = uiCode; 1360 } 1361 1362 xParseByteAlign(); 1363 } 1364 #endif 1500 sei_read_code( pDecodedMessageOutputStream, 2, uiCode, "all_tiles_ilc_idc" ); sei.m_allTilesIlcIdc = uiCode; 1501 } 1502 } 1503 #endif 1504 1365 1505 #if SUB_BITSTREAM_PROPERTY_SEI 1366 1506 #if OLS_IDX_CHK 1367 Void SEIReader::xParseSEISubBitstreamProperty(SEISubBitstreamProperty &sei, TComVPS *vps )1368 #else 1369 Void SEIReader::xParseSEISubBitstreamProperty(SEISubBitstreamProperty &sei )1507 Void SEIReader::xParseSEISubBitstreamProperty(SEISubBitstreamProperty &sei, TComVPS *vps, std::ostream *pDecodedMessageOutputStream) 1508 #else 1509 Void SEIReader::xParseSEISubBitstreamProperty(SEISubBitstreamProperty &sei, std::ostream *pDecodedMessageOutputStream) 1370 1510 #endif 1371 1511 { 1372 1512 UInt uiCode; 1373 READ_CODE(4, uiCode, "active_vps_id" ); sei.m_activeVpsId = uiCode;1374 READ_UVLC(uiCode, "num_additional_sub_streams_minus1" ); sei.m_numAdditionalSubStreams = uiCode + 1;1513 sei_read_code( pDecodedMessageOutputStream, 4, uiCode, "active_vps_id" ); sei.m_activeVpsId = uiCode; 1514 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_additional_sub_streams_minus1" ); sei.m_numAdditionalSubStreams = uiCode + 1; 1375 1515 1376 1516 for( Int i = 0; i < sei.m_numAdditionalSubStreams; i++ ) 1377 1517 { 1378 READ_CODE(2, uiCode, "sub_bitstream_mode[i]" ); sei.m_subBitstreamMode[i] = uiCode;1379 READ_UVLC(uiCode, "output_layer_set_idx_to_vps[i]" );1518 sei_read_code( pDecodedMessageOutputStream, 2, uiCode, "sub_bitstream_mode[i]" ); sei.m_subBitstreamMode[i] = uiCode; 1519 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "output_layer_set_idx_to_vps[i]" ); 1380 1520 #if OLS_IDX_CHK 1381 1521 // The value of output_layer_set_idx_to_vps[ i ] shall be in the range of 0 to NumOutputLayerSets − 1, inclusive. … … 1383 1523 #endif 1384 1524 sei.m_outputLayerSetIdxToVps[i] = uiCode; 1385 READ_CODE( 3, uiCode, "highest_sub_layer_id[i]" ); sei.m_highestSublayerId[i] = uiCode; 1386 READ_CODE( 16, uiCode, "avg_bit_rate[i]" ); sei.m_avgBitRate[i] = uiCode; 1387 READ_CODE( 16, uiCode, "max_bit_rate[i]" ); sei.m_maxBitRate[i] = uiCode; 1388 } 1389 xParseByteAlign(); 1525 sei_read_code( pDecodedMessageOutputStream, 3, uiCode, "highest_sub_layer_id[i]" ); sei.m_highestSublayerId[i] = uiCode; 1526 sei_read_code( pDecodedMessageOutputStream, 16, uiCode, "avg_bit_rate[i]" ); sei.m_avgBitRate[i] = uiCode; 1527 sei_read_code( pDecodedMessageOutputStream, 16, uiCode, "max_bit_rate[i]" ); sei.m_maxBitRate[i] = uiCode; 1528 } 1390 1529 } 1391 1530 #endif … … 1393 1532 #if O0164_MULTI_LAYER_HRD 1394 1533 #if LAYERS_NOT_PRESENT_SEI 1395 Void SEIReader::xParseSEIBspNesting(SEIBspNesting &sei, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, const SEIScalableNesting &nestingSei )1396 #else 1397 Void SEIReader::xParseSEIBspNesting(SEIBspNesting &sei, const NalUnitType nalUnitType, TComSPS *sps, const SEIScalableNesting &nestingSei )1534 Void SEIReader::xParseSEIBspNesting(SEIBspNesting &sei, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, const SEIScalableNesting &nestingSei, std::ostream *pDecodedMessageOutputStream) 1535 #else 1536 Void SEIReader::xParseSEIBspNesting(SEIBspNesting &sei, const NalUnitType nalUnitType, TComSPS *sps, const SEIScalableNesting &nestingSei, std::ostream *pDecodedMessageOutputStream) 1398 1537 #endif 1399 1538 { 1400 1539 UInt uiCode; 1401 READ_UVLC(uiCode, "bsp_idx" ); sei.m_bspIdx = uiCode;1540 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "bsp_idx" ); sei.m_bspIdx = uiCode; 1402 1541 1403 1542 // byte alignment … … 1405 1544 { 1406 1545 UInt code; 1407 READ_FLAG(code, "bsp_nesting_zero_bit" );1546 sei_read_flag( pDecodedMessageOutputStream, code, "bsp_nesting_zero_bit" ); 1408 1547 } 1409 1548 … … 1413 1552 #if NESTING_SEI_EXTENSIBILITY 1414 1553 Int numSeiMessages = 0; 1415 READ_UVLC(uiCode, "num_seis_in_bsp_minus1" ); assert( uiCode <= MAX_SEIS_IN_BSP_NESTING );1554 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_seis_in_bsp_minus1" ); assert( uiCode <= MAX_SEIS_IN_BSP_NESTING ); 1416 1555 numSeiMessages = uiCode; 1417 1556 for(Int i = 0; i < numSeiMessages; i++) 1418 1557 { 1419 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, &nestingSei, &sei);1558 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream, &nestingSei, &sei); 1420 1559 } 1421 1560 #else 1422 1561 do { 1423 1562 #if LAYERS_NOT_PRESENT_SEI 1424 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, &nestingSei, &sei);1425 #else 1426 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, &nestingSei);1563 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream, &nestingSei, &sei); 1564 #else 1565 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, pDecodedMessageOutputStream, &nestingSei); 1427 1566 #endif 1428 1567 } while (m_pcBitstream->getNumBitsLeft() > 8); … … 1430 1569 } 1431 1570 1432 Void SEIReader::xParseSEIBspInitialArrivalTime(SEIBspInitialArrivalTime &sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting &nestingSei, const SEIBspNesting &bspNestingSei )1571 Void SEIReader::xParseSEIBspInitialArrivalTime(SEIBspInitialArrivalTime &sei, TComVPS *vps, TComSPS *sps, const SEIScalableNesting &nestingSei, const SEIBspNesting &bspNestingSei, std::ostream *pDecodedMessageOutputStream) 1433 1572 { 1434 1573 assert(vps->getVpsVuiPresentFlag()); … … 1463 1602 for(UInt i = 0; i < maxValues; i++) 1464 1603 { 1465 READ_CODE(syntaxElemLen[i], uiCode, "nal_initial_arrival_delay[i]" ); sei.m_nalInitialArrivalDelay[i] = uiCode;1604 sei_read_code( pDecodedMessageOutputStream, syntaxElemLen[i], uiCode, "nal_initial_arrival_delay[i]" ); sei.m_nalInitialArrivalDelay[i] = uiCode; 1466 1605 } 1467 1606 } … … 1470 1609 for(UInt i = 0; i < maxValues; i++) 1471 1610 { 1472 READ_CODE(syntaxElemLen[i], uiCode, "vcl_initial_arrival_delay[i]" ); sei.m_vclInitialArrivalDelay[i] = uiCode;1611 sei_read_code( pDecodedMessageOutputStream, syntaxElemLen[i], uiCode, "vcl_initial_arrival_delay[i]" ); sei.m_vclInitialArrivalDelay[i] = uiCode; 1473 1612 } 1474 1613 } … … 1503 1642 for(UInt i = 0; i < schedCombCnt; i++) 1504 1643 { 1505 READ_CODE(len, uiCode, "nal_initial_arrival_delay" ); sei.m_nalInitialArrivalDelay[i] = uiCode;1644 sei_read_code( pDecodedMessageOutputStream, len, uiCode, "nal_initial_arrival_delay" ); sei.m_nalInitialArrivalDelay[i] = uiCode; 1506 1645 } 1507 1646 } … … 1514 1653 for(UInt i = 0; i < schedCombCnt; i++) 1515 1654 { 1516 READ_CODE(len, uiCode, "vcl_initial_arrival_delay" ); sei.m_vclInitialArrivalDelay[i] = uiCode;1655 sei_read_code( pDecodedMessageOutputStream, len, uiCode, "vcl_initial_arrival_delay" ); sei.m_vclInitialArrivalDelay[i] = uiCode; 1517 1656 } 1518 1657 } … … 1521 1660 1522 1661 #if !REMOVE_BSP_HRD_SEI 1523 Void SEIReader::xParseSEIBspHrd(SEIBspHrd &sei, TComSPS *sps, const SEIScalableNesting &nestingSei )1662 Void SEIReader::xParseSEIBspHrd(SEIBspHrd &sei, TComSPS *sps, const SEIScalableNesting &nestingSei, std::ostream *pDecodedMessageOutputStream) 1524 1663 { 1525 1664 UInt uiCode; 1526 READ_UVLC(uiCode, "sei_num_bsp_hrd_parameters_minus1" ); sei.m_seiNumBspHrdParametersMinus1 = uiCode;1665 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "sei_num_bsp_hrd_parameters_minus1" ); sei.m_seiNumBspHrdParametersMinus1 = uiCode; 1527 1666 for (UInt i = 0; i <= sei.m_seiNumBspHrdParametersMinus1; i++) 1528 1667 { 1529 1668 if (i > 0) 1530 1669 { 1531 READ_FLAG(uiCode, "sei_bsp_cprms_present_flag" ); sei.m_seiBspCprmsPresentFlag[i] = uiCode;1670 sei_read_flag( pDecodedMessageOutputStream, uiCode, "sei_bsp_cprms_present_flag" ); sei.m_seiBspCprmsPresentFlag[i] = uiCode; 1532 1671 } 1533 1672 xParseHrdParameters(sei.hrd, i==0 ? 1 : sei.m_seiBspCprmsPresentFlag[i], nestingSei.m_nestingMaxTemporalIdPlus1[0]-1); … … 1536 1675 { 1537 1676 UInt lsIdx = nestingSei.m_nestingOpIdx[h]; 1538 READ_UVLC(uiCode, "num_sei_bitstream_partitions_minus1[i]"); sei.m_seiNumBitstreamPartitionsMinus1[lsIdx] = uiCode;1677 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_sei_bitstream_partitions_minus1[i]"); sei.m_seiNumBitstreamPartitionsMinus1[lsIdx] = uiCode; 1539 1678 #if HRD_BPB 1540 1679 Int chkPart=0; … … 1560 1699 { 1561 1700 #endif 1562 READ_FLAG(uiCode, "sei_layer_in_bsp_flag[lsIdx][i][j]" ); sei.m_seiLayerInBspFlag[lsIdx][i][j] = uiCode;1701 sei_read_flag( pDecodedMessageOutputStream, uiCode, "sei_layer_in_bsp_flag[lsIdx][i][j]" ); sei.m_seiLayerInBspFlag[lsIdx][i][j] = uiCode; 1563 1702 } 1564 1703 #if !HRD_BPB … … 1588 1727 #endif 1589 1728 1590 READ_UVLC(uiCode, "sei_num_bsp_sched_combinations_minus1[i]"); sei.m_seiNumBspSchedCombinationsMinus1[lsIdx] = uiCode;1729 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "sei_num_bsp_sched_combinations_minus1[i]"); sei.m_seiNumBspSchedCombinationsMinus1[lsIdx] = uiCode; 1591 1730 for (i = 0; i <= sei.m_seiNumBspSchedCombinationsMinus1[lsIdx]; i++) 1592 1731 { 1593 1732 for (UInt j = 0; j <= sei.m_seiNumBitstreamPartitionsMinus1[lsIdx]; j++) 1594 1733 { 1595 READ_UVLC(uiCode, "sei_bsp_comb_hrd_idx[lsIdx][i][j]"); sei.m_seiBspCombHrdIdx[lsIdx][i][j] = uiCode;1734 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "sei_bsp_comb_hrd_idx[lsIdx][i][j]"); sei.m_seiBspCombHrdIdx[lsIdx][i][j] = uiCode; 1596 1735 #if HRD_BPB 1597 1736 assert(uiCode <= sei.m_seiNumBspHrdParametersMinus1); 1598 1737 #endif 1599 READ_UVLC(uiCode, "sei_bsp_comb_sched_idx[lsIdx][i][j]"); sei.m_seiBspCombScheddx[lsIdx][i][j] = uiCode;1738 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "sei_bsp_comb_sched_idx[lsIdx][i][j]"); sei.m_seiBspCombScheddx[lsIdx][i][j] = uiCode; 1600 1739 #if HRD_BPB 1601 1740 assert(uiCode <= sei.hrd->getCpbCntMinus1( sps->getMaxTLayers()-1 )); … … 1608 1747 #endif 1609 1748 1610 Void SEIReader::xParseHrdParameters(TComHRD *hrd, Bool commonInfPresentFlag, UInt maxNumSubLayersMinus1 )1749 Void SEIReader::xParseHrdParameters(TComHRD *hrd, Bool commonInfPresentFlag, UInt maxNumSubLayersMinus1, std::ostream *pDecodedMessageOutputStream) 1611 1750 { 1612 1751 UInt uiCode; 1613 1752 if( commonInfPresentFlag ) 1614 1753 { 1615 READ_FLAG(uiCode, "nal_hrd_parameters_present_flag" ); hrd->setNalHrdParametersPresentFlag( uiCode == 1 ? true : false );1616 READ_FLAG(uiCode, "vcl_hrd_parameters_present_flag" ); hrd->setVclHrdParametersPresentFlag( uiCode == 1 ? true : false );1754 sei_read_flag( pDecodedMessageOutputStream, uiCode, "nal_hrd_parameters_present_flag" ); hrd->setNalHrdParametersPresentFlag( uiCode == 1 ? true : false ); 1755 sei_read_flag( pDecodedMessageOutputStream, uiCode, "vcl_hrd_parameters_present_flag" ); hrd->setVclHrdParametersPresentFlag( uiCode == 1 ? true : false ); 1617 1756 if( hrd->getNalHrdParametersPresentFlag() || hrd->getVclHrdParametersPresentFlag() ) 1618 1757 { 1619 READ_FLAG(uiCode, "sub_pic_cpb_params_present_flag" ); hrd->setSubPicCpbParamsPresentFlag( uiCode == 1 ? true : false );1758 sei_read_flag( pDecodedMessageOutputStream, uiCode, "sub_pic_cpb_params_present_flag" ); hrd->setSubPicCpbParamsPresentFlag( uiCode == 1 ? true : false ); 1620 1759 if( hrd->getSubPicCpbParamsPresentFlag() ) 1621 1760 { 1622 READ_CODE(8, uiCode, "tick_divisor_minus2" ); hrd->setTickDivisorMinus2( uiCode );1623 READ_CODE(5, uiCode, "du_cpb_removal_delay_length_minus1" ); hrd->setDuCpbRemovalDelayLengthMinus1( uiCode );1624 READ_FLAG(uiCode, "sub_pic_cpb_params_in_pic_timing_sei_flag" ); hrd->setSubPicCpbParamsInPicTimingSEIFlag( uiCode == 1 ? true : false );1625 READ_CODE(5, uiCode, "dpb_output_delay_du_length_minus1" ); hrd->setDpbOutputDelayDuLengthMinus1( uiCode );1626 } 1627 READ_CODE(4, uiCode, "bit_rate_scale" ); hrd->setBitRateScale( uiCode );1628 READ_CODE(4, uiCode, "cpb_size_scale" ); hrd->setCpbSizeScale( uiCode );1761 sei_read_code( pDecodedMessageOutputStream, 8, uiCode, "tick_divisor_minus2" ); hrd->setTickDivisorMinus2( uiCode ); 1762 sei_read_code( pDecodedMessageOutputStream, 5, uiCode, "du_cpb_removal_delay_length_minus1" ); hrd->setDuCpbRemovalDelayLengthMinus1( uiCode ); 1763 sei_read_flag( pDecodedMessageOutputStream, uiCode, "sub_pic_cpb_params_in_pic_timing_sei_flag" ); hrd->setSubPicCpbParamsInPicTimingSEIFlag( uiCode == 1 ? true : false ); 1764 sei_read_code( pDecodedMessageOutputStream, 5, uiCode, "dpb_output_delay_du_length_minus1" ); hrd->setDpbOutputDelayDuLengthMinus1( uiCode ); 1765 } 1766 sei_read_code( pDecodedMessageOutputStream, 4, uiCode, "bit_rate_scale" ); hrd->setBitRateScale( uiCode ); 1767 sei_read_code( pDecodedMessageOutputStream, 4, uiCode, "cpb_size_scale" ); hrd->setCpbSizeScale( uiCode ); 1629 1768 if( hrd->getSubPicCpbParamsPresentFlag() ) 1630 1769 { 1631 READ_CODE(4, uiCode, "cpb_size_du_scale" ); hrd->setDuCpbSizeScale( uiCode );1632 } 1633 READ_CODE(5, uiCode, "initial_cpb_removal_delay_length_minus1" ); hrd->setInitialCpbRemovalDelayLengthMinus1( uiCode );1634 READ_CODE(5, uiCode, "au_cpb_removal_delay_length_minus1" ); hrd->setCpbRemovalDelayLengthMinus1( uiCode );1635 READ_CODE(5, uiCode, "dpb_output_delay_length_minus1" ); hrd->setDpbOutputDelayLengthMinus1( uiCode );1770 sei_read_code( pDecodedMessageOutputStream, 4, uiCode, "cpb_size_du_scale" ); hrd->setDuCpbSizeScale( uiCode ); 1771 } 1772 sei_read_code( pDecodedMessageOutputStream, 5, uiCode, "initial_cpb_removal_delay_length_minus1" ); hrd->setInitialCpbRemovalDelayLengthMinus1( uiCode ); 1773 sei_read_code( pDecodedMessageOutputStream, 5, uiCode, "au_cpb_removal_delay_length_minus1" ); hrd->setCpbRemovalDelayLengthMinus1( uiCode ); 1774 sei_read_code( pDecodedMessageOutputStream, 5, uiCode, "dpb_output_delay_length_minus1" ); hrd->setDpbOutputDelayLengthMinus1( uiCode ); 1636 1775 } 1637 1776 } … … 1639 1778 for( i = 0; i <= maxNumSubLayersMinus1; i ++ ) 1640 1779 { 1641 READ_FLAG(uiCode, "fixed_pic_rate_general_flag" ); hrd->setFixedPicRateFlag( i, uiCode == 1 ? true : false );1780 sei_read_flag( pDecodedMessageOutputStream, uiCode, "fixed_pic_rate_general_flag" ); hrd->setFixedPicRateFlag( i, uiCode == 1 ? true : false ); 1642 1781 if( !hrd->getFixedPicRateFlag( i ) ) 1643 1782 { 1644 READ_FLAG(uiCode, "fixed_pic_rate_within_cvs_flag" ); hrd->setFixedPicRateWithinCvsFlag( i, uiCode == 1 ? true : false );1783 sei_read_flag( pDecodedMessageOutputStream, uiCode, "fixed_pic_rate_within_cvs_flag" ); hrd->setFixedPicRateWithinCvsFlag( i, uiCode == 1 ? true : false ); 1645 1784 } 1646 1785 else … … 1652 1791 if( hrd->getFixedPicRateWithinCvsFlag( i ) ) 1653 1792 { 1654 READ_UVLC(uiCode, "elemental_duration_in_tc_minus1" ); hrd->setPicDurationInTcMinus1( i, uiCode );1793 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "elemental_duration_in_tc_minus1" ); hrd->setPicDurationInTcMinus1( i, uiCode ); 1655 1794 } 1656 1795 else 1657 1796 { 1658 READ_FLAG(uiCode, "low_delay_hrd_flag" ); hrd->setLowDelayHrdFlag( i, uiCode == 1 ? true : false );1797 sei_read_flag( pDecodedMessageOutputStream, uiCode, "low_delay_hrd_flag" ); hrd->setLowDelayHrdFlag( i, uiCode == 1 ? true : false ); 1659 1798 } 1660 1799 if (!hrd->getLowDelayHrdFlag( i )) 1661 1800 { 1662 READ_UVLC(uiCode, "cpb_cnt_minus1" ); hrd->setCpbCntMinus1( i, uiCode );1801 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "cpb_cnt_minus1" ); hrd->setCpbCntMinus1( i, uiCode ); 1663 1802 } 1664 1803 for( nalOrVcl = 0; nalOrVcl < 2; nalOrVcl ++ ) … … 1669 1808 for( j = 0; j <= ( hrd->getCpbCntMinus1( i ) ); j ++ ) 1670 1809 { 1671 READ_UVLC(uiCode, "bit_rate_value_minus1" ); hrd->setBitRateValueMinus1( i, j, nalOrVcl, uiCode );1672 READ_UVLC(uiCode, "cpb_size_value_minus1" ); hrd->setCpbSizeValueMinus1( i, j, nalOrVcl, uiCode );1810 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "bit_rate_value_minus1" ); hrd->setBitRateValueMinus1( i, j, nalOrVcl, uiCode ); 1811 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "cpb_size_value_minus1" ); hrd->setCpbSizeValueMinus1( i, j, nalOrVcl, uiCode ); 1673 1812 if( hrd->getSubPicCpbParamsPresentFlag() ) 1674 1813 { 1675 READ_UVLC(uiCode, "cpb_size_du_value_minus1" ); hrd->setDuCpbSizeValueMinus1( i, j, nalOrVcl, uiCode );1676 READ_UVLC(uiCode, "bit_rate_du_value_minus1" ); hrd->setDuBitRateValueMinus1( i, j, nalOrVcl, uiCode );1814 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "cpb_size_du_value_minus1" ); hrd->setDuCpbSizeValueMinus1( i, j, nalOrVcl, uiCode ); 1815 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "bit_rate_du_value_minus1" ); hrd->setDuBitRateValueMinus1( i, j, nalOrVcl, uiCode ); 1677 1816 } 1678 READ_FLAG(uiCode, "cbr_flag" ); hrd->setCbrFlag( i, j, nalOrVcl, uiCode == 1 ? true : false );1817 sei_read_flag( pDecodedMessageOutputStream, uiCode, "cbr_flag" ); hrd->setCbrFlag( i, j, nalOrVcl, uiCode == 1 ? true : false ); 1679 1818 } 1680 1819 } … … 1687 1826 1688 1827 #if LAYERS_NOT_PRESENT_SEI 1689 Void SEIReader::xParseSEIOutputLayerSetNesting(SEIOutputLayerSetNesting& sei, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps )1690 #else 1691 Void SEIReader::xParseSEIOutputLayerSetNesting(SEIOutputLayerSetNesting& sei, const NalUnitType nalUnitType, TComSPS *sps )1828 Void SEIReader::xParseSEIOutputLayerSetNesting(SEIOutputLayerSetNesting& sei, const NalUnitType nalUnitType, TComVPS *vps, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 1829 #else 1830 Void SEIReader::xParseSEIOutputLayerSetNesting(SEIOutputLayerSetNesting& sei, const NalUnitType nalUnitType, TComSPS *sps, std::ostream *pDecodedMessageOutputStream) 1692 1831 #endif 1693 1832 { … … 1695 1834 SEIMessages seis; 1696 1835 1697 READ_FLAG(uiCode, "ols_flag"); sei.m_olsFlag = uiCode;1698 READ_UVLC(uiCode, "num_ols_indices_minus1"); sei.m_numOlsIndicesMinus1 = uiCode;1836 sei_read_flag( pDecodedMessageOutputStream, uiCode, "ols_flag"); sei.m_olsFlag = uiCode; 1837 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "num_ols_indices_minus1"); sei.m_numOlsIndicesMinus1 = uiCode; 1699 1838 1700 1839 for (Int i = 0; i <= sei.m_numOlsIndicesMinus1; i++) 1701 1840 { 1702 READ_UVLC(uiCode, "ols_idx[i]"); sei.m_olsIdx[i] = uiCode;1841 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "ols_idx[i]"); sei.m_olsIdx[i] = uiCode; 1703 1842 } 1704 1843 … … 1707 1846 { 1708 1847 UInt code; 1709 READ_FLAG(code, "ols_nesting_zero_bit");1848 sei_read_flag( pDecodedMessageOutputStream, code, "ols_nesting_zero_bit"); 1710 1849 } 1711 1850 … … 1716 1855 #if O0164_MULTI_LAYER_HRD 1717 1856 #if LAYERS_NOT_PRESENT_SEI 1718 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps );1719 #else 1720 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps );1857 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream); 1858 #else 1859 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, pDecodedMessageOutputStream); 1721 1860 #endif 1722 1861 #else 1723 1862 #if LAYERS_NOT_PRESENT_SEI 1724 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps );1725 #else 1726 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps );1863 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, vps, sps, pDecodedMessageOutputStream); 1864 #else 1865 xReadSEImessage(sei.m_nestedSEIs, nalUnitType, sps, pDecodedMessageOutputStream); 1727 1866 #endif 1728 1867 #endif … … 1731 1870 } 1732 1871 1733 Void SEIReader::xParseSEIVPSRewriting(SEIVPSRewriting &sei )1872 Void SEIReader::xParseSEIVPSRewriting(SEIVPSRewriting &sei, std::ostream *pDecodedMessageOutputStream ) 1734 1873 { 1735 1874 } … … 1738 1877 1739 1878 #if Q0096_OVERLAY_SEI 1740 Void SEIReader::xParseSEIOverlayInfo(SEIOverlayInfo& sei, UInt /*payloadSize*/){ 1879 Void SEIReader::xParseSEIOverlayInfo(SEIOverlayInfo& sei, UInt /*payloadSize*/, std::ostream *pDecodedMessageOutputStream) 1880 { 1741 1881 Int i, j; 1742 1882 UInt val; 1743 READ_FLAG(val, "overlay_info_cancel_flag" ); sei.m_overlayInfoCancelFlag = val;1883 sei_read_flag( pDecodedMessageOutputStream, val, "overlay_info_cancel_flag" ); sei.m_overlayInfoCancelFlag = val; 1744 1884 if ( !sei.m_overlayInfoCancelFlag ) 1745 1885 { 1746 READ_UVLC(val, "overlay_content_aux_id_minus128" ); sei.m_overlayContentAuxIdMinus128 = val;1747 READ_UVLC(val, "overlay_label_aux_id_minus128" ); sei.m_overlayLabelAuxIdMinus128 = val;1748 READ_UVLC(val, "overlay_alpha_aux_id_minus128" ); sei.m_overlayAlphaAuxIdMinus128 = val;1749 READ_UVLC(val, "overlay_element_label_value_length_minus8" ); sei.m_overlayElementLabelValueLengthMinus8 = val;1750 READ_UVLC(val, "num_overlays_minus1" ); sei.m_numOverlaysMinus1 = val;1886 sei_read_uvlc( pDecodedMessageOutputStream, val, "overlay_content_aux_id_minus128" ); sei.m_overlayContentAuxIdMinus128 = val; 1887 sei_read_uvlc( pDecodedMessageOutputStream, val, "overlay_label_aux_id_minus128" ); sei.m_overlayLabelAuxIdMinus128 = val; 1888 sei_read_uvlc( pDecodedMessageOutputStream, val, "overlay_alpha_aux_id_minus128" ); sei.m_overlayAlphaAuxIdMinus128 = val; 1889 sei_read_uvlc( pDecodedMessageOutputStream, val, "overlay_element_label_value_length_minus8" ); sei.m_overlayElementLabelValueLengthMinus8 = val; 1890 sei_read_uvlc( pDecodedMessageOutputStream, val, "num_overlays_minus1" ); sei.m_numOverlaysMinus1 = val; 1751 1891 1752 1892 assert( sei.m_numOverlaysMinus1 < MAX_OVERLAYS ); … … 1763 1903 for ( i=0 ; i<=sei.m_numOverlaysMinus1 ; i++ ) 1764 1904 { 1765 READ_UVLC(val, "overlay_idx" ); sei.m_overlayIdx[i] = val;1766 READ_FLAG(val, "language_overlay_present_flag" ); sei.m_languageOverlayPresentFlag[i] = val;1767 READ_CODE(6, val, "overlay_content_layer_id"); sei.m_overlayContentLayerId[i] = val;1768 READ_FLAG(val, "overlay_label_present_flag" ); sei.m_overlayLabelPresentFlag[i] = val;1905 sei_read_uvlc( pDecodedMessageOutputStream, val, "overlay_idx" ); sei.m_overlayIdx[i] = val; 1906 sei_read_flag( pDecodedMessageOutputStream, val, "language_overlay_present_flag" ); sei.m_languageOverlayPresentFlag[i] = val; 1907 sei_read_code( pDecodedMessageOutputStream, 6, val, "overlay_content_layer_id"); sei.m_overlayContentLayerId[i] = val; 1908 sei_read_flag( pDecodedMessageOutputStream, val, "overlay_label_present_flag" ); sei.m_overlayLabelPresentFlag[i] = val; 1769 1909 if ( sei.m_overlayLabelPresentFlag[i] ) 1770 1910 { 1771 READ_CODE(6, val, "overlay_label_layer_id"); sei.m_overlayLabelLayerId[i] = val;1772 } 1773 READ_FLAG(val, "overlay_alpha_present_flag" ); sei.m_overlayAlphaPresentFlag[i] = val;1911 sei_read_code( pDecodedMessageOutputStream, 6, val, "overlay_label_layer_id"); sei.m_overlayLabelLayerId[i] = val; 1912 } 1913 sei_read_flag( pDecodedMessageOutputStream, val, "overlay_alpha_present_flag" ); sei.m_overlayAlphaPresentFlag[i] = val; 1774 1914 if ( sei.m_overlayAlphaPresentFlag[i] ) 1775 1915 { 1776 READ_CODE(6, val, "overlay_alpha_layer_id"); sei.m_overlayAlphaLayerId[i] = val;1916 sei_read_code( pDecodedMessageOutputStream, 6, val, "overlay_alpha_layer_id"); sei.m_overlayAlphaLayerId[i] = val; 1777 1917 } 1778 1918 if ( sei.m_overlayLabelPresentFlag[i] ) 1779 1919 { 1780 READ_UVLC(val, "num_overlay_elements_minus1"); sei.m_numOverlayElementsMinus1[i] = val;1920 sei_read_uvlc( pDecodedMessageOutputStream, val, "num_overlay_elements_minus1"); sei.m_numOverlayElementsMinus1[i] = val; 1781 1921 assert( sei.m_numOverlayElementsMinus1[i] < MAX_OVERLAY_ELEMENTS ); 1782 1922 sei.m_overlayElementLabelMin[i].resize( sei.m_numOverlayElementsMinus1[i]+1 ); … … 1784 1924 for ( j=0 ; j<=sei.m_numOverlayElementsMinus1[i] ; j++ ) 1785 1925 { 1786 READ_CODE(sei.m_overlayElementLabelValueLengthMinus8 + 8, val, "overlay_element_label_min"); sei.m_overlayElementLabelMin[i][j] = val;1787 READ_CODE(sei.m_overlayElementLabelValueLengthMinus8 + 8, val, "overlay_element_label_max"); sei.m_overlayElementLabelMax[i][j] = val;1926 sei_read_code( pDecodedMessageOutputStream, sei.m_overlayElementLabelValueLengthMinus8 + 8, val, "overlay_element_label_min"); sei.m_overlayElementLabelMin[i][j] = val; 1927 sei_read_code( pDecodedMessageOutputStream, sei.m_overlayElementLabelValueLengthMinus8 + 8, val, "overlay_element_label_max"); sei.m_overlayElementLabelMax[i][j] = val; 1788 1928 } 1789 1929 } … … 1797 1937 while ( m_pcBitstream->getNumBitsRead() % 8 != 0 ) 1798 1938 { 1799 READ_FLAG(val, "overlay_zero_bit" );1939 sei_read_flag( pDecodedMessageOutputStream, val, "overlay_zero_bit" ); 1800 1940 assert( val==0 ); 1801 1941 } … … 1835 1975 } 1836 1976 } 1837 READ_FLAG( val, "overlay_info_persistence_flag" ); sei.m_overlayInfoPersistenceFlag = val; 1838 } 1839 xParseByteAlign(); 1840 } 1841 #endif 1977 sei_read_flag( pDecodedMessageOutputStream, val, "overlay_info_persistence_flag" ); sei.m_overlayInfoPersistenceFlag = val; 1978 } 1979 } 1980 #endif 1981 1982 #if P0138_USE_ALT_CPB_PARAMS_FLAG 1983 /** 1984 * Check if SEI message contains payload extension 1985 */ 1986 Bool SEIReader::xPayloadExtensionPresent() 1987 { 1988 Int payloadBitsRemaining = getBitstream()->getNumBitsLeft(); 1989 Bool payloadExtensionPresent = false; 1990 1991 if (payloadBitsRemaining > 8) 1992 { 1993 payloadExtensionPresent = true; 1994 } 1995 else 1996 { 1997 Int finalBits = getBitstream()->peekBits(payloadBitsRemaining); 1998 while (payloadBitsRemaining && (finalBits & 1) == 0) 1999 { 2000 payloadBitsRemaining--; 2001 finalBits >>= 1; 2002 } 2003 payloadBitsRemaining--; 2004 if (payloadBitsRemaining > 0) 2005 { 2006 payloadExtensionPresent = true; 2007 } 2008 } 2009 2010 return payloadExtensionPresent; 2011 } 2012 #endif 2013 2014 #if Q0189_TMVP_CONSTRAINTS 2015 Void SEIReader::xParseSEITMVPConstraints (SEITMVPConstrains& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 2016 { 2017 UInt uiCode; 2018 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "prev_pics_not_used_flag" ); sei.prev_pics_not_used_flag = uiCode; 2019 sei_read_uvlc( pDecodedMessageOutputStream, uiCode, "no_intra_layer_col_pic_flag" ); sei.no_intra_layer_col_pic_flag = uiCode; 2020 } 2021 #endif 2022 2023 #if Q0247_FRAME_FIELD_INFO 2024 Void SEIReader::xParseSEIFrameFieldInfo (SEIFrameFieldInfo& sei, UInt payloadSize, std::ostream *pDecodedMessageOutputStream) 2025 { 2026 UInt code; 2027 sei_read_code( pDecodedMessageOutputStream, 4, code, "ffinfo_pic_struct" ); sei.m_ffinfo_picStruct = code; 2028 sei_read_code( pDecodedMessageOutputStream, 2, code, "ffinfo_source_scan_type" ); sei.m_ffinfo_sourceScanType = code; 2029 sei_read_flag( pDecodedMessageOutputStream, code, "ffinfo_duplicate_flag" ); sei.m_ffinfo_duplicateFlag = ( code == 1 ? true : false ); 2030 } 2031 #endif 2032 1842 2033 1843 2034 #endif //SVC_EXTENSION
Note: See TracChangeset for help on using the changeset viewer.