lazy load cue points as they're searched

Change-Id: Ifa767e579624f4da06670bf791a85cbee4336682
This commit is contained in:
matthewjheaney
2010-10-08 18:26:44 -04:00
parent 1d0c804fb9
commit 485b6e8125
2 changed files with 315 additions and 62 deletions

View File

@@ -337,11 +337,15 @@ private:
class CuePoint
{
CuePoint(const CuePoint&);
CuePoint& operator=(const CuePoint&);
public:
CuePoint();
explicit CuePoint(long long);
~CuePoint();
void Parse(IMkvReader*, long long start, long long size);
//void Parse(IMkvReader*, long long start, long long size);
void Load(IMkvReader*, long long);
long long GetTimeCode() const; //absolute but unscaled
long long GetTime(Segment*) const; //absolute and scaled (ns units)
@@ -361,6 +365,7 @@ public:
const TrackPosition* Find(const Track*) const;
private:
//long long m_pos;
long long m_timecode;
TrackPosition* m_track_positions;
size_t m_track_positions_count;
@@ -393,14 +398,23 @@ public:
const CuePoint*&,
const CuePoint::TrackPosition*&) const;
size_t LoadCuePoint();
const CuePoint* GetFirst() const;
const CuePoint* GetLast() const;
bool LoadCuePoint();
const CuePoint* LoadCuePoint(
long long time_ns,
const Track*,
const CuePoint::TrackPosition*&) const;
private:
CuePoint* m_cue_points;
size_t m_cue_points_count;
size_t m_cue_points_size;
void PreloadCuePoint(size_t&, long long);
CuePoint** m_cue_points;
//size_t m_cue_points_size;
size_t m_count;
size_t m_preload_count;
long long m_pos;
};