Tag Parser 11.3.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
mp4atom.h
Go to the documentation of this file.
1#ifndef TAG_PARSER_MP4ATOM_H
2#define TAG_PARSER_MP4ATOM_H
3
4#include "./mp4ids.h"
5
6#include "../genericfileelement.h"
7
8#include <c++utilities/conversion/stringconversion.h>
9
10#include <cstdint>
11#include <iostream>
12#include <list>
13#include <memory>
14
15namespace TagParser {
16
17class Mp4Atom;
18class Mp4Container;
19
24public:
26 using IdentifierType = std::uint32_t;
27 using DataSizeType = std::uint64_t;
28
32 static constexpr std::uint8_t minimumElementSize()
33 {
34 return 8;
35 }
36};
37
39 friend class GenericFileElement<Mp4Atom>;
40
41public:
42 Mp4Atom(ContainerType &container, std::uint64_t startOffset);
43
44 std::string idToString() const;
45 bool isParent() const;
46 bool isPadding() const;
47 std::uint64_t firstChildOffset() const;
48
49 static void seekBackAndWriteAtomSize(std::ostream &stream, const std::ostream::pos_type &startOffset, Diagnostics &diag);
50 static void seekBackAndWriteAtomSize64(std::ostream &stream, const std::ostream::pos_type &startOffset);
51 static constexpr void addHeaderSize(std::uint64_t &dataSize);
52 static void makeHeader(std::uint64_t size, std::uint32_t id, CppUtilities::BinaryWriter &writer);
53
54protected:
55 Mp4Atom(ContainerType &container, std::uint64_t startOffset, std::uint64_t maxSize);
56 Mp4Atom(Mp4Atom &parent, std::uint64_t startOffset);
57
58 void internalParse(Diagnostics &diag);
59
60private:
61 std::string parsingContext() const;
62};
63
67inline std::string Mp4Atom::idToString() const
68{
69 auto idString = CppUtilities::interpretIntegerAsString<IdentifierType>(id());
70 for (char &c : idString) {
71 if (c < ' ') {
72 c = '?';
73 }
74 }
75 return idString;
76}
77
81constexpr void Mp4Atom::addHeaderSize(std::uint64_t &dataSize)
82{
83 dataSize += (dataSize < 0xFFFFFFF7 ? 8 : 16);
84}
85
86} // namespace TagParser
87
88#endif // TAG_PARSER_MP4ATOM_H
The Diagnostics class is a container for DiagMessage.
Definition: diagnostics.h:156
Defines traits for the specified ImplementationType.
The GenericFileElement class helps to parse binary files which consist of an arboreal element structu...
DataSizeType dataSize() const
Returns the data size of the element in byte.
The Mp4Atom class helps to parse MP4 files.
Definition: mp4atom.h:38
static constexpr void addHeaderSize(std::uint64_t &dataSize)
Adds the header size to the specified data size.
Definition: mp4atom.h:81
Mp4Atom(ContainerType &container, std::uint64_t startOffset, std::uint64_t maxSize)
std::string idToString() const
Converts the specified atom ID to a printable string.
Definition: mp4atom.h:67
Mp4Atom(ContainerType &container, std::uint64_t startOffset)
Implementation of GenericContainer<MediaFileInfo, Mp4Tag, Mp4Track, Mp4Atom>.
Definition: mp4container.h:18
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10