Tag Parser 12.5.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
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
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
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
void clear()
Clears the status of the element.
std::uint64_t totalSize() const
Returns how many bytes will be written when calling the make() method.
bool updateOffsets(std::uint64_t originalOffset, std::uint64_t newOffset)
Sets the offset of the entries with the specified originalOffset to newOffset.
bool updateRelativeOffsets(std::uint64_t referenceOffset, std::uint64_t originalRelativeOffset, std::uint64_t newRelativeOffset)
Sets the relative offset of the entries with the specified originalRelativeOffset and the specified r...
void clear()
Resets the object to its initial state.
MatroskaCuePositionUpdater()
Creates a new MatroskaCuePositionUpdater.
void make(std::ostream &stream, Diagnostics &diag)
Writes the previously parsed "Cues"-element with updated positions to the specified stream.
void parse(EbmlElement *cuesElement, Diagnostics &diag)
Parses the specified cuesElement.
EbmlElement * cuesElement() const
Returns the "Cues"-element specified when calling the parse() method.
void update(std::uint64_t newValue)
constexpr std::uint64_t currentValue() const
constexpr std::uint64_t initialValue() const
constexpr MatroskaOffsetStates(std::uint64_t initialValue)
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:14
Contains all classes and functions of the TagInfo library.
Definition aaccodebook.h:10