Tag Parser  8.0.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
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 
9 namespace TagParser {
10 
12 public:
13  constexpr MatroskaOffsetStates(uint64 initialValue);
14  constexpr uint64 currentValue() const;
15  void update(uint64 newValue);
16  constexpr uint64 initialValue() const;
17 
18 private:
19  uint64 m_initialValue;
20  uint64 m_currentValue;
21 };
22 
23 constexpr MatroskaOffsetStates::MatroskaOffsetStates(uint64 initialValue)
24  : m_initialValue(initialValue)
25  , m_currentValue(initialValue)
26 {
27 }
28 
29 constexpr uint64 MatroskaOffsetStates::currentValue() const
30 {
31  return m_currentValue;
32 }
33 
34 inline void MatroskaOffsetStates::update(uint64 newValue)
35 {
36  m_currentValue = newValue;
37 }
38 
39 constexpr uint64 MatroskaOffsetStates::initialValue() const
40 {
41  return m_initialValue;
42 }
43 
45 public:
46  constexpr MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue);
47  constexpr uint64 referenceOffset() const;
48 
49 private:
50  uint64 m_referenceOffset;
51 };
52 
53 constexpr MatroskaReferenceOffsetPair::MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue)
54  : MatroskaOffsetStates(initialValue)
55  , m_referenceOffset(referenceOffset)
56 {
57 }
58 
60 {
61  return m_referenceOffset;
62 }
63 
65 public:
67 
68  EbmlElement *cuesElement() const;
69  uint64 totalSize() const;
70 
71  void parse(EbmlElement *cuesElement, Diagnostics &diag);
72  bool updateOffsets(uint64 originalOffset, uint64 newOffset);
73  bool updateRelativeOffsets(uint64 referenceOffset, uint64 originalRelativeOffset, uint64 newRelativeOffset);
74  void make(std::ostream &stream, Diagnostics &diag);
75  void clear();
76 
77 private:
78  bool updateSize(EbmlElement *element, int shift);
79 
80  EbmlElement *m_cuesElement;
81  std::unordered_map<EbmlElement *, MatroskaOffsetStates> m_offsets;
82  std::unordered_map<EbmlElement *, MatroskaReferenceOffsetPair> m_relativeOffsets;
83  std::unordered_map<EbmlElement *, uint64> m_sizes;
84 };
85 
92  : m_cuesElement(nullptr)
93 {
94 }
95 
102 {
103  return m_cuesElement;
104 }
105 
110 {
111  m_cuesElement = nullptr;
112  m_offsets.clear();
113  m_sizes.clear();
114 }
115 
116 } // namespace TagParser
117 
118 #endif // TAG_PARSER_MATROSKACUES_H
MatroskaCuePositionUpdater()
Creates a new MatroskaCuePositionUpdater.
Definition: matroskacues.h:91
EbmlElement * cuesElement() const
Returns the "Cues"-element specified when calling the parse() method.
Definition: matroskacues.h:101
constexpr MatroskaOffsetStates(uint64 initialValue)
Definition: matroskacues.h:23
void clear()
Resets the object to its initial state.
Definition: matroskacues.h:109
The EbmlElement class helps to parse EBML files such as Matroska files.
Definition: ebmlelement.h:31
The MatroskaCuePositionUpdater class helps to rewrite the "Cues"-element with shifted positions...
Definition: matroskacues.h:64
constexpr uint64 initialValue() const
Definition: matroskacues.h:39
constexpr uint64 referenceOffset() const
Definition: matroskacues.h:59
The MatroskaOffsetStates holds an offset within a Matroska file.
Definition: matroskacues.h:11
The MatroskaReferenceOffsetPair holds an offset within a Matroska file plus the reference offset...
Definition: matroskacues.h:44
void update(uint64 newValue)
Definition: matroskacues.h:34
constexpr MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue)
Definition: matroskacues.h:53
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:9
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
constexpr uint64 currentValue() const
Definition: matroskacues.h:29
The Diagnostics class is a container for DiagMessage.
Definition: diagnostics.h:156