diff --git a/H264Deserialize.cpp b/H264Deserialize.cpp index 6bcc692..a4e2621 100644 --- a/H264Deserialize.cpp +++ b/H264Deserialize.cpp @@ -192,23 +192,29 @@ bool H264Deserialize::DeserializeNalSyntax(H26xBinaryReader::ptr br, H264NalSynt case H264NaluType::MMP_H264_NALU_TYPE_IDR: /* pass through */ case H264NaluType::MMP_H264_NALU_TYPE_SLICE: { - // Hint : Slice = Slice header + Slice data + rbsp_trailing_bits() - // only parse slice header and may move to next nal unit - nal->slice = std::make_shared(); - if (!DeserializeSliceHeaderSyntax(br, nal, nal->slice)) + if (enableParseSLICE) { - assert(false); - return false; + // Hint : Slice = Slice header + Slice data + rbsp_trailing_bits() + // only parse slice header and may move to next nal unit + nal->slice = std::make_shared(); + if (!DeserializeSliceHeaderSyntax(br, nal, nal->slice)) + { + assert(false); + return false; + } + br->MoveNextByte(); } - br->MoveNextByte(); break; } case H264NaluType::MMP_H264_NALU_TYPE_SEI: { - nal->sei = std::make_shared(); - if (!DeserializeSeiSyntax(br, nal->sei)) + if (enableParseSEI) { - return false; + nal->sei = std::make_shared(); + if (!DeserializeSeiSyntax(br, nal->sei)) + { + return false; + } } break; } diff --git a/H264Deserialize.h b/H264Deserialize.h index 57ebef3..33d0aa0 100644 --- a/H264Deserialize.h +++ b/H264Deserialize.h @@ -67,6 +67,9 @@ class H264Deserialize bool DeserializeSeiFramePackingArrangementSyntax(H26xBinaryReader::ptr br, H264SeiFramePackingArrangementSyntax::ptr fpa); bool DeserializeSeiAlternativeTransferCharacteristicsSyntax(H26xBinaryReader::ptr br, H264SeiAlternativeTransferCharacteristicsSyntax::ptr atc); bool DeserializeAmbientViewingEnvironmentSyntax(H26xBinaryReader::ptr br, H264AmbientViewingEnvironmentSyntax::ptr awe); +public: + bool enableParseSEI = true; + bool enableParseSLICE = true; private: H264ContextSyntax::ptr _contex; };