Tag Parser 12.1.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
Loading...
Searching...
No Matches
matroskacues.h
Go to the documentation of this file.
1#ifndef TAG_PARSER_MATROSKACUES_H
2#define TAG_PARSER_MATROSKACUES_H
3
4#include "./ebmlelement.h"
5
6#include <ostream>
7#include <unordered_map>
8
9namespace TagParser {
10
12public:
13 constexpr MatroskaOffsetStates(std::uint64_t initialValue);
14 constexpr std::uint64_t currentValue() const;
15 void update(std::uint64_t newValue);
16 constexpr std::uint64_t initialValue() const;
17
18private:
19 std::uint64_t m_initialValue;
20 std::uint64_t m_currentValue;
21};
22
23constexpr MatroskaOffsetStates::MatroskaOffsetStates(std::uint64_t initialValue)
24 : m_initialValue(initialValue)
25 , m_currentValue(initialValue)
26{
27}
28
29constexpr std::uint64_t MatroskaOffsetStates::currentValue() const
30{
31 return m_currentValue;
32}
33
34inline void MatroskaOffsetStates::update(std::uint64_t newValue)
35{
36 m_currentValue = newValue;
37}
38
39constexpr std::uint64_t MatroskaOffsetStates::initialValue() const
40{
41 return m_initialValue;
42}
43
45public:
46 constexpr MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue);
47 constexpr std::uint64_t referenceOffset() const;
48
49private:
50 std::uint64_t m_referenceOffset;
51};
52
53constexpr MatroskaReferenceOffsetPair::MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue)
54 : MatroskaOffsetStates(initialValue)
55 , m_referenceOffset(referenceOffset)
56{
57}
58
59constexpr std::uint64_t MatroskaReferenceOffsetPair::referenceOffset() const
60{
61 return m_referenceOffset;
62}
63
65public:
67
68 EbmlElement *cuesElement() const;
69 std::uint64_t totalSize() const;
70
71 void parse(EbmlElement *cuesElement, Diagnostics &diag);
72 bool updateOffsets(std::uint64_t originalOffset, std::uint64_t newOffset);
73 bool updateRelativeOffsets(std::uint64_t referenceOffset, std::uint64_t originalRelativeOffset, std::uint64_t newRelativeOffset);
74 void make(std::ostream &stream, Diagnostics &diag);
75 void clear();
76
77private:
78 struct PairHash {
79 template <class T1, class T2> inline std::size_t operator()(const std::pair<T1, T2> &pair) const
80 {
81 std::size_t seed = 0;
82 seed ^= std::hash<T1>()(pair.first) + 0x9e3779b9;
83 seed ^= std::hash<T2>()(pair.second) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
84 return seed;
85 }
86 };
87
88 bool updateSize(EbmlElement *element, int shift);
89
90 EbmlElement *m_cuesElement;
91 std::unordered_map<EbmlElement *, MatroskaOffsetStates> m_offsets;
92 std::unordered_multimap<std::uint64_t, EbmlElement *> m_cueElementByOriginalOffset;
93 std::unordered_map<EbmlElement *, MatroskaReferenceOffsetPair> m_relativeOffsets;
94 std::unordered_multimap<std::pair<std::uint64_t, std::uint64_t>, EbmlElement *, PairHash> m_cueRelativePositionElementByOriginalOffsets;
95 std::unordered_map<EbmlElement *, std::uint64_t> m_sizes;
96};
97
104 : m_cuesElement(nullptr)
105{
106}
107
114{
115 return m_cuesElement;
116}
117
122{
123 m_cuesElement = nullptr;
124 m_offsets.clear();
125 m_sizes.clear();
126}
127
128} // namespace TagParser
129
130#endif // TAG_PARSER_MATROSKACUES_H
The Diagnostics class is a container for DiagMessage.
The EbmlElement class helps to parse EBML files such as Matroska files.
Definition ebmlelement.h:32
The MatroskaCuePositionUpdater class helps to rewrite the "Cues"-element with shifted positions.
void clear()
Resets the object to its initial state.
MatroskaCuePositionUpdater()
Creates a new MatroskaCuePositionUpdater.
EbmlElement * cuesElement() const
Returns the "Cues"-element specified when calling the parse() method.
The MatroskaOffsetStates holds an offset within a Matroska file.
void update(std::uint64_t newValue)
constexpr std::uint64_t currentValue() const
constexpr std::uint64_t initialValue() const
constexpr MatroskaOffsetStates(std::uint64_t initialValue)
The MatroskaReferenceOffsetPair holds an offset within a Matroska file plus the reference offset.
constexpr std::uint64_t referenceOffset() const
constexpr MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue)
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
Definition global.h:13
Contains all classes and functions of the TagInfo library.
Definition aaccodebook.h:10