blob: 31a2698212ae0b2b7b29c6df51df2fd8d46c5c5a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#pragma once
#include <bfc/platform/types.h>
#include "mkv_reader.h"
#include <map>
const uint32_t mkv_segment_cues = 0xc53bb6b;
const uint32_t mkv_cues_cuepoint = 0x3b;
const uint32_t mkv_cuepoint_cuetime=0x33;
const uint32_t mkv_cuepoint_cuetrackpositions = 0x37;
const uint32_t mkv_cuetrackpositions_cuetrack= 0x77;
const uint32_t mkv_cuetrackpositions_cueclusterposition=0x71;
namespace nsmkv
{
class CueTrackPosition
{
public:
CueTrackPosition()
#ifdef WA_VALIDATE
:
track_found(false),
cluster_position_found(false)
// block_number_found(false)
#endif
{
track=0;
cluster_position=0;
block_number=0;
}
uint64_t track;
uint64_t cluster_position;
uint64_t block_number;
#ifdef WA_VALIDATE
bool track_found;
bool cluster_position_found;
// bool block_number_found;
#endif
};
class CuePoint
{
public:
CuePoint()
#ifdef WA_VALIDATE
:
cue_time_found(false)
#endif
{
cue_time = 0;
}
CueTrackPosition *GetPosition(uint64_t track);
uint64_t cue_time;
typedef std::map<uint64_t, CueTrackPosition*> CueTrackPositions; // keyed on track number
CueTrackPositions cue_track_positions;
#ifdef WA_VALIDATE
bool cue_time_found;
#endif
};
class Cues
{
public:
enum
{
SEEK_WHATEVER=0,
SEEK_FORWARD=1,
SEEK_BACKWARD=2,
};
CuePoint *GetCuePoint(uint64_t when, uint64_t current_time=0, int seek_direction=SEEK_WHATEVER);
typedef std::map<uint64_t, CuePoint*> CuePoints; // use Map on cue_time to ensure order
CuePoints cue_points;
};
uint64_t ReadCues(MKVReader *reader, uint64_t size, nsmkv::Cues &cues);
}
|