mp4atom.h
Go to the documentation of this file.
/**************************************************************************
copyright : (C) 2007,2011 by Lukáš Lalinský
email : lalinsky@gmail.com
**************************************************************************/
/***************************************************************************
* This library is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License version *
* 2.1 as published by the Free Software Foundation. *
* *
* This library is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA *
* 02110-1301 USA *
* *
* Alternatively, this file is available under the Mozilla Public *
* License Version 1.1. You may obtain a copy of the License at *
* http://www.mozilla.org/MPL/ *
***************************************************************************/
// This file is not part of the public API!
#ifndef TAGLIB_MP4ATOM_H
#define TAGLIB_MP4ATOM_H
#include "tfile.h"
#include "tlist.h"
namespace TagLib {
namespace MP4 {
enum AtomDataType {
TypeImplicit = 0,
TypeUTF8 = 1,
TypeUTF16 = 2,
TypeSJIS = 3,
TypeHTML = 6,
TypeXML = 7,
TypeUUID = 8,
TypeISRC = 9,
TypeMI3P = 10,
TypeGIF = 12,
TypeJPEG = 13,
TypePNG = 14,
TypeURL = 15,
TypeDuration = 16,
TypeDateTime = 17,
TypeGenred = 18,
TypeInteger = 21,
TypeRIAAPA = 24,
TypeUPC = 25,
TypeBMP = 27,
TypeUndefined = 255
};
#ifndef DO_NOT_DOCUMENT
struct AtomData {
AtomData(AtomDataType ptype, const ByteVector &pdata) :
type(ptype), data(pdata) { }
AtomDataType type;
int locale { 0 };
ByteVector data;
};
class Atom;
using AtomList = TagLib::List<Atom *>;
using AtomDataList = TagLib::List<AtomData>;
class TAGLIB_EXPORT Atom
{
public:
Atom(File *file);
~Atom();
Atom(const Atom &) = delete;
Atom &operator=(const Atom &) = delete;
Atom *find(const char *name1, const char *name2 = nullptr, const char *name3 = nullptr, const char *name4 = nullptr);
bool path(AtomList &path, const char *name1, const char *name2 = nullptr, const char *name3 = nullptr);
AtomList findall(const char *name, bool recursive = false) const;
void addToOffset(offset_t delta);
void prependChild(Atom *atom);
bool removeChild(Atom *meta);
offset_t offset() const;
offset_t length() const;
const ByteVector &name() const;
const AtomList &children() const;
protected:
Atom(File *file, int depth);
private:
class AtomPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<AtomPrivate> d;
};
class TAGLIB_EXPORT Atoms
{
public:
Atoms(File *file);
~Atoms();
Atoms(const Atoms &) = delete;
Atoms &operator=(const Atoms &) = delete;
Atom *find(const char *name1, const char *name2 = nullptr, const char *name3 = nullptr, const char *name4 = nullptr) const;
AtomList path(const char *name1, const char *name2 = nullptr, const char *name3 = nullptr, const char *name4 = nullptr) const;
bool checkRootLevelAtoms();
const AtomList &atoms() const;
private:
class AtomsPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
std::unique_ptr<AtomsPrivate> d;
};
#endif // DO_NOT_DOCUMENT
} // namespace MP4
} // namespace TagLib
#endif
TagLib::ByteVector
A byte vector.
Definition tbytevector.h:46
TagLib::MP4
An implementation of MP4 (AAC, ALAC, ...) metadata.
Definition mp4atom.h:35
TagLib::MP4::AtomDataType
AtomDataType
Definition mp4atom.h:37
TagLib::MP4::TypeGenred
@ TypeGenred
A list of enumerated values.
Definition mp4atom.h:69
TagLib::MP4::TypeUUID
@ TypeUUID
Also known as GUID; stored as 16 bytes in binary (valid as an ID).
Definition mp4atom.h:51
TagLib::MP4::TypeBMP
@ TypeBMP
Windows bitmap image.
Definition mp4atom.h:77
TagLib::MP4::TypeMI3P
@ TypeMI3P
Stored as UTF-8 text (valid as an ID).
Definition mp4atom.h:55
TagLib::MP4::TypeImplicit
@ TypeImplicit
For use with tags for which no type needs to be indicated because only one type is allowed.
Definition mp4atom.h:39
TagLib::MP4::TypeXML
@ TypeXML
The XML header must identify the DTD or schemas.
Definition mp4atom.h:49
TagLib::MP4::TypeDuration
@ TypeDuration
In milliseconds, 32-bit integer.
Definition mp4atom.h:65
TagLib::MP4::TypeUndefined
@ TypeUndefined
Undefined.
Definition mp4atom.h:79
TagLib::MP4::TypeISRC
@ TypeISRC
Stored as UTF-8 text (valid as an ID).
Definition mp4atom.h:53
TagLib::MP4::TypeURL
@ TypeURL
Absolute, in UTF-8 characters.
Definition mp4atom.h:63
TagLib::MP4::TypeUPC
@ TypeUPC
Universal Product Code, in text UTF-8 format (valid as an ID).
Definition mp4atom.h:75
TagLib::MP4::TypeSJIS
@ TypeSJIS
Deprecated unless it is needed for special Japanese characters.
Definition mp4atom.h:45
TagLib::MP4::TypeUTF16
@ TypeUTF16
Also known as UTF-16BE.
Definition mp4atom.h:43
TagLib::MP4::TypeUTF8
@ TypeUTF8
Without any count or null terminator.
Definition mp4atom.h:41
TagLib::MP4::TypeInteger
@ TypeInteger
A signed big-endian integer with length one of { 1,2,3,4,8 } bytes.
Definition mp4atom.h:71
TagLib::MP4::TypeRIAAPA
@ TypeRIAAPA
RIAA parental advisory; { -1=no, 1=yes, 0=unspecified }, 8-bit integer.
Definition mp4atom.h:73
TagLib::MP4::TypePNG
@ TypePNG
A PNG image.
Definition mp4atom.h:61
TagLib::MP4::TypeJPEG
@ TypeJPEG
A JPEG image.
Definition mp4atom.h:59
TagLib::MP4::TypeHTML
@ TypeHTML
The HTML file header specifies which HTML version.
Definition mp4atom.h:47
TagLib::MP4::TypeGIF
@ TypeGIF
(Deprecated) A GIF image
Definition mp4atom.h:57
TagLib::MP4::TypeDateTime
@ TypeDateTime
In UTC, counting seconds since midnight, January 1, 1904; 32 or 64-bits.
Definition mp4atom.h:67
TagLib
A namespace for all TagLib related classes and functions.
Definition apefile.h:41
TagLib::offset_t
off_t offset_t
Definition taglib.h:64
TAGLIB_EXPORT
#define TAGLIB_EXPORT
Definition taglib_export.h:40
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
#define TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE
Definition taglib_export.h:55
tfile.h
tlist.h