From dd24bd672e6016be68b6b41392a23a155a36f622 Mon Sep 17 00:00:00 2001 From: Philip de Nier Date: Tue, 3 Sep 2024 11:40:40 +0100 Subject: [PATCH] Add explicit frame parse reset method The frame size may be determined outside the parser (e.g. if the remaining bytes are assumed to be part of the frame) and this method allows the state to be reset. --- apps/bmxparse/bmxparse.cpp | 1 + include/bmx/essence_parser/AVCEssenceParser.h | 5 ++- include/bmx/essence_parser/DVEssenceParser.h | 2 ++ include/bmx/essence_parser/EssenceParser.h | 1 + include/bmx/essence_parser/J2CEssenceParser.h | 2 ++ include/bmx/essence_parser/JXSEssenceParser.h | 1 + .../bmx/essence_parser/MJPEGEssenceParser.h | 5 ++- .../bmx/essence_parser/MPEG2EssenceParser.h | 3 +- .../bmx/essence_parser/RDD36EssenceParser.h | 2 ++ include/bmx/essence_parser/VC2EssenceParser.h | 3 +- include/bmx/essence_parser/VC3EssenceParser.h | 2 ++ src/essence_parser/AVCEssenceParser.cpp | 31 ++++++++++--------- src/essence_parser/DVEssenceParser.cpp | 4 +++ src/essence_parser/J2CEssenceParser.cpp | 4 +++ src/essence_parser/JXSEssenceParser.cpp | 4 +++ src/essence_parser/MJPEGEssenceParser.cpp | 27 ++++++++-------- src/essence_parser/MPEG2EssenceParser.cpp | 24 +++++++------- src/essence_parser/RDD36EssenceParser.cpp | 4 +++ src/essence_parser/RawEssenceReader.cpp | 2 ++ src/essence_parser/VC2EssenceParser.cpp | 28 ++++++++--------- src/essence_parser/VC3EssenceParser.cpp | 4 +++ 21 files changed, 99 insertions(+), 60 deletions(-) diff --git a/apps/bmxparse/bmxparse.cpp b/apps/bmxparse/bmxparse.cpp index db2e0cb0..6069a464 100644 --- a/apps/bmxparse/bmxparse.cpp +++ b/apps/bmxparse/bmxparse.cpp @@ -979,6 +979,7 @@ int main(int argc, const char **argv) frame_start = frame_size.GetSize(); frame_size.Reset(); + parser->ResetParseFrameSize(); frame_count++; if (end_of_data) diff --git a/include/bmx/essence_parser/AVCEssenceParser.h b/include/bmx/essence_parser/AVCEssenceParser.h index 615f14d4..1b82afa9 100644 --- a/include/bmx/essence_parser/AVCEssenceParser.h +++ b/include/bmx/essence_parser/AVCEssenceParser.h @@ -150,6 +150,8 @@ class AVCCodedPictureEssenceParser : public EssenceParser void SetPPS(const unsigned char *data, uint32_t size); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); @@ -339,7 +341,6 @@ class AVCCodedPictureEssenceParser : public EssenceParser void SetSPSData(uint8_t id, const unsigned char *data, uint32_t size); void SetPPSData(uint8_t id, const unsigned char *data, uint32_t size); - void ResetFrameSize(); void ResetFrameInfo(); private: @@ -398,6 +399,8 @@ class AVCEssenceParser : public EssenceParser void SetPPS(const unsigned char *data, uint32_t size); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual ParsedFrameSize ParseFrameSize2(const unsigned char *data, uint32_t data_size); virtual ParsedFrameSize ParseFrameInfo2(const unsigned char *data, ParsedFrameSize frame_size); diff --git a/include/bmx/essence_parser/DVEssenceParser.h b/include/bmx/essence_parser/DVEssenceParser.h index 91551427..08d4747c 100644 --- a/include/bmx/essence_parser/DVEssenceParser.h +++ b/include/bmx/essence_parser/DVEssenceParser.h @@ -62,6 +62,8 @@ class DVEssenceParser : public EssenceParser virtual ~DVEssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); diff --git a/include/bmx/essence_parser/EssenceParser.h b/include/bmx/essence_parser/EssenceParser.h index c68846a8..1c2f0084 100644 --- a/include/bmx/essence_parser/EssenceParser.h +++ b/include/bmx/essence_parser/EssenceParser.h @@ -96,6 +96,7 @@ class EssenceParser virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size) = 0; + virtual void ResetParseFrameSize() = 0; virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual ParsedFrameSize ParseFrameSize2(const unsigned char *data, uint32_t data_size); diff --git a/include/bmx/essence_parser/J2CEssenceParser.h b/include/bmx/essence_parser/J2CEssenceParser.h index dd454d0f..e673c7fc 100644 --- a/include/bmx/essence_parser/J2CEssenceParser.h +++ b/include/bmx/essence_parser/J2CEssenceParser.h @@ -50,6 +50,8 @@ class J2CEssenceParser : public EssenceParser virtual ~J2CEssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); diff --git a/include/bmx/essence_parser/JXSEssenceParser.h b/include/bmx/essence_parser/JXSEssenceParser.h index b83996d7..50bacaed 100644 --- a/include/bmx/essence_parser/JXSEssenceParser.h +++ b/include/bmx/essence_parser/JXSEssenceParser.h @@ -277,6 +277,7 @@ namespace bmx virtual ~JXSEssenceParser() {} virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); diff --git a/include/bmx/essence_parser/MJPEGEssenceParser.h b/include/bmx/essence_parser/MJPEGEssenceParser.h index 32d65e3d..825c0b0d 100644 --- a/include/bmx/essence_parser/MJPEGEssenceParser.h +++ b/include/bmx/essence_parser/MJPEGEssenceParser.h @@ -48,13 +48,12 @@ class MJPEGEssenceParser : public EssenceParser virtual ~MJPEGEssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); -private: - void Reset(); - private: bool mSingleField; diff --git a/include/bmx/essence_parser/MPEG2EssenceParser.h b/include/bmx/essence_parser/MPEG2EssenceParser.h index 95c43c17..24fd8440 100644 --- a/include/bmx/essence_parser/MPEG2EssenceParser.h +++ b/include/bmx/essence_parser/MPEG2EssenceParser.h @@ -48,6 +48,8 @@ class MPEG2EssenceParser : public EssenceParser virtual ~MPEG2EssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); @@ -96,7 +98,6 @@ class MPEG2EssenceParser : public EssenceParser bool IsTFF() const { return mIsTFF; } private: - void ResetFrameSize(); void ResetFrameInfo(); private: diff --git a/include/bmx/essence_parser/RDD36EssenceParser.h b/include/bmx/essence_parser/RDD36EssenceParser.h index 03beff42..c3853097 100644 --- a/include/bmx/essence_parser/RDD36EssenceParser.h +++ b/include/bmx/essence_parser/RDD36EssenceParser.h @@ -91,6 +91,8 @@ class RDD36EssenceParser : public EssenceParser virtual ~RDD36EssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); diff --git a/include/bmx/essence_parser/VC2EssenceParser.h b/include/bmx/essence_parser/VC2EssenceParser.h index ef5d1cff..06ada7ee 100644 --- a/include/bmx/essence_parser/VC2EssenceParser.h +++ b/include/bmx/essence_parser/VC2EssenceParser.h @@ -136,6 +136,8 @@ class VC2EssenceParser : public EssenceParser virtual ~VC2EssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); @@ -176,7 +178,6 @@ class VC2EssenceParser : public EssenceParser bool ParseSourceParameters(VC2GetBitBuffer *buffer, SequenceHeader *sequence_header); void SetCodingParameters(SequenceHeader *sequence_header); - void ResetFrameSize(); void ResetFrameInfo(); private: diff --git a/include/bmx/essence_parser/VC3EssenceParser.h b/include/bmx/essence_parser/VC3EssenceParser.h index 078dcdc5..676425b0 100644 --- a/include/bmx/essence_parser/VC3EssenceParser.h +++ b/include/bmx/essence_parser/VC3EssenceParser.h @@ -51,6 +51,8 @@ class VC3EssenceParser : public EssenceParser virtual ~VC3EssenceParser(); virtual uint32_t ParseFrameStart(const unsigned char *data, uint32_t data_size); + + virtual void ResetParseFrameSize(); virtual uint32_t ParseFrameSize(const unsigned char *data, uint32_t data_size); virtual void ParseFrameInfo(const unsigned char *data, uint32_t data_size); diff --git a/src/essence_parser/AVCEssenceParser.cpp b/src/essence_parser/AVCEssenceParser.cpp index 14211502..ea030962 100644 --- a/src/essence_parser/AVCEssenceParser.cpp +++ b/src/essence_parser/AVCEssenceParser.cpp @@ -406,7 +406,7 @@ AVCCodedPictureEssenceParser::POCInfo::~POCInfo() AVCCodedPictureEssenceParser::AVCCodedPictureEssenceParser() { - ResetFrameSize(); + ResetParseFrameSize(); ResetFrameInfo(); } @@ -469,6 +469,13 @@ uint32_t AVCCodedPictureEssenceParser::ParseFrameStart(const unsigned char *data return offset - 1; } +void AVCCodedPictureEssenceParser::ResetParseFrameSize() +{ + mHavePrimPicSliceHeader = false; + memset(&mPrimPicSliceHeader, 0, sizeof(mPrimPicSliceHeader)); + mOffset = 0; +} + uint32_t AVCCodedPictureEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size < ESSENCE_PARSER_NULL_OFFSET); @@ -482,7 +489,7 @@ uint32_t AVCCodedPictureEssenceParser::ParseFrameSize(const unsigned char *data, // access unit's NAL unit if (mOffset == 0) - ResetFrameSize(); + ResetParseFrameSize(); bool have_frame_end = false; bool have_issue = false; @@ -1867,13 +1874,6 @@ void AVCCodedPictureEssenceParser::SetPPSData(uint8_t id, const unsigned char *d mPPSData[id] = new ParamSetData(data, size); } -void AVCCodedPictureEssenceParser::ResetFrameSize() -{ - mHavePrimPicSliceHeader = false; - memset(&mPrimPicSliceHeader, 0, sizeof(mPrimPicSliceHeader)); - mOffset = 0; -} - void AVCCodedPictureEssenceParser::ResetFrameInfo() { mHavePrimPicSliceHeader = false; @@ -1945,10 +1945,16 @@ uint32_t AVCEssenceParser::ParseFrameStart(const unsigned char *data, uint32_t d return mCodedPictureParser.ParseFrameStart(data, data_size); } +void AVCEssenceParser::ResetParseFrameSize() +{ + mCodedPictureParser.ResetParseFrameSize(); + mParsedFrameSize.Reset(); +} + ParsedFrameSize AVCEssenceParser::ParseFrameSize2(const unsigned char *data, uint32_t data_size) { if (mParsedFrameSize.IsComplete()) - mParsedFrameSize.Reset(); + ResetParseFrameSize(); if (mParsedFrameSize.HaveFirstField()) { // It is field coded and the first field has been parsed @@ -2038,10 +2044,7 @@ ParsedFrameSize AVCEssenceParser::ParseFrameInfo2(const unsigned char *data, Par // Parse the field sizes if the frame_size passed in doesn't have the second field offset if (frame_size.IsFrame()) { - // The frame size might've been completed outside ParseFrameSize2 using remaining available - // data. That's why an explicit frame size parsing state reset is required here - mParsedFrameSize.Reset(); - + ResetParseFrameSize(); ParseFrameSize2(data, frame_size.GetFirstFieldOrFrameSize()); // The second field size won't be known from parsing because there is no next picture. diff --git a/src/essence_parser/DVEssenceParser.cpp b/src/essence_parser/DVEssenceParser.cpp index 2f46e84b..cb78ea72 100644 --- a/src/essence_parser/DVEssenceParser.cpp +++ b/src/essence_parser/DVEssenceParser.cpp @@ -74,6 +74,10 @@ uint32_t DVEssenceParser::ParseFrameStart(const unsigned char *data, uint32_t da return 0; } +void DVEssenceParser::ResetParseFrameSize() +{ +} + uint32_t DVEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_ASSERT(DV_PARSER_MIN_DATA_SIZE >= DV_DIF_SEQUENCE_SIZE); diff --git a/src/essence_parser/J2CEssenceParser.cpp b/src/essence_parser/J2CEssenceParser.cpp index 756bd8de..7c331275 100644 --- a/src/essence_parser/J2CEssenceParser.cpp +++ b/src/essence_parser/J2CEssenceParser.cpp @@ -101,6 +101,10 @@ uint32_t J2CEssenceParser::ParseFrameStart(const unsigned char *data, uint32_t d return 0; } +void J2CEssenceParser::ResetParseFrameSize() +{ +} + uint32_t J2CEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size != ESSENCE_PARSER_NULL_OFFSET); diff --git a/src/essence_parser/JXSEssenceParser.cpp b/src/essence_parser/JXSEssenceParser.cpp index 811de6ce..8b081ed3 100644 --- a/src/essence_parser/JXSEssenceParser.cpp +++ b/src/essence_parser/JXSEssenceParser.cpp @@ -116,6 +116,10 @@ uint32_t JXSEssenceParser::ParseFrameStart(const unsigned char *data, uint32_t d return 0; } +void JXSEssenceParser::ResetParseFrameSize() +{ +} + uint32_t JXSEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size != ESSENCE_PARSER_NULL_OFFSET); diff --git a/src/essence_parser/MJPEGEssenceParser.cpp b/src/essence_parser/MJPEGEssenceParser.cpp index 6ba746ba..0e0be707 100644 --- a/src/essence_parser/MJPEGEssenceParser.cpp +++ b/src/essence_parser/MJPEGEssenceParser.cpp @@ -45,7 +45,7 @@ using namespace bmx; MJPEGEssenceParser::MJPEGEssenceParser(bool single_field) { mSingleField = single_field; - Reset(); + ResetParseFrameSize(); } MJPEGEssenceParser::~MJPEGEssenceParser() @@ -60,6 +60,16 @@ uint32_t MJPEGEssenceParser::ParseFrameStart(const unsigned char *data, uint32_t return 0; } +void MJPEGEssenceParser::ResetParseFrameSize() +{ + mOffset = 0; + mState = 0; + mHaveLenByte1 = false; + mHaveLenByte2 = false; + mSkipCount = 0; + mFieldCount = 0; +} + uint32_t MJPEGEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { // states @@ -86,7 +96,7 @@ uint32_t MJPEGEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t mState = 1; } else { // invalid image start - Reset(); + ResetParseFrameSize(); return ESSENCE_PARSER_NULL_FRAME_SIZE; } break; @@ -105,7 +115,7 @@ uint32_t MJPEGEssenceParser::ParseFrameSize(const unsigned char *data, uint32_t { uint32_t image_size = mOffset + 1; if (mSingleField || mFieldCount == 1) { - Reset(); + ResetParseFrameSize(); return image_size; } mFieldCount++; @@ -158,14 +168,3 @@ void MJPEGEssenceParser::ParseFrameInfo(const unsigned char *data, uint32_t data (void)data; (void)data_size; } - -void MJPEGEssenceParser::Reset() -{ - mOffset = 0; - mState = 0; - mHaveLenByte1 = false; - mHaveLenByte2 = false; - mSkipCount = 0; - mFieldCount = 0; -} - diff --git a/src/essence_parser/MPEG2EssenceParser.cpp b/src/essence_parser/MPEG2EssenceParser.cpp index 64d2a38b..1fe65337 100644 --- a/src/essence_parser/MPEG2EssenceParser.cpp +++ b/src/essence_parser/MPEG2EssenceParser.cpp @@ -87,7 +87,7 @@ static const FrameRateMap FRAME_RATE_MAP[] = MPEG2EssenceParser::MPEG2EssenceParser() { - ResetFrameSize(); + ResetParseFrameSize(); ResetFrameInfo(); mHorizontalSize = 0; @@ -137,6 +137,15 @@ uint32_t MPEG2EssenceParser::ParseFrameStart(const unsigned char *data, uint32_t return ESSENCE_PARSER_NULL_OFFSET; } +void MPEG2EssenceParser::ResetParseFrameSize() +{ + mOffset = 0; + mState = 0xffffffff; + mSequenceHeader = false; + mGroupHeader = false; + mPictureStart = false; +} + uint32_t MPEG2EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size != ESSENCE_PARSER_NULL_OFFSET); @@ -156,7 +165,7 @@ uint32_t MPEG2EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t (mState == PICTURE_START_CODE && mPictureStart)) { uint32_t frame_size = mOffset - 3; - ResetFrameSize(); + ResetParseFrameSize(); return frame_size; } @@ -167,7 +176,7 @@ uint32_t MPEG2EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t else if (mOffset == 3) { // not a valid frame start - ResetFrameSize(); + ResetParseFrameSize(); return ESSENCE_PARSER_NULL_FRAME_SIZE; } @@ -402,15 +411,6 @@ void MPEG2EssenceParser::ParseFrameAllInfo(const unsigned char *data, uint32_t d } } -void MPEG2EssenceParser::ResetFrameSize() -{ - mOffset = 0; - mState = 0xffffffff; - mSequenceHeader = false; - mGroupHeader = false; - mPictureStart = false; -} - void MPEG2EssenceParser::ResetFrameInfo() { mHaveSequenceHeader = false; diff --git a/src/essence_parser/RDD36EssenceParser.cpp b/src/essence_parser/RDD36EssenceParser.cpp index 44b59e08..b63fe606 100644 --- a/src/essence_parser/RDD36EssenceParser.cpp +++ b/src/essence_parser/RDD36EssenceParser.cpp @@ -138,6 +138,10 @@ uint32_t RDD36EssenceParser::ParseFrameStart(const unsigned char *data, uint32_t return 0; } +void RDD36EssenceParser::ResetParseFrameSize() +{ +} + uint32_t RDD36EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size != ESSENCE_PARSER_NULL_OFFSET); diff --git a/src/essence_parser/RawEssenceReader.cpp b/src/essence_parser/RawEssenceReader.cpp index 3ef7aaf1..5af65ce2 100644 --- a/src/essence_parser/RawEssenceReader.cpp +++ b/src/essence_parser/RawEssenceReader.cpp @@ -195,6 +195,8 @@ bool RawEssenceReader::ReadAndParseSample() sample_num_read += ReadBytes(mReadBlockSize); } + mEssenceParser->ResetParseFrameSize(); + ParsedFrameSize sample_size; while (true) { sample_size = mEssenceParser->ParseFrameSize2(mSampleBuffer.GetBytes() + sample_start_offset, sample_num_read); diff --git a/src/essence_parser/VC2EssenceParser.cpp b/src/essence_parser/VC2EssenceParser.cpp index 24b544d1..932167ad 100644 --- a/src/essence_parser/VC2EssenceParser.cpp +++ b/src/essence_parser/VC2EssenceParser.cpp @@ -225,12 +225,23 @@ uint32_t VC2EssenceParser::ParseFrameStart(const unsigned char *data, uint32_t d return ESSENCE_PARSER_NULL_OFFSET; } +void VC2EssenceParser::ResetParseFrameSize() +{ + mParseState = PARSE_INFO_STATE; + mOffset = 0; + memset(&mCurrentParseInfo, 0, sizeof(mCurrentParseInfo)); + mParseInfos.clear(); + mPictureCount = 0; + mSearchState = 0; + mSearchCount = 0; +} + uint32_t VC2EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size != ESSENCE_PARSER_NULL_OFFSET); if (mOffset == 0) - ResetFrameSize(); + ResetParseFrameSize(); VC2GetBitBuffer buffer(data, data_size); buffer.SetPos(mOffset); @@ -380,7 +391,7 @@ uint32_t VC2EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t da log_warn("Missing Picture data unit(s)\n"); return ESSENCE_PARSER_NULL_FRAME_SIZE; } - mOffset = 0; // results in ResetFrameSize() in next call + mOffset = 0; // results in ResetParseFrameSize() in next call return frame_size; } else { return ESSENCE_PARSER_NULL_OFFSET; @@ -444,7 +455,7 @@ uint32_t VC2EssenceParser::ParsePictureHeader(const unsigned char *data, uint32_ void VC2EssenceParser::ResetFrameParse() { - ResetFrameSize(); + ResetParseFrameSize(); ResetFrameInfo(); } @@ -708,17 +719,6 @@ void VC2EssenceParser::SetCodingParameters(SequenceHeader *sequence_header) sequence_header->coding_params.color_diff_depth = intlog2(sequence_header->source_params.color_diff_excursion + 1); } -void VC2EssenceParser::ResetFrameSize() -{ - mParseState = PARSE_INFO_STATE; - mOffset = 0; - memset(&mCurrentParseInfo, 0, sizeof(mCurrentParseInfo)); - mParseInfos.clear(); - mPictureCount = 0; - mSearchState = 0; - mSearchCount = 0; -} - void VC2EssenceParser::ResetFrameInfo() { mPictureCount = 0; diff --git a/src/essence_parser/VC3EssenceParser.cpp b/src/essence_parser/VC3EssenceParser.cpp index da19e450..ee0af8b0 100644 --- a/src/essence_parser/VC3EssenceParser.cpp +++ b/src/essence_parser/VC3EssenceParser.cpp @@ -137,6 +137,10 @@ uint32_t VC3EssenceParser::ParseFrameStart(const unsigned char *data, uint32_t d return ESSENCE_PARSER_NULL_OFFSET; } +void VC3EssenceParser::ResetParseFrameSize() +{ +} + uint32_t VC3EssenceParser::ParseFrameSize(const unsigned char *data, uint32_t data_size) { BMX_CHECK(data_size != ESSENCE_PARSER_NULL_OFFSET);