Tag Parser 12.4.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
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
38class TAG_PARSER_EXPORT Mp4Atom : public GenericFileElement<Mp4Atom> {
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 Mp4Atom class helps to parse MP4 files.
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:14
Contains all classes and functions of the TagInfo library.
Definition aaccodebook.h:10