Tag Parser  9.1.1
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
mpeg4descriptor.h
Go to the documentation of this file.
1 #ifndef TAG_PARSER_MPEG4DESCRIPTOR_H
2 #define TAG_PARSER_MPEG4DESCRIPTOR_H
3 
4 #include "../genericfileelement.h"
5 
6 #include <memory>
7 
8 namespace TagParser {
9 
10 class Mp4Container;
11 class Mpeg4Descriptor;
12 
17 public:
19  using IdentifierType = std::uint8_t;
20  using DataSizeType = std::uint32_t;
21 
25  static constexpr std::uint8_t minimumElementSize()
26  {
27  return 2;
28  }
29 };
30 
31 class TAG_PARSER_EXPORT Mpeg4Descriptor : public GenericFileElement<Mpeg4Descriptor> {
33 
34 public:
35  Mpeg4Descriptor(ContainerType &container, std::uint64_t startOffset, std::uint64_t maxSize);
36 
37  std::string idToString() const;
38  bool isParent() const;
39  bool isPadding() const;
40  std::uint64_t firstChildOffset() const;
41 
42 protected:
43  Mpeg4Descriptor(Mpeg4Descriptor &parent, std::uint64_t startOffset);
44 
45  void internalParse(Diagnostics &diag);
46 
47 private:
48  std::string parsingContext() const;
49 };
50 
56 inline bool Mpeg4Descriptor::isParent() const
57 {
58  return m_firstChild != nullptr;
59 }
60 
64 inline bool Mpeg4Descriptor::isPadding() const
65 {
66  return false;
67 }
68 
74 inline std::uint64_t Mpeg4Descriptor::firstChildOffset() const
75 {
76  return firstChild() ? firstChild()->startOffset() - startOffset() : 0;
77 }
78 
79 } // namespace TagParser
80 
81 #endif // TAG_PARSER_MPEG4DESCRIPTOR_H
TagParser::Mp4Container
Implementation of GenericContainer<MediaFileInfo, Mp4Tag, Mp4Track, Mp4Atom>.
Definition: mp4container.h:18
TagParser::GenericFileElement::startOffset
std::uint64_t startOffset() const
Returns the start offset in the related stream.
Definition: genericfileelement.h:261
TagParser::FileElementTraits
Defines traits for the specified ImplementationType.
Definition: genericfileelement.h:34
TagParser::Diagnostics
The Diagnostics class is a container for DiagMessage.
Definition: diagnostics.h:156
TagParser
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10
TagParser::FileElementTraits< Mpeg4Descriptor >::DataSizeType
std::uint32_t DataSizeType
Definition: mpeg4descriptor.h:20
TagParser::Mpeg4Descriptor
The Mpeg4Descriptor class helps to parse MPEG-4 descriptors.
Definition: mpeg4descriptor.h:31
TagParser::GenericFileElement::firstChild
ImplementationType * firstChild()
Returns the first child of the element.
Definition: genericfileelement.h:460
TagParser::GenericFileElement
The GenericFileElement class helps to parse binary files which consist of an arboreal element strucut...
Definition: genericfileelement.h:45
TagParser::Mpeg4Descriptor::firstChildOffset
std::uint64_t firstChildOffset() const
Returns the offset of the first child (relative to the start offset of this descriptor).
Definition: mpeg4descriptor.h:74
TagParser::FileElementTraits< Mpeg4Descriptor >::minimumElementSize
static constexpr std::uint8_t minimumElementSize()
Returns the minimal descriptor size which is 2 byte.
Definition: mpeg4descriptor.h:25
TagParser::Mpeg4Descriptor::isParent
bool isParent() const
Returns an indication whether the descriptor contains sub descriptors.
Definition: mpeg4descriptor.h:56
TagParser::GenericFileElement::ContainerType
typename FileElementTraits< ImplementationType >::ContainerType ContainerType
Specifies the type of the corresponding container.
Definition: genericfileelement.h:52
TAG_PARSER_EXPORT
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
TagParser::Mpeg4Descriptor::isPadding
bool isPadding() const
Returns always false for MPEG-4 descriptors.
Definition: mpeg4descriptor.h:64
TagParser::FileElementTraits< Mpeg4Descriptor >::IdentifierType
std::uint8_t IdentifierType
Definition: mpeg4descriptor.h:19
TagParser::GenericFileElement::m_firstChild
std::unique_ptr< ImplementationType > m_firstChild
Definition: genericfileelement.h:139