mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-28 23:06:07 +00:00
77 lines
1.5 KiB
C++
77 lines
1.5 KiB
C++
#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);
|
|
}
|