Tag Parser 12.1.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
Loading...
Searching...
No Matches
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.
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>.
#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