libwebm: added support for incremental cluster parsing

Change-Id: Idb1bd292a01b7c9971967760ad016691ac628c29
This commit is contained in:
matthewjheaney 2011-02-16 22:56:53 -05:00
parent f971a94349
commit a1aa16692a
2 changed files with 633 additions and 199 deletions

File diff suppressed because it is too large Load Diff

View File

@ -534,6 +534,8 @@ private:
class Cluster
{
friend class Segment;
Cluster(const Cluster&);
Cluster& operator=(const Cluster&);
@ -541,11 +543,10 @@ public:
Segment* const m_pSegment;
public:
static Cluster* Parse(
static Cluster* Create(
Segment*,
long,
long long off,
//long long element_start,
long index, //index in segment
long long off, //offset relative to segment
long long element_size);
Cluster(); //EndOfStream
@ -582,29 +583,40 @@ public:
void LoadBlockEntries() const;
long Parse(long long& pos, long& size) const;
long GetEntry(long index, const mkvparser::BlockEntry*&) const;
protected:
Cluster(
Segment*,
long,
long long off,
long index,
//long long off,
long long element_start,
long long element_size);
public:
//TODO: these should all be private, with public selector functions
const long long m_element_start;
long long GetPosition() const; //offset relative to segment
long GetIndex() const;
long long GetElementSize() const;
//long long GetPayloadSize() const;
long long Unparsed() const;
private:
long m_index;
mutable long long m_pos;
mutable long long m_size;
const long long m_element_start;
mutable long long m_element_size;
private:
mutable long long m_timecode;
mutable BlockEntry** m_entries;
mutable long m_entries_size;
mutable long m_entries_count;
void ParseBlockGroup(long long, long long, size_t) const;
void ParseSimpleBlock(long long, long long, size_t) const;
void ParseBlock(long long id, long long pos, long long size) const;
void ParseBlockGroup(long long, long long, BlockEntry**&) const;
void ParseSimpleBlock(long long, long long, BlockEntry**&) const;
};