1a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// Copyright (c) 2012 The WebM project authors. All Rights Reserved. 2a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// 3a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// Use of this source code is governed by a BSD-style license 4a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// that can be found in the LICENSE file in the root of the source 5a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// tree. An additional intellectual property rights grant can be found 6a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// in the file PATENTS. All contributing project authors may 7a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// be found in the AUTHORS file in the root of the source tree. 8a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 9a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#ifndef MKVPARSER_HPP 10a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#define MKVPARSER_HPP 11a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 12a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#include <cstdlib> 13a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#include <cstdio> 14a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#include <cstddef> 15a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 16a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramaniannamespace mkvparser 17a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 18a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 19a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianconst int E_FILE_FORMAT_INVALID = -2; 20a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianconst int E_BUFFER_NOT_FULL = -3; 21a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 22a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass IMkvReader 23a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 24a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 25a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual int Read(long long pos, long len, unsigned char* buf) = 0; 26a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual int Length(long long* total, long long* available) = 0; 27a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 28a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual ~IMkvReader(); 29a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 30a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 31a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong long GetUIntLength(IMkvReader*, long long, long&); 32a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong long ReadUInt(IMkvReader*, long long, long&); 33a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong long UnserializeUInt(IMkvReader*, long long pos, long long size); 34a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 35a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong UnserializeFloat(IMkvReader*, long long pos, long long size, double&); 36a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong UnserializeInt(IMkvReader*, long long pos, long len, long long& result); 37a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 38a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong UnserializeString( 39a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader*, 40a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long pos, 41a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 42a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char*& str); 43a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 44a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianlong ParseElementHeader( 45a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader* pReader, 46a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long& pos, //consume id and size fields 47a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long stop, //if you know size of element's parent 48a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long& id, 49a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long& size); 50a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 51a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianbool Match(IMkvReader*, long long&, unsigned long, long long&); 52a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianbool Match(IMkvReader*, long long&, unsigned long, unsigned char*&, size_t&); 53a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 54a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianvoid GetVersion(int& major, int& minor, int& build, int& revision); 55a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 56a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianstruct EBMLHeader 57a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 58a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian EBMLHeader(); 59a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~EBMLHeader(); 60a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_version; 61a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_readVersion; 62a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_maxIdLength; 63a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_maxSizeLength; 64a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_docType; 65a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_docTypeVersion; 66a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_docTypeReadVersion; 67a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 68a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long Parse(IMkvReader*, long long&); 69a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Init(); 70a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 71a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 72a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 73a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Segment; 74a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Track; 75a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Cluster; 76a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 77a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Block 78a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 79a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Block(const Block&); 80a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Block& operator=(const Block&); 81a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 82a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 83a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; 84a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; 85a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 86a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Block(long long start, long long size, long long discard_padding); 87a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Block(); 88a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 89a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(const Cluster*); 90a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 91a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTrackNumber() const; 92a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTimeCode(const Cluster*) const; //absolute, but not scaled 93a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTime(const Cluster*) const; //absolute, and scaled (ns) 94a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool IsKey() const; 95a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void SetKey(bool); 96a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool IsInvisible() const; 97a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 98a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian enum Lacing { kLacingNone, kLacingXiph, kLacingFixed, kLacingEbml }; 99a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Lacing GetLacing() const; 100a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 101a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int GetFrameCount() const; //to index frames: [0, count) 102a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 103a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct Frame 104a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 105a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long pos; //absolute offset 106a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long len; 107a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 108a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Read(IMkvReader*, unsigned char*) const; 109a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 110a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 111a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Frame& GetFrame(int frame_index) const; 112a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 113a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetDiscardPadding() const; 114a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 115a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 116a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_track; //Track::Number() 117a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian short m_timecode; //relative to cluster 118a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned char m_flags; 119a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 120a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Frame* m_frames; 121a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_frame_count; 122a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 123a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 124a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_discard_padding; 125a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 126a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 127a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 128a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass BlockEntry 129a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 130a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian BlockEntry(const BlockEntry&); 131a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian BlockEntry& operator=(const BlockEntry&); 132a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 133a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 134a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian BlockEntry(Cluster*, long index); 135a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 136a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 137a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual ~BlockEntry(); 138a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 139a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool EOS() const; 140a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* GetCluster() const; 141a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetIndex() const; 142a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual const Block* GetBlock() const = 0; 143a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 144a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian enum Kind { kBlockEOS, kBlockSimple, kBlockGroup }; 145a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual Kind GetKind() const = 0; 146a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 147a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 148a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster* const m_pCluster; 149a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long m_index; 150a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 151a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 152a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 153a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 154a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass SimpleBlock : public BlockEntry 155a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 156a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SimpleBlock(const SimpleBlock&); 157a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SimpleBlock& operator=(const SimpleBlock&); 158a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 159a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 160a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SimpleBlock(Cluster*, long index, long long start, long long size); 161a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(); 162a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 163a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Kind GetKind() const; 164a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Block* GetBlock() const; 165a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 166a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 167a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Block m_block; 168a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 169a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 170a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 171a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 172a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass BlockGroup : public BlockEntry 173a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 174a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian BlockGroup(const BlockGroup&); 175a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian BlockGroup& operator=(const BlockGroup&); 176a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 177a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 178a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian BlockGroup( 179a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster*, 180a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long index, 181a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long block_start, //absolute pos of block's payload 182a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long block_size, //size of block's payload 183a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long prev, 184a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long next, 185a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long duration, 186a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long discard_padding); 187a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 188a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(); 189a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 190a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Kind GetKind() const; 191a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Block* GetBlock() const; 192a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 193a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetPrevTimeCode() const; //relative to block's time 194a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetNextTimeCode() const; //as above 195a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetDurationTimeCode() const; 196a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 197a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 198a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Block m_block; 199a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_prev; 200a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_next; 201a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_duration; 202a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 203a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 204a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian/////////////////////////////////////////////////////////////// 205a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// ContentEncoding element 206a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// Elements used to describe if the track data has been encrypted or 207a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// compressed with zlib or header stripping. 208a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass ContentEncoding { 209a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 210a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian enum { 211a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian kCTR = 1 212a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 213a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 214a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncoding(); 215a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~ContentEncoding(); 216a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 217a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // ContentCompression element names 218a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct ContentCompression { 219a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentCompression(); 220a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~ContentCompression(); 221a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 222a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long algo; 223a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned char* settings; 224a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long settings_len; 225a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 226a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 227a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // ContentEncAESSettings element names 228a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct ContentEncAESSettings { 229a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncAESSettings() : cipher_mode(kCTR) {} 230a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~ContentEncAESSettings() {} 231a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 232a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long cipher_mode; 233a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 234a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 235a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // ContentEncryption element names 236a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct ContentEncryption { 237a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncryption(); 238a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~ContentEncryption(); 239a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 240a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long algo; 241a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned char* key_id; 242a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long key_id_len; 243a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned char* signature; 244a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long signature_len; 245a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned char* sig_key_id; 246a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long sig_key_id_len; 247a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long sig_algo; 248a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long sig_hash_algo; 249a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 250a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncAESSettings aes_settings; 251a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 252a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 253a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Returns ContentCompression represented by |idx|. Returns NULL if |idx| 254a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // is out of bounds. 255a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const ContentCompression* GetCompressionByIndex(unsigned long idx) const; 256a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 257a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Returns number of ContentCompression elements in this ContentEncoding 258a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // element. 259a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long GetCompressionCount() const; 260a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 261a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Parses the ContentCompression element from |pReader|. |start| is the 262a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // starting offset of the ContentCompression payload. |size| is the size in 263a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // bytes of the ContentCompression payload. |compression| is where the parsed 264a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // values will be stored. 265a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseCompressionEntry(long long start, 266a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 267a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader* pReader, 268a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentCompression* compression); 269a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 270a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Returns ContentEncryption represented by |idx|. Returns NULL if |idx| 271a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // is out of bounds. 272a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const ContentEncryption* GetEncryptionByIndex(unsigned long idx) const; 273a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 274a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Returns number of ContentEncryption elements in this ContentEncoding 275a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // element. 276a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long GetEncryptionCount() const; 277a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 278a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Parses the ContentEncAESSettings element from |pReader|. |start| is the 279a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // starting offset of the ContentEncAESSettings payload. |size| is the 280a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // size in bytes of the ContentEncAESSettings payload. |encryption| is 281a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // where the parsed values will be stored. 282a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseContentEncAESSettingsEntry(long long start, 283a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 284a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader* pReader, 285a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncAESSettings* aes); 286a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 287a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Parses the ContentEncoding element from |pReader|. |start| is the 288a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // starting offset of the ContentEncoding payload. |size| is the size in 289a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // bytes of the ContentEncoding payload. Returns true on success. 290a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseContentEncodingEntry(long long start, 291a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 292a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader* pReader); 293a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 294a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Parses the ContentEncryption element from |pReader|. |start| is the 295a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // starting offset of the ContentEncryption payload. |size| is the size in 296a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // bytes of the ContentEncryption payload. |encryption| is where the parsed 297a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // values will be stored. 298a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseEncryptionEntry(long long start, 299a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 300a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader* pReader, 301a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncryption* encryption); 302a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 303a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long encoding_order() const { return encoding_order_; } 304a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long encoding_scope() const { return encoding_scope_; } 305a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long encoding_type() const { return encoding_type_; } 306a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 307a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 308a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Member variables for list of ContentCompression elements. 309a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentCompression** compression_entries_; 310a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentCompression** compression_entries_end_; 311a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 312a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // Member variables for list of ContentEncryption elements. 313a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncryption** encryption_entries_; 314a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncryption** encryption_entries_end_; 315a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 316a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // ContentEncoding element names 317a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long encoding_order_; 318a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long encoding_scope_; 319a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long encoding_type_; 320a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 321a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // LIBWEBM_DISALLOW_COPY_AND_ASSIGN(ContentEncoding); 322a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncoding(const ContentEncoding&); 323a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncoding& operator=(const ContentEncoding&); 324a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 325a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 326a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Track 327a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 328a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track(const Track&); 329a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track& operator=(const Track&); 330a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 331a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 332a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Info; 333a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static long Create( 334a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 335a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Info&, 336a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 337a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size, 338a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track*&); 339a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 340a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian enum Type { 341a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian kVideo = 1, 342a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian kAudio = 2, 343a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian kSubtitle = 0x11, 344a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian kMetadata = 0x21 345a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 346a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 347a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 348a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 349a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_size; 350a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual ~Track(); 351a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 352a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetType() const; 353a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetNumber() const; 354a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long GetUid() const; 355a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetNameAsUTF8() const; 356a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetLanguage() const; 357a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetCodecNameAsUTF8() const; 358a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetCodecId() const; 359a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const unsigned char* GetCodecPrivate(size_t&) const; 360a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool GetLacing() const; 361a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long GetDefaultDuration() const; 362a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long GetCodecDelay() const; 363a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long GetSeekPreRoll() const; 364a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 365a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const BlockEntry* GetEOS() const; 366a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 367a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct Settings 368a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 369a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long start; 370a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size; 371a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 372a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 373a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Info 374a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 375a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian public: 376a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Info(); 377a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Info(); 378a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int Copy(Info&) const; 379a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Clear(); 380a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long type; 381a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long number; 382a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long uid; 383a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long defaultDuration; 384a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long codecDelay; 385a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long seekPreRoll; 386a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* nameAsUTF8; 387a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* language; 388a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* codecId; 389a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* codecNameAsUTF8; 390a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned char* codecPrivate; 391a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian size_t codecPrivateSize; 392a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool lacing; 393a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Settings settings; 394a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 395a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian private: 396a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Info(const Info&); 397a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Info& operator=(const Info&); 398a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int CopyStr(char* Info::*str, Info&) const; 399a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 400a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 401a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetFirst(const BlockEntry*&) const; 402a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetNext(const BlockEntry* pCurr, const BlockEntry*& pNext) const; 403a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual bool VetEntry(const BlockEntry*) const; 404a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian virtual long Seek(long long time_ns, const BlockEntry*&) const; 405a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 406a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const ContentEncoding* GetContentEncodingByIndex(unsigned long idx) const; 407a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long GetContentEncodingCount() const; 408a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 409a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseContentEncodingsEntry(long long start, long long size); 410a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 411a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 412a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track( 413a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 414a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 415a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 416a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 417a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Info m_info; 418a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 419a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class EOSBlock : public BlockEntry 420a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 421a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian public: 422a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian EOSBlock(); 423a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 424a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Kind GetKind() const; 425a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Block* GetBlock() const; 426a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 427a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 428a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian EOSBlock m_eos; 429a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 430a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 431a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncoding** content_encoding_entries_; 432a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ContentEncoding** content_encoding_entries_end_; 433a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 434a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 435a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 436a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass VideoTrack : public Track 437a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 438a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian VideoTrack(const VideoTrack&); 439a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian VideoTrack& operator=(const VideoTrack&); 440a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 441a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian VideoTrack( 442a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 443a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 444a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 445a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 446a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 447a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static long Parse( 448a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 449a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Info&, 450a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 451a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size, 452a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian VideoTrack*&); 453a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 454a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetWidth() const; 455a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetHeight() const; 456a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian double GetFrameRate() const; 457a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 458a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool VetEntry(const BlockEntry*) const; 459a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Seek(long long time_ns, const BlockEntry*&) const; 460a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 461a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 462a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_width; 463a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_height; 464a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian double m_rate; 465a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 466a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 467a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 468a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 469a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass AudioTrack : public Track 470a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 471a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian AudioTrack(const AudioTrack&); 472a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian AudioTrack& operator=(const AudioTrack&); 473a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 474a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian AudioTrack( 475a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 476a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 477a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 478a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 479a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static long Parse( 480a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 481a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Info&, 482a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 483a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size, 484a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian AudioTrack*&); 485a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 486a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian double GetSamplingRate() const; 487a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetChannels() const; 488a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetBitDepth() const; 489a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 490a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 491a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian double m_rate; 492a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_channels; 493a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_bitDepth; 494a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 495a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 496a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 497a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Tracks 498a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 499a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Tracks(const Tracks&); 500a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Tracks& operator=(const Tracks&); 501a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 502a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 503a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 504a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; 505a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; 506a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 507a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_size; 508a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 509a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Tracks( 510a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 511a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long start, 512a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 513a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 514a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 515a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 516a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Tracks(); 517a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 518a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(); 519a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 520a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long GetTracksCount() const; 521a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 522a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Track* GetTrackByNumber(long tn) const; 523a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Track* GetTrackByIndex(unsigned long idx) const; 524a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 525a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 526a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track** m_trackEntries; 527a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track** m_trackEntriesEnd; 528a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 529a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseTrackEntry( 530a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long payload_start, 531a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long payload_size, 532a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 533a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size, 534a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Track*&) const; 535a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 536a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 537a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 538a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 539a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Chapters 540a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 541a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Chapters(const Chapters&); 542a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Chapters& operator=(const Chapters&); 543a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 544a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 545a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 546a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; 547a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; 548a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 549a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_size; 550a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 551a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Chapters( 552a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 553a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long payload_start, 554a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long payload_size, 555a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 556a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 557a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 558a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Chapters(); 559a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 560a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(); 561a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 562a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Atom; 563a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Edition; 564a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 565a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Display 566a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 567a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Atom; 568a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Display(); 569a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Display(const Display&); 570a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Display(); 571a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Display& operator=(const Display&); 572a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian public: 573a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetString() const; 574a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetLanguage() const; 575a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetCountry() const; 576a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian private: 577a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Init(); 578a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void ShallowCopy(Display&) const; 579a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Clear(); 580a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(IMkvReader*, long long pos, long long size); 581a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 582a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_string; 583a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_language; 584a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_country; 585a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 586a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 587a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Atom 588a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 589a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Edition; 590a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Atom(); 591a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Atom(const Atom&); 592a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Atom(); 593a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Atom& operator=(const Atom&); 594a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian public: 595a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long GetUID() const; 596a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetStringUID() const; 597a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 598a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetStartTimecode() const; 599a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetStopTimecode() const; 600a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 601a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetStartTime(const Chapters*) const; 602a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetStopTime(const Chapters*) const; 603a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 604a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int GetDisplayCount() const; 605a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Display* GetDisplay(int index) const; 606a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian private: 607a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Init(); 608a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void ShallowCopy(Atom&) const; 609a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Clear(); 610a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(IMkvReader*, long long pos, long long size); 611a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static long long GetTime(const Chapters*, long long timecode); 612a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 613a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseDisplay(IMkvReader*, long long pos, long long size); 614a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool ExpandDisplaysArray(); 615a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 616a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_string_uid; 617a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long long m_uid; 618a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_start_timecode; 619a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_stop_timecode; 620a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 621a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Display* m_displays; 622a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_displays_size; 623a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_displays_count; 624a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 625a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 626a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian class Edition 627a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 628a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Chapters; 629a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Edition(); 630a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Edition(const Edition&); 631a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Edition(); 632a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Edition& operator=(const Edition&); 633a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian public: 634a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int GetAtomCount() const; 635a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Atom* GetAtom(int index) const; 636a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian private: 637a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Init(); 638a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void ShallowCopy(Edition&) const; 639a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Clear(); 640a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(IMkvReader*, long long pos, long long size); 641a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 642a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseAtom(IMkvReader*, long long pos, long long size); 643a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool ExpandAtomsArray(); 644a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 645a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Atom* m_atoms; 646a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_atoms_size; 647a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_atoms_count; 648a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 649a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 650a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int GetEditionCount() const; 651a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Edition* GetEdition(int index) const; 652a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 653a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 654a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseEdition(long long pos, long long size); 655a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool ExpandEditionsArray(); 656a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 657a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Edition* m_editions; 658a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_editions_size; 659a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_editions_count; 660a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 661a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 662a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 663a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 664a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass SegmentInfo 665a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 666a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SegmentInfo(const SegmentInfo&); 667a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SegmentInfo& operator=(const SegmentInfo&); 668a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 669a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 670a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 671a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; 672a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; 673a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 674a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_size; 675a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 676a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SegmentInfo( 677a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 678a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long start, 679a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 680a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 681a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 682a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 683a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~SegmentInfo(); 684a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 685a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(); 686a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 687a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTimeCodeScale() const; 688a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetDuration() const; //scaled 689a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetMuxingAppAsUTF8() const; 690a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetWritingAppAsUTF8() const; 691a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const char* GetTitleAsUTF8() const; 692a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 693a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 694a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_timecodeScale; 695a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian double m_duration; 696a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_pMuxingAppAsUTF8; 697a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_pWritingAppAsUTF8; 698a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian char* m_pTitleAsUTF8; 699a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 700a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 701a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 702a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass SeekHead 703a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 704a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SeekHead(const SeekHead&); 705a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SeekHead& operator=(const SeekHead&); 706a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 707a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 708a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 709a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; 710a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; 711a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 712a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_size; 713a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 714a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SeekHead( 715a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 716a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long start, 717a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 718a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 719a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 720a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 721a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~SeekHead(); 722a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 723a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(); 724a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 725a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct Entry 726a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 727a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //the SeekHead entry payload 728a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long id; 729a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long pos; 730a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 731a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //absolute pos of SeekEntry ID 732a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start; 733a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 734a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //SeekEntry ID size + size size + payload 735a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size; 736a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 737a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 738a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int GetCount() const; 739a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Entry* GetEntry(int idx) const; 740a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 741a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct VoidElement 742a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 743a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //absolute pos of Void ID 744a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start; 745a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 746a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //ID size + size size + payload size 747a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size; 748a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 749a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 750a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int GetVoidElementCount() const; 751a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const VoidElement* GetVoidElement(int idx) const; 752a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 753a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 754a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Entry* m_entries; 755a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_entry_count; 756a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 757a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian VoidElement* m_void_elements; 758a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian int m_void_element_count; 759a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 760a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static bool ParseEntry( 761a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader*, 762a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long pos, //payload 763a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 764a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Entry*); 765a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 766a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 767a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 768a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Cues; 769a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass CuePoint 770a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 771a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Cues; 772a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 773a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian CuePoint(long, long long); 774a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~CuePoint(); 775a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 776a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian CuePoint(const CuePoint&); 777a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian CuePoint& operator=(const CuePoint&); 778a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 779a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 780a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_element_start; 781a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_element_size; 782a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 783a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Load(IMkvReader*); 784a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 785a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTimeCode() const; //absolute but unscaled 786a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTime(const Segment*) const; //absolute and scaled (ns units) 787a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 788a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian struct TrackPosition 789a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian { 790a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_track; 791a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_pos; //of cluster 792a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_block; 793a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //codec_state //defaults to 0 794a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //reference = clusters containing req'd referenced blocks 795a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian // reftime = timecode of the referenced block 796a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 797a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Parse(IMkvReader*, long long, long long); 798a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian }; 799a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 800a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const TrackPosition* Find(const Track*) const; 801a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 802a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 803a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long m_index; 804a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_timecode; 805a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian TrackPosition* m_track_positions; 806a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian size_t m_track_positions_count; 807a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 808a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 809a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 810a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 811a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Cues 812a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 813a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Segment; 814a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 815a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cues( 816a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 817a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long start, 818a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size, 819a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start, 820a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_size); 821a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Cues(); 822a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 823a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cues(const Cues&); 824a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cues& operator=(const Cues&); 825a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 826a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 827a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 828a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; 829a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; 830a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 831a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_size; 832a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 833a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool Find( //lower bound of time_ns 834a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long time_ns, 835a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Track*, 836a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint*&, 837a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint::TrackPosition*&) const; 838a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 839a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#if 0 840a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool FindNext( //upper_bound of time_ns 841a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long time_ns, 842a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Track*, 843a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint*&, 844a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint::TrackPosition*&) const; 845a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#endif 846a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 847a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint* GetFirst() const; 848a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint* GetLast() const; 849a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint* GetNext(const CuePoint*) const; 850a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 851a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const BlockEntry* GetBlock( 852a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint*, 853a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint::TrackPosition*) const; 854a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 855a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool LoadCuePoint() const; 856a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetCount() const; //loaded only 857a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long GetTotal() const; //loaded + preloaded 858a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool DoneParsing() const; 859a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 860a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 861a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void Init() const; 862a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void PreloadCuePoint(long&, long long) const; 863a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 864a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable CuePoint** m_cue_points; 865a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long m_count; 866a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long m_preload_count; 867a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long long m_pos; 868a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 869a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 870a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 871a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 872a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Cluster 873a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 874a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Segment; 875a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 876a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster(const Cluster&); 877a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster& operator=(const Cluster&); 878a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 879a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 880a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment* const m_pSegment; 881a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 882a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 883a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static Cluster* Create( 884a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 885a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long index, //index in segment 886a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long off); //offset relative to segment 887a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long long element_size); 888a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 889a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster(); //EndOfStream 890a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Cluster(); 891a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 892a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool EOS() const; 893a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 894a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTimeCode() const; //absolute, but not scaled 895a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetTime() const; //absolute, and scaled (nanosecond units) 896a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetFirstTime() const; //time (ns) of first (earliest) block 897a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetLastTime() const; //time (ns) of last (latest) block 898a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 899a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetFirst(const BlockEntry*&) const; 900a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetLast(const BlockEntry*&) const; 901a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetNext(const BlockEntry* curr, const BlockEntry*& next) const; 902a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 903a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const BlockEntry* GetEntry(const Track*, long long ns = -1) const; 904a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const BlockEntry* GetEntry( 905a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint&, 906a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint::TrackPosition&) const; 907a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //const BlockEntry* GetMaxKey(const VideoTrack*) const; 908a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 909a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian// static bool HasBlockEntries(const Segment*, long long); 910a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 911a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static long HasBlockEntries( 912a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Segment*, 913a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long idoff, 914a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long& pos, 915a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long& size); 916a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 917a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetEntryCount() const; 918a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 919a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Load(long long& pos, long& size) const; 920a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 921a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Parse(long long& pos, long& size) const; 922a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetEntry(long index, const mkvparser::BlockEntry*&) const; 923a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 924a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprotected: 925a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster( 926a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment*, 927a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long index, 928a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long element_start); 929a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long long element_size); 930a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 931a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 932a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 933a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetPosition() const; //offset relative to segment 934a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 935a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long GetIndex() const; 936a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetElementSize() const; 937a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long long GetPayloadSize() const; 938a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 939a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long long Unparsed() const; 940a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 941a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 942a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long m_index; 943a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long long m_pos; 944a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //mutable long long m_size; 945a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long long m_element_size; 946a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long long m_timecode; 947a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable BlockEntry** m_entries; 948a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long m_entries_size; 949a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian mutable long m_entries_count; 950a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 951a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseSimpleBlock(long long, long long&, long&); 952a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseBlockGroup(long long, long long&, long&); 953a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 954a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long CreateBlock(long long id, long long pos, long long size, 955a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long discard_padding); 956a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long CreateBlockGroup(long long start_offset, long long size, 957a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long discard_padding); 958a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long CreateSimpleBlock(long long, long long); 959a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 960a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 961a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 962a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 963a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianclass Segment 964a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 965a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Cues; 966a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class Track; 967a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian friend class VideoTrack; 968a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 969a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment(const Segment&); 970a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment& operator=(const Segment&); 971a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 972a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 973a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Segment( 974a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader*, 975a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long elem_start, 976a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long long elem_size, 977a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long pos, 978a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long size); 979a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 980a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianpublic: 981a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian IMkvReader* const m_pReader; 982a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_element_start; 983a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //const long long m_element_size; 984a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_start; //posn of segment payload 985a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const long long m_size; //size of segment payload 986a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster m_eos; //TODO: make private? 987a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 988a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian static long long CreateInstance(IMkvReader*, long long, Segment*&); 989a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian ~Segment(); 990a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 991a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long Load(); //loads headers and all clusters 992a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 993a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //for incremental loading 994a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long long Unparsed() const; 995a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool DoneParsing() const; 996a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long ParseHeaders(); //stops when first cluster is found 997a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //long FindNextCluster(long long& pos, long& size) const; 998a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long LoadCluster(long long& pos, long& size); //load one cluster 999a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long LoadCluster(); 1000a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1001a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseNext( 1002a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* pCurr, 1003a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster*& pNext, 1004a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long& pos, 1005a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long& size); 1006a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1007a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#if 0 1008a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //This pair parses one cluster, but only changes the state of the 1009a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //segment object when the cluster is actually added to the index. 1010a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseCluster(long long& cluster_pos, long long& new_pos) const; 1011a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian bool AddCluster(long long cluster_pos, long long new_pos); 1012a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#endif 1013a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1014a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const SeekHead* GetSeekHead() const; 1015a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Tracks* GetTracks() const; 1016a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const SegmentInfo* GetInfo() const; 1017a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cues* GetCues() const; 1018a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Chapters* GetChapters() const; 1019a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1020a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long GetDuration() const; 1021a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1022a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian unsigned long GetCount() const; 1023a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* GetFirst() const; 1024a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* GetLast() const; 1025a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* GetNext(const Cluster*); 1026a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1027a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* FindCluster(long long time_nanoseconds) const; 1028a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //const BlockEntry* Seek(long long time_nanoseconds, const Track*) const; 1029a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1030a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const Cluster* FindOrPreloadCluster(long long pos); 1031a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1032a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long ParseCues( 1033a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long cues_off, //offset relative to start of segment 1034a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long& parse_pos, 1035a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long& parse_len); 1036a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1037a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianprivate: 1038a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1039a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long m_pos; //absolute file posn; what has been consumed so far 1040a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster* m_pUnknownSize; 1041a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1042a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SeekHead* m_pSeekHead; 1043a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian SegmentInfo* m_pInfo; 1044a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Tracks* m_pTracks; 1045a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cues* m_pCues; 1046a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Chapters* m_pChapters; 1047a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian Cluster** m_clusters; 1048a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long m_clusterCount; //number of entries for which m_index >= 0 1049a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long m_clusterPreloadCount; //number of entries for which m_index < 0 1050a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long m_clusterSize; //array size 1051a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1052a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long DoLoadCluster(long long&, long&); 1053a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long DoLoadClusterUnknownSize(long long&, long&); 1054a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long DoParseNext(const Cluster*&, long long&, long&); 1055a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1056a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void AppendCluster(Cluster*); 1057a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian void PreloadCluster(Cluster*, ptrdiff_t); 1058a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1059a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //void ParseSeekHead(long long pos, long long size); 1060a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //void ParseSeekEntry(long long pos, long long size); 1061a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian //void ParseCues(long long); 1062a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1063a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const BlockEntry* GetBlock( 1064a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint&, 1065a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian const CuePoint::TrackPosition&); 1066a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1067a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian}; 1068a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1069a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian} //end namespace mkvparser 1070a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1071a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanianinline long mkvparser::Segment::LoadCluster() 1072a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian{ 1073a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long long pos; 1074a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian long size; 1075a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1076a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian return LoadCluster(pos, size); 1077a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian} 1078a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian 1079a72801d7d92ababb50eecf27a36bd222d031d2feVignesh Venkatasubramanian#endif //MKVPARSER_HPP 1080