Fix decoration for static builds

This commit is contained in:
Martchus 2016-08-29 15:43:05 +02:00
parent 0541c08864
commit 0cf30edbff
69 changed files with 1402 additions and 1368 deletions

View File

@ -13,7 +13,7 @@ namespace Media {
class MediaFileInfo;
class LIB_EXPORT StreamDataBlock
class TAG_PARSER_EXPORT StreamDataBlock
{
public:
StreamDataBlock(const std::function<std::istream & ()> &stream,
@ -88,7 +88,7 @@ inline void StreamDataBlock::discardBuffer()
m_buffer.reset();
}
class LIB_EXPORT FileDataBlock : public StreamDataBlock
class TAG_PARSER_EXPORT FileDataBlock : public StreamDataBlock
{
public:
FileDataBlock(const std::string &path);
@ -103,7 +103,7 @@ inline const MediaFileInfo *FileDataBlock::fileInfo() const
return m_fileInfo.get();
}
class LIB_EXPORT AbstractAttachment : public StatusProvider
class TAG_PARSER_EXPORT AbstractAttachment : public StatusProvider
{
public:
const std::string &description() const;

View File

@ -11,7 +11,7 @@
namespace Media {
class LIB_EXPORT AbstractChapter : public StatusProvider
class TAG_PARSER_EXPORT AbstractChapter : public StatusProvider
{
public:
virtual ~AbstractChapter();

View File

@ -26,7 +26,7 @@ class AbstractTrack;
class AbstractChapter;
class AbstractAttachment;
class LIB_EXPORT AbstractContainer : public StatusProvider
class TAG_PARSER_EXPORT AbstractContainer : public StatusProvider
{
public:
virtual ~AbstractContainer();

View File

@ -37,7 +37,7 @@ enum class TrackType
FlacStream, /**< The track is a Media::FlacStream. */
};
class LIB_EXPORT AbstractTrack : public StatusProvider
class TAG_PARSER_EXPORT AbstractTrack : public StatusProvider
{
friend class MpegAudioFrameStream;
friend class WaveAudioStream;

View File

@ -1,8 +1,9 @@
#ifndef MEDIA_ADTSFRAME_H
#define MEDIA_ADTSFRAME_H
#include "../global.h"
#include <c++utilities/conversion/types.h>
#include <c++utilities/application/global.h>
namespace IoUtilities {
class BinaryReader;
@ -10,7 +11,7 @@ class BinaryReader;
namespace Media {
class LIB_EXPORT AdtsFrame
class TAG_PARSER_EXPORT AdtsFrame
{
public:
AdtsFrame();

View File

@ -7,7 +7,7 @@
namespace Media {
class LIB_EXPORT AdtsStream : public AbstractTrack
class TAG_PARSER_EXPORT AdtsStream : public AbstractTrack
{
public:
AdtsStream(std::iostream &stream, uint64 startOffset);

View File

@ -1,12 +1,13 @@
#ifndef MEDIA_ASPECTRATIO_H
#define MEDIA_ASPECTRATIO_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <c++utilities/conversion/types.h>
namespace Media {
struct LIB_EXPORT AspectRatio {
struct TAG_PARSER_EXPORT AspectRatio {
AspectRatio();
AspectRatio(byte aspectRatioType);
AspectRatio(uint16 numerator, uint16 denominator);

View File

@ -9,7 +9,7 @@ namespace Media {
class MediaFormat;
struct LIB_EXPORT AvcConfiguration
struct TAG_PARSER_EXPORT AvcConfiguration
{
AvcConfiguration();
byte profileIndication;

View File

@ -22,7 +22,7 @@ typedef uint32 ugolomb;
*/
typedef int32 sgolomb;
struct LIB_EXPORT TimingInfo {
struct TAG_PARSER_EXPORT TimingInfo {
TimingInfo();
uint32 unitsInTick;
uint32 timeScale;
@ -43,7 +43,7 @@ inline int64 TimingInfo::defaultDuration() const
return 1000000000ll * unitsInTick / timeScale;
}
struct LIB_EXPORT HrdParameters {
struct TAG_PARSER_EXPORT HrdParameters {
HrdParameters();
ugolomb cpbCount;
byte bitRateScale;
@ -66,7 +66,7 @@ inline HrdParameters::HrdParameters() :
timeOffsetLength(0)
{}
struct LIB_EXPORT SpsInfo {
struct TAG_PARSER_EXPORT SpsInfo {
SpsInfo();
ugolomb id;
byte profileIndication;
@ -115,7 +115,7 @@ inline SpsInfo::SpsInfo() :
size(0)
{}
struct LIB_EXPORT PpsInfo {
struct TAG_PARSER_EXPORT PpsInfo {
PpsInfo();
ugolomb id;
ugolomb spsId;
@ -132,7 +132,7 @@ inline PpsInfo::PpsInfo() :
size(0)
{}
struct LIB_EXPORT SliceInfo {
struct TAG_PARSER_EXPORT SliceInfo {
SliceInfo();
byte naluType;
byte naluRefIdc;
@ -167,7 +167,7 @@ inline SliceInfo::SliceInfo() :
pps(0)
{}
class LIB_EXPORT AvcFrame {
class TAG_PARSER_EXPORT AvcFrame {
AvcFrame();
private:

View File

@ -1,7 +1,8 @@
#ifndef MEDIA_BITMAPINFOHEADER_H
#define MEDIA_BITMAPINFOHEADER_H
#include <c++utilities/application/global.h>
#include "../global.h"
#include <c++utilities/conversion/types.h>
namespace IoUtilities {
@ -10,7 +11,7 @@ class BinaryReader;
namespace Media {
class LIB_EXPORT BitmapInfoHeader
class TAG_PARSER_EXPORT BitmapInfoHeader
{
public:
BitmapInfoHeader();

View File

@ -1,7 +1,7 @@
#ifndef BACKUPHELPER_H
#define BACKUPHELPER_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <string>
#include <fstream>
@ -12,10 +12,10 @@ class MediaFileInfo;
namespace BackupHelper {
LIB_EXPORT std::string &backupDirectory();
LIB_EXPORT void restoreOriginalFileFromBackupFile(const std::string &originalPath, const std::string &backupPath, std::fstream &originalStream, std::fstream &backupStream);
LIB_EXPORT void createBackupFile(const std::string &originalPath, std::string &backupPath, std::fstream &originalStream, std::fstream &backupStream);
LIB_EXPORT void handleFailureAfterFileModified(MediaFileInfo &mediaFileInfo, const std::string &backupPath, std::fstream &outputStream, std::fstream &backupStream, const std::string &context = "making file");
TAG_PARSER_EXPORT std::string &backupDirectory();
TAG_PARSER_EXPORT void restoreOriginalFileFromBackupFile(const std::string &originalPath, const std::string &backupPath, std::fstream &originalStream, std::fstream &backupStream);
TAG_PARSER_EXPORT void createBackupFile(const std::string &originalPath, std::string &backupPath, std::fstream &originalStream, std::fstream &backupStream);
TAG_PARSER_EXPORT void handleFailureAfterFileModified(MediaFileInfo &mediaFileInfo, const std::string &backupPath, std::fstream &outputStream, std::fstream &backupStream, const std::string &context = "making file");
}

View File

@ -1,7 +1,8 @@
#ifndef BASICFILEINFO_H
#define BASICFILEINFO_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <c++utilities/conversion/types.h>
#include <string>
@ -9,7 +10,7 @@
namespace Media {
class LIB_EXPORT BasicFileInfo
class TAG_PARSER_EXPORT BasicFileInfo
{
public:
// constructor, destructor

View File

@ -1,7 +1,7 @@
#ifndef CASEINSENSITIVECOMPARER
#define CASEINSENSITIVECOMPARER
#include <c++utilities/application/global.h>
#include "./global.h"
#include <string>
@ -12,7 +12,7 @@ namespace Media {
/*!
* \brief The CaseInsensitiveCharComparer struct defines a method for case-insensivive character comparsion (less).
*/
struct LIB_EXPORT CaseInsensitiveCharComparer
struct TAG_PARSER_EXPORT CaseInsensitiveCharComparer
{
static constexpr unsigned char toLower(const unsigned char c)
{
@ -28,7 +28,7 @@ struct LIB_EXPORT CaseInsensitiveCharComparer
/*!
* \brief The CaseInsensitiveStringComparer struct defines a method for case-insensivive string comparsion (less).
*/
struct LIB_EXPORT CaseInsensitiveStringComparer
struct TAG_PARSER_EXPORT CaseInsensitiveStringComparer
{
bool operator()(const std::string &lhs, const std::string &rhs) const
{

View File

@ -1,14 +1,14 @@
#ifndef MEDIA_EXCEPTIONS_H
#define MEDIA_EXCEPTIONS_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <stdexcept>
#include <string>
namespace Media {
class LIB_EXPORT Failure : public std::exception
class TAG_PARSER_EXPORT Failure : public std::exception
{
public:
Failure() USE_NOTHROW;
@ -16,7 +16,7 @@ public:
virtual const char *what() const USE_NOTHROW;
};
class LIB_EXPORT NoDataFoundException : public Failure
class TAG_PARSER_EXPORT NoDataFoundException : public Failure
{
public:
NoDataFoundException() USE_NOTHROW;
@ -24,7 +24,7 @@ public:
virtual const char *what() const USE_NOTHROW;
};
class LIB_EXPORT InvalidDataException : public Failure
class TAG_PARSER_EXPORT InvalidDataException : public Failure
{
public:
InvalidDataException() USE_NOTHROW;
@ -32,7 +32,7 @@ public:
virtual const char *what() const USE_NOTHROW;
};
class LIB_EXPORT TruncatedDataException : public InvalidDataException
class TAG_PARSER_EXPORT TruncatedDataException : public InvalidDataException
{
public:
TruncatedDataException() USE_NOTHROW;
@ -40,7 +40,7 @@ public:
virtual const char *what() const USE_NOTHROW;
};
class LIB_EXPORT OperationAbortedException : public Failure
class TAG_PARSER_EXPORT OperationAbortedException : public Failure
{
public:
OperationAbortedException() USE_NOTHROW;
@ -48,7 +48,7 @@ public:
virtual const char *what() const USE_NOTHROW;
};
class LIB_EXPORT VersionNotSupportedException : public Failure
class TAG_PARSER_EXPORT VersionNotSupportedException : public Failure
{
public:
VersionNotSupportedException() USE_NOTHROW;
@ -56,7 +56,7 @@ public:
virtual const char *what() const USE_NOTHROW;
};
class LIB_EXPORT NotImplementedException : public Failure
class TAG_PARSER_EXPORT NotImplementedException : public Failure
{
public:
NotImplementedException() USE_NOTHROW;

View File

@ -1,7 +1,8 @@
#ifndef MEDIA_FLACMETADATAHEADER_H
#define MEDIA_FLACMETADATAHEADER_H
#include <c++utilities/application/global.h>
#include "../global.h"
#include <c++utilities/conversion/types.h>
#include <iostream>
@ -34,7 +35,7 @@ constexpr bool operator !=(byte lhs, FlacMetaDataBlockType type)
return lhs != static_cast<byte>(type);
}
class LIB_EXPORT FlacMetaDataBlockHeader
class TAG_PARSER_EXPORT FlacMetaDataBlockHeader
{
public:
FlacMetaDataBlockHeader();
@ -115,7 +116,7 @@ inline void FlacMetaDataBlockHeader::setDataSize(uint32 dataSize)
m_dataSize = dataSize;
}
class LIB_EXPORT FlacMetaDataBlockStreamInfo
class TAG_PARSER_EXPORT FlacMetaDataBlockStreamInfo
{
public:
FlacMetaDataBlockStreamInfo();
@ -254,7 +255,7 @@ inline const char *FlacMetaDataBlockStreamInfo::md5Sum() const
return m_md5Sum;
}
class LIB_EXPORT FlacMetaDataBlockPicture
class TAG_PARSER_EXPORT FlacMetaDataBlockPicture
{
public:
FlacMetaDataBlockPicture(TagValue &tagValue);

View File

@ -12,7 +12,7 @@ namespace Media {
class MediaFileInfo;
class VorbisComment;
class LIB_EXPORT FlacStream : public AbstractTrack
class TAG_PARSER_EXPORT FlacStream : public AbstractTrack
{
public:
FlacStream(MediaFileInfo &mediaFileInfo, uint64 startOffset);

View File

@ -7,7 +7,7 @@ namespace Media {
class OggIterator;
class LIB_EXPORT FlacToOggMappingHeader
class TAG_PARSER_EXPORT FlacToOggMappingHeader
{
public:
FlacToOggMappingHeader();

View File

@ -22,7 +22,7 @@ namespace Media {
* \tparam ElementType Specifies the class which is used to deal with the elements the file consists of.
*/
template <class FileInfoType, class TagType, class TrackType, class ElementType>
class LIB_EXPORT GenericContainer : public AbstractContainer
class TAG_PARSER_EXPORT GenericContainer : public AbstractContainer
{
friend FileInfoType;

View File

@ -114,7 +114,7 @@ class FileElementTraits
* \tparam ImplementationType Specifies the type of the actual implementation.
*/
template <class ImplementationType>
class LIB_EXPORT GenericFileElement : public StatusProvider
class TAG_PARSER_EXPORT GenericFileElement : public StatusProvider
{
friend class FileElementTraits<ImplementationType>;

View File

@ -29,7 +29,7 @@ class TagFieldTraits
* with the "Curiously recurring template pattern".
*/
template <class ImplementationType>
class LIB_EXPORT TagField
class TAG_PARSER_EXPORT TagField
{
public:
friend class TagFieldTraits<ImplementationType>;

17
global.h Normal file
View File

@ -0,0 +1,17 @@
// Created via CMake from template global.h.in
// WARNING! Any changes to this file will be overwritten by the next CMake run!
#ifndef TAG_PARSER_GLOBAL
#define TAG_PARSER_GLOBAL
#include <c++utilities/application/global.h>
#ifdef TAG_PARSER_STATIC
# define TAG_PARSER_EXPORT
# define TAG_PARSER_IMPORT
#else
# define TAG_PARSER_EXPORT LIB_EXPORT
# define TAG_PARSER_IMPORT LIB_IMPORT
#endif
#endif // TAG_PARSER_GLOBAL

View File

@ -1,7 +1,8 @@
#ifndef ID3GENRES_H
#define ID3GENRES_H
#include <c++utilities/application/global.h>
#include "../global.h"
#include <c++utilities/conversion/types.h>
#include <string>
@ -9,7 +10,7 @@
namespace Media
{
class LIB_EXPORT Id3Genres
class TAG_PARSER_EXPORT Id3Genres
{
public:
static const char *stringFromIndex(int index);

View File

@ -6,7 +6,7 @@
namespace Media
{
class LIB_EXPORT Id3v1Tag : public Tag
class TAG_PARSER_EXPORT Id3v1Tag : public Tag
{
public:
Id3v1Tag();

View File

@ -20,7 +20,7 @@ namespace Media
class Id3v2Frame;
class LIB_EXPORT Id3v2FrameMaker
class TAG_PARSER_EXPORT Id3v2FrameMaker
{
friend class Id3v2Frame;
@ -78,7 +78,7 @@ inline uint32 Id3v2FrameMaker::requiredSize() const
* \brief Defines traits for the TagField implementation of the Id3v2Frame class.
*/
template <>
class LIB_EXPORT TagFieldTraits<Id3v2Frame>
class TAG_PARSER_EXPORT TagFieldTraits<Id3v2Frame>
{
public:
/*!
@ -97,7 +97,7 @@ public:
typedef Id3v2Frame implementationType;
};
class LIB_EXPORT Id3v2Frame : public TagField<Id3v2Frame>, public StatusProvider
class TAG_PARSER_EXPORT Id3v2Frame : public TagField<Id3v2Frame>, public StatusProvider
{
friend class TagField<Id3v2Frame>;

View File

@ -12,12 +12,12 @@ namespace Media
class Id3v2Tag;
struct LIB_EXPORT FrameComparer
struct TAG_PARSER_EXPORT FrameComparer
{
bool operator()(const uint32 &lhs, const uint32 &rhs) const;
};
class LIB_EXPORT Id3v2TagMaker
class TAG_PARSER_EXPORT Id3v2TagMaker
{
friend class Id3v2Tag;
@ -52,7 +52,7 @@ inline uint64 Id3v2TagMaker::requiredSize() const
return m_requiredSize;
}
class LIB_EXPORT Id3v2Tag : public FieldMapBasedTag<Id3v2Frame, FrameComparer>
class TAG_PARSER_EXPORT Id3v2Tag : public FieldMapBasedTag<Id3v2Frame, FrameComparer>
{
public:
Id3v2Tag();

View File

@ -1,7 +1,7 @@
#ifndef MEDIA_LOCALEAWARESTRING_H
#define MEDIA_LOCALEAWARESTRING_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <string>
#include <vector>
@ -11,7 +11,7 @@ namespace Media {
/*!
* \brief The LocaleAwareString class is a standard string with locale information (languages, countries).
*/
class LIB_EXPORT LocaleAwareString : public std::string
class TAG_PARSER_EXPORT LocaleAwareString : public std::string
{
public:
LocaleAwareString(const std::string &value = std::string());

View File

@ -1,7 +1,8 @@
#ifndef MARGIN_H
#define MARGIN_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <c++utilities/conversion/types.h>
#include <string>
@ -12,7 +13,7 @@ namespace Media {
/*!
* \brief The Margin class defines the four margins of a rectangle.
*/
class LIB_EXPORT Margin
class TAG_PARSER_EXPORT Margin
{
public:
constexpr Margin(uint32 top = 0, uint32 left = 0, uint32 bottom = 0, uint32 right = 0);

View File

@ -23,7 +23,7 @@ class MatroskaContainer;
* \brief Defines traits for the GenericFileElement implementation EbmlElement.
*/
template <>
class LIB_EXPORT FileElementTraits<EbmlElement>
class TAG_PARSER_EXPORT FileElementTraits<EbmlElement>
{
public:
/*!
@ -47,7 +47,7 @@ public:
typedef EbmlElement implementationType;
};
class LIB_EXPORT EbmlElement : public GenericFileElement<EbmlElement>
class TAG_PARSER_EXPORT EbmlElement : public GenericFileElement<EbmlElement>
{
friend class GenericFileElement<EbmlElement>;

View File

@ -8,7 +8,7 @@ namespace Media {
class EbmlElement;
class MatroskaAttachment;
class LIB_EXPORT MatroskaAttachmentMaker
class TAG_PARSER_EXPORT MatroskaAttachmentMaker
{
friend class MatroskaAttachment;
@ -42,7 +42,7 @@ inline uint64 MatroskaAttachmentMaker::requiredSize() const
return m_totalSize;
}
class LIB_EXPORT MatroskaAttachment : public AbstractAttachment
class TAG_PARSER_EXPORT MatroskaAttachment : public AbstractAttachment
{
public:
MatroskaAttachment();

View File

@ -9,7 +9,7 @@ namespace Media {
class EbmlElement;
class LIB_EXPORT MatroskaChapter : public AbstractChapter
class TAG_PARSER_EXPORT MatroskaChapter : public AbstractChapter
{
public:
MatroskaChapter(EbmlElement *chapterAtomElement);

View File

@ -22,7 +22,7 @@ class MatroskaEditionEntry;
class MediaFileInfo;
class LIB_EXPORT MatroskaContainer : public GenericContainer<MediaFileInfo, MatroskaTag, MatroskaTrack, EbmlElement>
class TAG_PARSER_EXPORT MatroskaContainer : public GenericContainer<MediaFileInfo, MatroskaTag, MatroskaTrack, EbmlElement>
{
public:
MatroskaContainer(MediaFileInfo &stream, uint64 startOffset);

View File

@ -8,7 +8,7 @@
namespace Media {
class LIB_EXPORT MatroskaOffsetStates
class TAG_PARSER_EXPORT MatroskaOffsetStates
{
public:
MatroskaOffsetStates(uint64 initialValue);
@ -40,7 +40,7 @@ inline uint64 MatroskaOffsetStates::initialValue() const
return m_initialValue;
}
class LIB_EXPORT MatroskaReferenceOffsetPair : public MatroskaOffsetStates
class TAG_PARSER_EXPORT MatroskaReferenceOffsetPair : public MatroskaOffsetStates
{
public:
MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue);
@ -59,7 +59,7 @@ inline uint64 MatroskaReferenceOffsetPair::referenceOffset() const
return m_referenceOffset;
}
class LIB_EXPORT MatroskaCuePositionUpdater : public StatusProvider
class TAG_PARSER_EXPORT MatroskaCuePositionUpdater : public StatusProvider
{
public:
MatroskaCuePositionUpdater();

View File

@ -7,7 +7,7 @@ namespace Media {
class EbmlElement;
class LIB_EXPORT MatroskaEditionEntry : public StatusProvider
class TAG_PARSER_EXPORT MatroskaEditionEntry : public StatusProvider
{
public:
MatroskaEditionEntry(EbmlElement *editionEntryElement);

View File

@ -1,7 +1,8 @@
#ifndef MATROSKAIDS_H
#define MATROSKAIDS_H
#include <c++utilities/application/global.h>
#include "../global.h"
#include <c++utilities/conversion/types.h>
namespace Media {
@ -488,7 +489,7 @@ enum KnownValues {
}
LIB_EXPORT const char *matroskaIdName(uint32 matroskaId);
TAG_PARSER_EXPORT const char *matroskaIdName(uint32 matroskaId);
}

View File

@ -9,7 +9,7 @@
namespace Media {
class LIB_EXPORT MatroskaSeekInfo : public StatusProvider
class TAG_PARSER_EXPORT MatroskaSeekInfo : public StatusProvider
{
public:
MatroskaSeekInfo();

View File

@ -11,7 +11,7 @@ namespace Media {
class EbmlElement;
class MatroskaTag;
class LIB_EXPORT MatroskaTagMaker
class TAG_PARSER_EXPORT MatroskaTagMaker
{
friend class MatroskaTag;
@ -47,7 +47,7 @@ inline uint64 MatroskaTagMaker::requiredSize() const
return m_totalSize;
}
class LIB_EXPORT MatroskaTag : public FieldMapBasedTag<MatroskaTagField>
class TAG_PARSER_EXPORT MatroskaTag : public FieldMapBasedTag<MatroskaTagField>
{
public:
MatroskaTag();

View File

@ -13,7 +13,7 @@ class MatroskaTagField;
* \brief Defines traits for the TagField implementation of the MatroskaTagField class.
*/
template <>
class LIB_EXPORT TagFieldTraits<MatroskaTagField>
class TAG_PARSER_EXPORT TagFieldTraits<MatroskaTagField>
{
public:
/*!
@ -42,7 +42,7 @@ inline bool TagFieldTraits<MatroskaTagField>::supportsNestedFields()
return true;
}
class LIB_EXPORT MatroskaTagFieldMaker
class TAG_PARSER_EXPORT MatroskaTagFieldMaker
{
friend class MatroskaTagField;
@ -80,7 +80,7 @@ inline uint64 MatroskaTagFieldMaker::requiredSize() const
class LIB_EXPORT MatroskaTagField : public TagField<MatroskaTagField>, public StatusProvider
class TAG_PARSER_EXPORT MatroskaTagField : public TagField<MatroskaTagField>, public StatusProvider
{
friend class TagField<MatroskaTagField>;

View File

@ -10,327 +10,327 @@ namespace Media {
*/
namespace MatroskaTagIds {
inline LIB_EXPORT const char *original() {
inline TAG_PARSER_EXPORT const char *original() {
return "ORIGINAL";
}
inline LIB_EXPORT const char *sample() {
inline TAG_PARSER_EXPORT const char *sample() {
return "SAMPLE";
}
inline LIB_EXPORT const char *country() {
inline TAG_PARSER_EXPORT const char *country() {
return "COUNTRY";
}
inline LIB_EXPORT const char *totalParts() {
inline TAG_PARSER_EXPORT const char *totalParts() {
return "TOTAL_PARTS";
}
inline LIB_EXPORT const char *partNumber() {
inline TAG_PARSER_EXPORT const char *partNumber() {
return "PART_NUMBER";
}
inline LIB_EXPORT const char *partOffset() {
inline TAG_PARSER_EXPORT const char *partOffset() {
return "PART_OFFSET";
}
inline LIB_EXPORT const char *title() {
inline TAG_PARSER_EXPORT const char *title() {
return "TITLE";
}
inline LIB_EXPORT const char *subtitle() {
inline TAG_PARSER_EXPORT const char *subtitle() {
return "SUBTITLE";
}
inline LIB_EXPORT const char *url() {
inline TAG_PARSER_EXPORT const char *url() {
return "URL";
}
inline LIB_EXPORT const char *sortWith() {
inline TAG_PARSER_EXPORT const char *sortWith() {
return "SORT_WITH";
}
inline LIB_EXPORT const char *instruments() {
inline TAG_PARSER_EXPORT const char *instruments() {
return "INSTRUMENTS";
}
inline LIB_EXPORT const char *email() {
inline TAG_PARSER_EXPORT const char *email() {
return "EMAIL";
}
inline LIB_EXPORT const char *address() {
inline TAG_PARSER_EXPORT const char *address() {
return "ADDRESS";
}
inline LIB_EXPORT const char *fax() {
inline TAG_PARSER_EXPORT const char *fax() {
return "FAX";
}
inline LIB_EXPORT const char *phone() {
inline TAG_PARSER_EXPORT const char *phone() {
return "PHONE";
}
inline LIB_EXPORT const char *artist() {
inline TAG_PARSER_EXPORT const char *artist() {
return "ARTIST";
}
inline LIB_EXPORT const char *album() {
inline TAG_PARSER_EXPORT const char *album() {
return "ALBUM";
}
inline LIB_EXPORT const char *leadPerformer() {
inline TAG_PARSER_EXPORT const char *leadPerformer() {
return "LEAD_PERFORMER";
}
inline LIB_EXPORT const char *accompaniment() {
inline TAG_PARSER_EXPORT const char *accompaniment() {
return "ACCOMPANIMENT";
}
inline LIB_EXPORT const char *composer() {
inline TAG_PARSER_EXPORT const char *composer() {
return "COMPOSER";
}
inline LIB_EXPORT const char *arranger() {
inline TAG_PARSER_EXPORT const char *arranger() {
return "ARRANGER";
}
inline LIB_EXPORT const char *lyrics() {
inline TAG_PARSER_EXPORT const char *lyrics() {
return "LYRICS";
}
inline LIB_EXPORT const char *lyricist() {
inline TAG_PARSER_EXPORT const char *lyricist() {
return "LYRICIST";
}
inline LIB_EXPORT const char *conductor() {
inline TAG_PARSER_EXPORT const char *conductor() {
return "CONDUCTOR";
}
inline LIB_EXPORT const char *director() {
inline TAG_PARSER_EXPORT const char *director() {
return "DIRECTOR";
}
inline LIB_EXPORT const char *assistantDirector() {
inline TAG_PARSER_EXPORT const char *assistantDirector() {
return "ASSISTANT_DIRECTOR";
}
inline LIB_EXPORT const char *directorOfPhotography() {
inline TAG_PARSER_EXPORT const char *directorOfPhotography() {
return "DIRECTOR_OF_PHOTOGRAPHY";
}
inline LIB_EXPORT const char *soundEngineer() {
inline TAG_PARSER_EXPORT const char *soundEngineer() {
return "SOUND_ENGINEER";
}
inline LIB_EXPORT const char *artDirector() {
inline TAG_PARSER_EXPORT const char *artDirector() {
return "ART_DIRECTOR";
}
inline LIB_EXPORT const char *productionDesigner() {
inline TAG_PARSER_EXPORT const char *productionDesigner() {
return "PRODUCTION_DESIGNER";
}
inline LIB_EXPORT const char *choregrapher() {
inline TAG_PARSER_EXPORT const char *choregrapher() {
return "CHOREGRAPHER";
}
inline LIB_EXPORT const char *costumeDesigner() {
inline TAG_PARSER_EXPORT const char *costumeDesigner() {
return "COSTUME_DESIGNER";
}
inline LIB_EXPORT const char *actor() {
inline TAG_PARSER_EXPORT const char *actor() {
return "ACTOR";
}
inline LIB_EXPORT const char *character() {
inline TAG_PARSER_EXPORT const char *character() {
return "CHARACTER";
}
inline LIB_EXPORT const char *writtenBy() {
inline TAG_PARSER_EXPORT const char *writtenBy() {
return "WRITTEN_BY";
}
inline LIB_EXPORT const char *screenplayBy() {
inline TAG_PARSER_EXPORT const char *screenplayBy() {
return "SCREENPLAY_BY";
}
inline LIB_EXPORT const char *editedBy() {
inline TAG_PARSER_EXPORT const char *editedBy() {
return "EDITED_BY";
}
inline LIB_EXPORT const char *producer() {
inline TAG_PARSER_EXPORT const char *producer() {
return "PRODUCER";
}
inline LIB_EXPORT const char *coproducer() {
inline TAG_PARSER_EXPORT const char *coproducer() {
return "COPRODUCER";
}
inline LIB_EXPORT const char *executiveProducer() {
inline TAG_PARSER_EXPORT const char *executiveProducer() {
return "EXECUTIVE_PRODUCER";
}
inline LIB_EXPORT const char *distributedBy() {
inline TAG_PARSER_EXPORT const char *distributedBy() {
return "DISTRIBUTED_BY";
}
inline LIB_EXPORT const char *masteredBy() {
inline TAG_PARSER_EXPORT const char *masteredBy() {
return "MASTERED_BY";
}
inline LIB_EXPORT const char *encodedBy() {
inline TAG_PARSER_EXPORT const char *encodedBy() {
return "ENCODED_BY";
}
inline LIB_EXPORT const char *mixedBy() {
inline TAG_PARSER_EXPORT const char *mixedBy() {
return "MIXED_BY";
}
inline LIB_EXPORT const char *remixedBy() {
inline TAG_PARSER_EXPORT const char *remixedBy() {
return "REMIXED_BY";
}
inline LIB_EXPORT const char *productionStudio() {
inline TAG_PARSER_EXPORT const char *productionStudio() {
return "PRODUCTION_STUDIO";
}
inline LIB_EXPORT const char *thanksTo() {
inline TAG_PARSER_EXPORT const char *thanksTo() {
return "THANKS_TO";
}
inline LIB_EXPORT const char *publisher() {
inline TAG_PARSER_EXPORT const char *publisher() {
return "PUBLISHER";
}
inline LIB_EXPORT const char *label() {
inline TAG_PARSER_EXPORT const char *label() {
return "LABEL";
}
inline LIB_EXPORT const char *genre() {
inline TAG_PARSER_EXPORT const char *genre() {
return "GENRE";
}
inline LIB_EXPORT const char *mood() {
inline TAG_PARSER_EXPORT const char *mood() {
return "MOOD";
}
inline LIB_EXPORT const char *originalMediaType() {
inline TAG_PARSER_EXPORT const char *originalMediaType() {
return "ORIGINAL_MEDIA_TYPE";
}
inline LIB_EXPORT const char *contentType() {
inline TAG_PARSER_EXPORT const char *contentType() {
return "CONTENT_TYPE";
}
inline LIB_EXPORT const char *subject() {
inline TAG_PARSER_EXPORT const char *subject() {
return "SUBJECT";
}
inline LIB_EXPORT const char *description() {
inline TAG_PARSER_EXPORT const char *description() {
return "DESCRIPTION";
}
inline LIB_EXPORT const char *keywords() {
inline TAG_PARSER_EXPORT const char *keywords() {
return "KEYWORDS";
}
inline LIB_EXPORT const char *summary() {
inline TAG_PARSER_EXPORT const char *summary() {
return "SUMMARY";
}
inline LIB_EXPORT const char *synopsis() {
inline TAG_PARSER_EXPORT const char *synopsis() {
return "SYNOPSIS";
}
inline LIB_EXPORT const char *initialKey() {
inline TAG_PARSER_EXPORT const char *initialKey() {
return "INITIAL_KEY";
}
inline LIB_EXPORT const char *period() {
inline TAG_PARSER_EXPORT const char *period() {
return "PERIOD";
}
inline LIB_EXPORT const char *lawRating() {
inline TAG_PARSER_EXPORT const char *lawRating() {
return "LAW_RATING";
}
inline LIB_EXPORT const char *icra() {
inline TAG_PARSER_EXPORT const char *icra() {
return "ICRA";
}
inline LIB_EXPORT const char *dateRelease() {
inline TAG_PARSER_EXPORT const char *dateRelease() {
return "DATE_RELEASED";
}
inline LIB_EXPORT const char *dateRecorded() {
inline TAG_PARSER_EXPORT const char *dateRecorded() {
return "DATE_RECORDED";
}
inline LIB_EXPORT const char *dateEncoded() {
inline TAG_PARSER_EXPORT const char *dateEncoded() {
return "DATE_ENCODED";
}
inline LIB_EXPORT const char *dateTagged() {
inline TAG_PARSER_EXPORT const char *dateTagged() {
return "DATE_TAGGED";
}
inline LIB_EXPORT const char *dateDigitized() {
inline TAG_PARSER_EXPORT const char *dateDigitized() {
return "DATE_DIGITIZED";
}
inline LIB_EXPORT const char *dateWritten() {
inline TAG_PARSER_EXPORT const char *dateWritten() {
return "DATE_WRITTEN";
}
inline LIB_EXPORT const char *datePurchased() {
inline TAG_PARSER_EXPORT const char *datePurchased() {
return "DATE_PURCHASED";
}
inline LIB_EXPORT const char *recordingLocation() {
inline TAG_PARSER_EXPORT const char *recordingLocation() {
return "RECORDING_LOCATION";
}
inline LIB_EXPORT const char *compositionLocation() {
inline TAG_PARSER_EXPORT const char *compositionLocation() {
return "COMPOSITION_LOCATION";
}
inline LIB_EXPORT const char *composerNationality() {
inline TAG_PARSER_EXPORT const char *composerNationality() {
return "COMPOSER_NATIONALITY";
}
inline LIB_EXPORT const char *comment() {
inline TAG_PARSER_EXPORT const char *comment() {
return "COMMENT";
}
inline LIB_EXPORT const char *playCounter() {
inline TAG_PARSER_EXPORT const char *playCounter() {
return "PLAY_COUNTER";
}
inline LIB_EXPORT const char *rating() {
inline TAG_PARSER_EXPORT const char *rating() {
return "RATING";
}
inline LIB_EXPORT const char *encoder() {
inline TAG_PARSER_EXPORT const char *encoder() {
return "ENCODER";
}
inline LIB_EXPORT const char *encoderSettings() {
inline TAG_PARSER_EXPORT const char *encoderSettings() {
return "ENCODER_SETTINGS";
}
inline LIB_EXPORT const char *bps() {
inline TAG_PARSER_EXPORT const char *bps() {
return "BPS";
}
inline LIB_EXPORT const char *fps() {
inline TAG_PARSER_EXPORT const char *fps() {
return "FPS";
}
inline LIB_EXPORT const char *bpm() {
inline TAG_PARSER_EXPORT const char *bpm() {
return "BPM";
}
inline LIB_EXPORT const char *duration() {
inline TAG_PARSER_EXPORT const char *duration() {
return "DURATION";
}
inline LIB_EXPORT const char *numberOfFrames() {
inline TAG_PARSER_EXPORT const char *numberOfFrames() {
return "NUMBER_OF_FRAMES";
}
inline LIB_EXPORT const char *numberOfBytes() {
inline TAG_PARSER_EXPORT const char *numberOfBytes() {
return "NUMBER_OF_BYTES";
}
inline LIB_EXPORT const char *measure() {
inline TAG_PARSER_EXPORT const char *measure() {
return "MEASURE";
}
inline LIB_EXPORT const char *tuning() {
inline TAG_PARSER_EXPORT const char *tuning() {
return "TUNING";
}
inline LIB_EXPORT const char *replaygainGain() {
inline TAG_PARSER_EXPORT const char *replaygainGain() {
return "REPLAYGAIN_GAIN";
}
inline LIB_EXPORT const char *replaygainPeak() {
inline TAG_PARSER_EXPORT const char *replaygainPeak() {
return "REPLAYGAIN_PEAK";
}
inline LIB_EXPORT const char *identifiers() {
inline TAG_PARSER_EXPORT const char *identifiers() {
return "Identifiers";
}
inline LIB_EXPORT const char *isrc() {
inline TAG_PARSER_EXPORT const char *isrc() {
return "ISRC";
}
inline LIB_EXPORT const char *mcdi() {
inline TAG_PARSER_EXPORT const char *mcdi() {
return "MCDI";
}
inline LIB_EXPORT const char *isbn() {
inline TAG_PARSER_EXPORT const char *isbn() {
return "ISBN";
}
inline LIB_EXPORT const char *barcode() {
inline TAG_PARSER_EXPORT const char *barcode() {
return "BARCODE";
}
inline LIB_EXPORT const char *catalogNumber() {
inline TAG_PARSER_EXPORT const char *catalogNumber() {
return "CATALOG_NUMBER";
}
inline LIB_EXPORT const char *labelCode() {
inline TAG_PARSER_EXPORT const char *labelCode() {
return "LABEL_CODE";
}
inline LIB_EXPORT const char *lccn() {
inline TAG_PARSER_EXPORT const char *lccn() {
return "LCCN";
}
inline LIB_EXPORT const char *purchaseItem() {
inline TAG_PARSER_EXPORT const char *purchaseItem() {
return "PURCHASE_ITEM";
}
inline LIB_EXPORT const char *purchaseInfo() {
inline TAG_PARSER_EXPORT const char *purchaseInfo() {
return "PURCHASE_INFO";
}
inline LIB_EXPORT const char *purchaseOwner() {
inline TAG_PARSER_EXPORT const char *purchaseOwner() {
return "PURCHASE_OWNER";
}
inline LIB_EXPORT const char *purchasePrice() {
inline TAG_PARSER_EXPORT const char *purchasePrice() {
return "PURCHASE_PRICE";
}
inline LIB_EXPORT const char *purchaseCurrency() {
inline TAG_PARSER_EXPORT const char *purchaseCurrency() {
return "PURCHASE_CURRENCY";
}
inline LIB_EXPORT const char *copyright() {
inline TAG_PARSER_EXPORT const char *copyright() {
return "COPYRIGHT";
}
inline LIB_EXPORT const char *productionCopyright() {
inline TAG_PARSER_EXPORT const char *productionCopyright() {
return "PRODUCTION_COPYRIGHT";
}
inline LIB_EXPORT const char *license() {
inline TAG_PARSER_EXPORT const char *license() {
return "LICENSE";
}
inline LIB_EXPORT const char *termsOfUse() {
inline TAG_PARSER_EXPORT const char *termsOfUse() {
return "TERMS_OF_USE";
}
@ -339,7 +339,7 @@ inline LIB_EXPORT const char *termsOfUse() {
/*!
* \brief Returns the general TagTargetLevel for the Matroska specific \a targetLevelValue.
*/
inline LIB_EXPORT TagTargetLevel matroskaTagTargetLevel(uint64 targetLevelValue)
inline TAG_PARSER_EXPORT TagTargetLevel matroskaTagTargetLevel(uint64 targetLevelValue)
{
return targetLevelValue > 70 ? TagTargetLevel::Collection : static_cast<TagTargetLevel>(targetLevelValue / 10);
}
@ -347,7 +347,7 @@ inline LIB_EXPORT TagTargetLevel matroskaTagTargetLevel(uint64 targetLevelValue)
/*!
* \brief Returns the Matroska specific target level value for the specified general \a targetLevel.
*/
inline LIB_EXPORT uint64 matroskaTagTargetLevelValue(TagTargetLevel targetLevel)
inline TAG_PARSER_EXPORT uint64 matroskaTagTargetLevelValue(TagTargetLevel targetLevel)
{
return static_cast<uint64>(targetLevel) * 10;
}

View File

@ -8,7 +8,7 @@ namespace Media {
class EbmlElement;
class MatroskaContainer;
class LIB_EXPORT MatroskaTrack : public AbstractTrack
class TAG_PARSER_EXPORT MatroskaTrack : public AbstractTrack
{
friend class MatroskaContainer;

View File

@ -56,7 +56,7 @@ enum class ParsingStatus : byte
CriticalFailure /**< tried to parse the part, but critical errors occured */
};
class LIB_EXPORT MediaFileInfo : public BasicFileInfo, public StatusProvider
class TAG_PARSER_EXPORT MediaFileInfo : public BasicFileInfo, public StatusProvider
{
public:
// constructor, destructor

View File

@ -1,7 +1,7 @@
#ifndef MEDIAFORMAT_H
#define MEDIAFORMAT_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <utility>
@ -21,7 +21,7 @@ enum class MediaType
Hint /**< hint */
};
extern const char *LIB_EXPORT mediaTypeName(MediaType mediaType);
extern const char *TAG_PARSER_EXPORT mediaTypeName(MediaType mediaType);
/*!
* \brief The GeneralMediaFormat enum specifies the general format of media data (PCM, MPEG-4, PNG, ...).
@ -253,7 +253,7 @@ enum AudioFormatExtensions : unsigned char {
};
}
class LIB_EXPORT MediaFormat
class TAG_PARSER_EXPORT MediaFormat
{
public:
MediaFormat(GeneralMediaFormat general = GeneralMediaFormat::Unknown, unsigned char sub = 0, unsigned char extension = 0);

View File

@ -22,7 +22,7 @@ class Mp4Container;
* \brief Defines traits for the GenericFileElement implementation Mp4Atom.
*/
template <>
class LIB_EXPORT FileElementTraits<Mp4Atom>
class TAG_PARSER_EXPORT FileElementTraits<Mp4Atom>
{
public:
/*!
@ -54,7 +54,7 @@ public:
}
};
class LIB_EXPORT Mp4Atom : public GenericFileElement<Mp4Atom>
class TAG_PARSER_EXPORT Mp4Atom : public GenericFileElement<Mp4Atom>
{
friend class GenericFileElement<Mp4Atom>;

View File

@ -16,7 +16,7 @@ namespace Media {
class MediaFileInfo;
class LIB_EXPORT Mp4Container : public GenericContainer<MediaFileInfo, Mp4Tag, Mp4Track, Mp4Atom>
class TAG_PARSER_EXPORT Mp4Container : public GenericContainer<MediaFileInfo, Mp4Tag, Mp4Track, Mp4Atom>
{
public:
Mp4Container(MediaFileInfo &fileInfo, uint64 startOffset);

View File

@ -1,377 +1,377 @@
#include "./mp4ids.h"
#include "../mediaformat.h"
namespace Media {
/*!
* \brief Encapsulates the most common MP4 atom IDs.
*/
namespace Mp4AtomIds {
}
/*!
* \brief Encapsulates IDs of MP4 atoms holding tag information.
*/
namespace Mp4TagAtomIds {
}
/*!
* \brief Encapsulates "mean values" used in iTunes style MP4 tags.
*/
namespace Mp4TagExtendedMeanIds {
const char *iTunes = "com.apple.iTunes";
}
/*!
* \brief Encapsulates "name values" used in iTunes style MP4 tags.
*/
namespace Mp4TagExtendedNameIds {
const char *cdec = "cdec";
}
/*!
* \brief Encapsulates all supported MP4 media type IDs.
*/
namespace Mp4MediaTypeIds {
}
/*!
* \brief Encapsulates all supported MP4 media format IDs (aka "FOURCCs").
* \sa http://wiki.multimedia.cx/?title=QuickTime_container
*/
namespace FourccIds {
MediaFormat fourccToMediaFormat(uint32 fourccId)
{
switch(fourccId) {
case Mpeg:
return GeneralMediaFormat::Mpeg1Video;
case Mpeg2Imx30: case Mpeg2Imx50:
return GeneralMediaFormat::Mpeg2Video;
case Mpeg4Video:
return GeneralMediaFormat::Mpeg4Video;
case Mpeg4TimedText:
return GeneralMediaFormat::Mpeg4TimedText;
case Hevc1: case Hevc2:
return MediaFormat(GeneralMediaFormat::Hevc);
case Avc1: case Avc2: case Avc3: case Avc4: case H264Decoder1: case H264Decoder2:
case H264Decoder3: case H264Decoder4: case H264Decoder5: case H264Decoder6:
return MediaFormat(GeneralMediaFormat::Avc);
case Divx4Decoder1: case Divx4Decoder2:
case H263Quicktime: case H2633GPP: case XvidDecoder1: case XvidDecoder2:
case XvidDecoder3: case XvidDecoder4: case XvidDecoder5: case Divx5Decoder:
return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg4AdvancedSimpleProfile0);
case Divx3Decoder1: case Divx3Decoder2: case Divx3Decoder3: case Divx3Decoder4: case Divx3Decoder5:
case Divx3Decoder6: case Divx3Decoder7: case Divx3Decoder8: case Divx3Decoder9: case Divx3Decoder10:
case Divx3Decoder11: case Divx3Decoder12: case Divx3Decoder13: case Divx3Decoder14: case Divx3Decoder15:
return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg4SimpleProfile0);
case Tiff:
return GeneralMediaFormat::Tiff;
case AppleTextAtsuiCodec:
return GeneralMediaFormat::TimedText;
case Raw:
return GeneralMediaFormat::UncompressedVideoFrames;
case Jpeg:
return GeneralMediaFormat::Jpeg;
case Gif:
return GeneralMediaFormat::Gif;
case Png:
return GeneralMediaFormat::Png;
case AdpcmAcm:
return GeneralMediaFormat::AdpcmAcm;
case ImaadpcmAcm:
return GeneralMediaFormat::ImaadpcmAcm;
case Mp3CbrOnly: case Mp3:
return MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer3);
case Mpeg4Audio:
return GeneralMediaFormat::Aac;
case Alac:
return GeneralMediaFormat::Alac;
case Ac3:
return GeneralMediaFormat::Ac3;
case EAc3:
return GeneralMediaFormat::EAc3;
case DolbyMpl:
return GeneralMediaFormat::DolbyMlp;
case Ac4:
return GeneralMediaFormat::Ac4;
case Rv20: case Rv30: case Rv40:
return GeneralMediaFormat::RealVideo;
case Int24: case Int32:
return MediaFormat(GeneralMediaFormat::Pcm);
case Int16Be:
return MediaFormat(GeneralMediaFormat::Pcm, SubFormats::PcmIntBe);
case Int16Le:
return MediaFormat(GeneralMediaFormat::Pcm, SubFormats::PcmIntLe);
case FloatingPoint32Bit: case FloatingPoint64Bit:
return MediaFormat(GeneralMediaFormat::Pcm, SubFormats::PcmFloatIeee);
case Amr: case AmrNarrowband:
return MediaFormat(GeneralMediaFormat::Amr);
case Dts: case DtsH:
return MediaFormat(GeneralMediaFormat::Dts);
case DtsE:
return MediaFormat(GeneralMediaFormat::Dts, SubFormats::DtsExpress);
case WindowsMediaAudio: case WindowsMediaAudio7:
case WindowsMediaAudio9Professional: case WindowsMediaAudio9Standard:
return MediaFormat(GeneralMediaFormat::WindowsMediaAudio);
case MsMpeg4V1Decoder1: case MsMpeg4V1Decoder2: case MsMpeg4V1Decoder3:
case MsMpeg4V1Decoder4: case MsMpeg4V1Decoder5: case MsMpeg4V1Decoder6:
return MediaFormat(GeneralMediaFormat::MicrosoftMpeg4, 1);
case MsMpeg4V2Decoder1: case MsMpeg4V2Decoder2: case MsMpeg4V2Decoder3:
case MsMpeg4V2Decoder4:
return MediaFormat(GeneralMediaFormat::MicrosoftMpeg4, 2);
case MsMpeg4V3Decoder1: case MsMpeg4V3Decoder2:
return MediaFormat(GeneralMediaFormat::MicrosoftMpeg4, 3);
case WindowsMediaVideoV17:
return MediaFormat(GeneralMediaFormat::WindowsMediaVideo, 1);
case WindowsMediaVideoV2: case WindowsMediaVideoV8:
return MediaFormat(GeneralMediaFormat::WindowsMediaVideo, 2);
// TODO: map more FOURCCs
default:
return GeneralMediaFormat::Unknown;
}
}
}
/*!
* \brief Encapsulates all supported MP4 media format description extensions.
* \sa https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
*/
namespace Mp4FormatExtensionIds {
}
/*!
* \brief Encapsulates all supported MPEG-4 elementary stream object IDs.
*/
namespace Mpeg4ElementaryStreamObjectIds {
/*!
* \brief Returns the Media::MediaFormat denoted by the specified MPEG-4 stream ID.
*/
MediaFormat streamObjectTypeFormat(byte streamObjectTypeId)
{
switch(streamObjectTypeId) {
case SystemsIso144961: return GeneralMediaFormat::Systems;
case SystemsIso144961v2: return MediaFormat(GeneralMediaFormat::Systems, 2);
case InteractionStream: return GeneralMediaFormat::InteractionStream;
case AfxStream: return GeneralMediaFormat::AfxStream;
case FontDataStream: return GeneralMediaFormat::FontDataStream;
case SynthesizedTextureStream: return GeneralMediaFormat::SynthesizedTextureStream;
case StreamingTextStream: return GeneralMediaFormat::StreamingTextStream;
case Mpeg4Visual: return GeneralMediaFormat::Mpeg4Video;
case Avc: return GeneralMediaFormat::Avc;
case ParameterSetsForAvc: return GeneralMediaFormat::Avc;
case Als: return GeneralMediaFormat::Als;
case Sa0c: return GeneralMediaFormat::Sa0c;
case Aac: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile);
case Mpeg2VideoSimpleProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SimpleProfile);
case Mpeg2VideoMainProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SnrProfile);
case Mpeg2VideoSnrProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SpatialProfile);
case Mpeg2VideoSpatialProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2HighProfile);
case Mpeg2VideoHighProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2HighProfile);
case Mpeg2Video422Profile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SimpleProfile);
case Mpeg2AacMainProfile: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg2MainProfile);
case Mpeg2AacLowComplexityProfile: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg2LowComplexityProfile);
case Mpeg2AacScaleableSamplingRateProfile: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg2ScalableSamplingRateProfile);
case Mpeg2Audio: return GeneralMediaFormat::Mpeg2Audio;
case Mpeg1Video: return GeneralMediaFormat::Mpeg1Video;
case Mpeg1Audio: return GeneralMediaFormat::Mpeg1Audio;
case Jpeg: return GeneralMediaFormat::Jpeg;
case Png: return GeneralMediaFormat::Png;
case Evrc: case PrivateEvrc: return GeneralMediaFormat::Evrc;
case Smv: return GeneralMediaFormat::Smv;
case Gpp2Cmf: return GeneralMediaFormat::Gpp2Cmf;
case Vc1: return GeneralMediaFormat::Vc1;
case Dirac: return GeneralMediaFormat::Dirac;
case Ac3: case PrivateAc3: return GeneralMediaFormat::Ac3;
case EAc3: return GeneralMediaFormat::EAc3;
case Dts: case PrivateDts: return GeneralMediaFormat::Dts;
case DtsHdHighResolution: return MediaFormat(GeneralMediaFormat::DtsHd, SubFormats::DtsHdHighResolution);
case DtsHdMasterAudio: return MediaFormat(GeneralMediaFormat::DtsHd, SubFormats::DtsHdMasterAudio);
case DtsHdExpress: return MediaFormat(GeneralMediaFormat::DtsHd, SubFormats::DtsExpress);
case PrivateOgg: case PrivateOgg2: return GeneralMediaFormat::Vorbis;
case PrivateQcelp: return GeneralMediaFormat::Qcelp;
default: return MediaFormat();
}
}
}
/*!
* \brief Encapsulates all known MPEG-4 descriptor IDs.
*/
namespace Mpeg4DescriptorIds {
}
/*!
* \brief Returns the name of the stream type denoted by the specified MPEG-4 stream type ID.
*/
namespace Mpeg4ElementaryStreamTypeIds {
/*!
* \brief Returns the name of the stream type denoted by the specified MPEG-4 stream type ID.
*/
const char *streamTypeName(byte streamTypeId)
{
switch(streamTypeId) {
case ObjectDescriptor: return "object descriptor";
case ClockReference: return "clock reference";
case SceneDescriptor: return "scene descriptor";
case Visual: return "visual";
case Audio: return "audio";
case Mpeg7: return "MPEG-7";
case Ipmps: return "IMPS";
case ObjectContentInfo: return "object content info";
case MpegJava: return "MPEG Java";
case Interaction: return "interaction";
case Ipmp: return "IPMP";
case FontData: return "font data";
case StreamingText: return "streaming text";
default: return "";
}
}
}
/*!
* \brief Encapsulates all supported MPEG-4 audio object type IDs.
* \sa http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio
*/
namespace Mpeg4AudioObjectIds {
LIB_EXPORT MediaFormat idToMediaFormat(byte mpeg4AudioObjectId, bool sbrPresent, bool psPresent)
{
MediaFormat fmt;
switch(mpeg4AudioObjectId) {
case AacMain:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4MainProfile);
break;
case AacLc:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile);
break;
case AacSsr:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ScalableSamplingRateProfile);
break;
case AacLtp:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LongTermPrediction);
break;
case Sbr:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile, ExtensionFormats::SpectralBandReplication);
break;
case AacScalable:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ScalableSamplingRateProfile);
break;
case ErAacLc:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ERLowComplecityProfile);
break;
case ErAacLtp:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ERLongTermPrediction);
break;
case ErAacLd:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ERLowDelay);
break;
case Ps:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile, ExtensionFormats::ParametricStereo);
break;
case Layer1:
fmt = MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer1);
break;
case Layer2:
fmt = MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer2);
break;
case Layer3:
fmt = MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer3);
break;
default:
;
}
if(sbrPresent) {
fmt.extension |= ExtensionFormats::SpectralBandReplication;
}
if(psPresent) {
fmt.extension |= ExtensionFormats::ParametricStereo;
}
return fmt;
}
}
uint32 mpeg4SamplingFrequencyTable[] = {
96000, 88200, 64000, 48000, 44100, 32000,
24000, 22050, 16000, 12000, 11025, 8000, 7350
};
/*!
* \brief Encapsulates all supported MPEG-4 channel configurations.
*/
namespace Mpeg4ChannelConfigs {
/*!
* \brief Returns the string representation for the specified MPEG-4 channel config.
*/
const char *channelConfigString(byte config)
{
switch(config) {
case AotSpecificConfig:
return "defined in AOT Specific Config";
case FrontCenter:
return "1 channel: front-center";
case FrontLeftFrontRight:
return "2 channels: front-left, front-right";
case FrontCenterFrontLeftFrontRight:
return "3 channels: front-center, front-left, front-right";
case FrontCenterFrontLeftFrontRightBackCenter:
return "4 channels: front-center, front-left, front-right, back-center";
case FrontCenterFrontLeftFrontRightBackLeftBackRight:
return "5 channels: front-center, front-left, front-right, back-left, back-right";
case FrontCenterFrontLeftFrontRightBackLeftBackRightLFEChannel:
return "6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel";
case FrontCenterFrontLeftFrontRightSideLeftSideRightBackLeftBackRightLFEChannel:
return "8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel";
default:
return nullptr;
}
}
/*!
* \brief Returns the channel count for the specified MPEG-4 channel config.
*/
byte channelCount(byte config)
{
switch(config) {
case FrontCenter:
return 1;
case FrontLeftFrontRight:
return 2;
case FrontCenterFrontLeftFrontRight:
return 3;
case FrontCenterFrontLeftFrontRightBackCenter:
return 4;
case FrontCenterFrontLeftFrontRightBackLeftBackRight:
return 5;
case FrontCenterFrontLeftFrontRightBackLeftBackRightLFEChannel:
return 6;
case FrontCenterFrontLeftFrontRightSideLeftSideRightBackLeftBackRightLFEChannel:
return 8;
default:
return 0;
}
}
}
/*!
* \brief Encapsulates MPEG-4 video (14496-2) codes.
*/
namespace Mpeg4VideoCodes {
}
/*!
* \brief Encapsulates MPEG-2 video codes.
*/
namespace Mpeg2VideoCodes {
}
}
#include "./mp4ids.h"
#include "../mediaformat.h"
namespace Media {
/*!
* \brief Encapsulates the most common MP4 atom IDs.
*/
namespace Mp4AtomIds {
}
/*!
* \brief Encapsulates IDs of MP4 atoms holding tag information.
*/
namespace Mp4TagAtomIds {
}
/*!
* \brief Encapsulates "mean values" used in iTunes style MP4 tags.
*/
namespace Mp4TagExtendedMeanIds {
const char *iTunes = "com.apple.iTunes";
}
/*!
* \brief Encapsulates "name values" used in iTunes style MP4 tags.
*/
namespace Mp4TagExtendedNameIds {
const char *cdec = "cdec";
}
/*!
* \brief Encapsulates all supported MP4 media type IDs.
*/
namespace Mp4MediaTypeIds {
}
/*!
* \brief Encapsulates all supported MP4 media format IDs (aka "FOURCCs").
* \sa http://wiki.multimedia.cx/?title=QuickTime_container
*/
namespace FourccIds {
MediaFormat fourccToMediaFormat(uint32 fourccId)
{
switch(fourccId) {
case Mpeg:
return GeneralMediaFormat::Mpeg1Video;
case Mpeg2Imx30: case Mpeg2Imx50:
return GeneralMediaFormat::Mpeg2Video;
case Mpeg4Video:
return GeneralMediaFormat::Mpeg4Video;
case Mpeg4TimedText:
return GeneralMediaFormat::Mpeg4TimedText;
case Hevc1: case Hevc2:
return MediaFormat(GeneralMediaFormat::Hevc);
case Avc1: case Avc2: case Avc3: case Avc4: case H264Decoder1: case H264Decoder2:
case H264Decoder3: case H264Decoder4: case H264Decoder5: case H264Decoder6:
return MediaFormat(GeneralMediaFormat::Avc);
case Divx4Decoder1: case Divx4Decoder2:
case H263Quicktime: case H2633GPP: case XvidDecoder1: case XvidDecoder2:
case XvidDecoder3: case XvidDecoder4: case XvidDecoder5: case Divx5Decoder:
return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg4AdvancedSimpleProfile0);
case Divx3Decoder1: case Divx3Decoder2: case Divx3Decoder3: case Divx3Decoder4: case Divx3Decoder5:
case Divx3Decoder6: case Divx3Decoder7: case Divx3Decoder8: case Divx3Decoder9: case Divx3Decoder10:
case Divx3Decoder11: case Divx3Decoder12: case Divx3Decoder13: case Divx3Decoder14: case Divx3Decoder15:
return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg4SimpleProfile0);
case Tiff:
return GeneralMediaFormat::Tiff;
case AppleTextAtsuiCodec:
return GeneralMediaFormat::TimedText;
case Raw:
return GeneralMediaFormat::UncompressedVideoFrames;
case Jpeg:
return GeneralMediaFormat::Jpeg;
case Gif:
return GeneralMediaFormat::Gif;
case Png:
return GeneralMediaFormat::Png;
case AdpcmAcm:
return GeneralMediaFormat::AdpcmAcm;
case ImaadpcmAcm:
return GeneralMediaFormat::ImaadpcmAcm;
case Mp3CbrOnly: case Mp3:
return MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer3);
case Mpeg4Audio:
return GeneralMediaFormat::Aac;
case Alac:
return GeneralMediaFormat::Alac;
case Ac3:
return GeneralMediaFormat::Ac3;
case EAc3:
return GeneralMediaFormat::EAc3;
case DolbyMpl:
return GeneralMediaFormat::DolbyMlp;
case Ac4:
return GeneralMediaFormat::Ac4;
case Rv20: case Rv30: case Rv40:
return GeneralMediaFormat::RealVideo;
case Int24: case Int32:
return MediaFormat(GeneralMediaFormat::Pcm);
case Int16Be:
return MediaFormat(GeneralMediaFormat::Pcm, SubFormats::PcmIntBe);
case Int16Le:
return MediaFormat(GeneralMediaFormat::Pcm, SubFormats::PcmIntLe);
case FloatingPoint32Bit: case FloatingPoint64Bit:
return MediaFormat(GeneralMediaFormat::Pcm, SubFormats::PcmFloatIeee);
case Amr: case AmrNarrowband:
return MediaFormat(GeneralMediaFormat::Amr);
case Dts: case DtsH:
return MediaFormat(GeneralMediaFormat::Dts);
case DtsE:
return MediaFormat(GeneralMediaFormat::Dts, SubFormats::DtsExpress);
case WindowsMediaAudio: case WindowsMediaAudio7:
case WindowsMediaAudio9Professional: case WindowsMediaAudio9Standard:
return MediaFormat(GeneralMediaFormat::WindowsMediaAudio);
case MsMpeg4V1Decoder1: case MsMpeg4V1Decoder2: case MsMpeg4V1Decoder3:
case MsMpeg4V1Decoder4: case MsMpeg4V1Decoder5: case MsMpeg4V1Decoder6:
return MediaFormat(GeneralMediaFormat::MicrosoftMpeg4, 1);
case MsMpeg4V2Decoder1: case MsMpeg4V2Decoder2: case MsMpeg4V2Decoder3:
case MsMpeg4V2Decoder4:
return MediaFormat(GeneralMediaFormat::MicrosoftMpeg4, 2);
case MsMpeg4V3Decoder1: case MsMpeg4V3Decoder2:
return MediaFormat(GeneralMediaFormat::MicrosoftMpeg4, 3);
case WindowsMediaVideoV17:
return MediaFormat(GeneralMediaFormat::WindowsMediaVideo, 1);
case WindowsMediaVideoV2: case WindowsMediaVideoV8:
return MediaFormat(GeneralMediaFormat::WindowsMediaVideo, 2);
// TODO: map more FOURCCs
default:
return GeneralMediaFormat::Unknown;
}
}
}
/*!
* \brief Encapsulates all supported MP4 media format description extensions.
* \sa https://developer.apple.com/library/mac/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html
*/
namespace Mp4FormatExtensionIds {
}
/*!
* \brief Encapsulates all supported MPEG-4 elementary stream object IDs.
*/
namespace Mpeg4ElementaryStreamObjectIds {
/*!
* \brief Returns the Media::MediaFormat denoted by the specified MPEG-4 stream ID.
*/
MediaFormat streamObjectTypeFormat(byte streamObjectTypeId)
{
switch(streamObjectTypeId) {
case SystemsIso144961: return GeneralMediaFormat::Systems;
case SystemsIso144961v2: return MediaFormat(GeneralMediaFormat::Systems, 2);
case InteractionStream: return GeneralMediaFormat::InteractionStream;
case AfxStream: return GeneralMediaFormat::AfxStream;
case FontDataStream: return GeneralMediaFormat::FontDataStream;
case SynthesizedTextureStream: return GeneralMediaFormat::SynthesizedTextureStream;
case StreamingTextStream: return GeneralMediaFormat::StreamingTextStream;
case Mpeg4Visual: return GeneralMediaFormat::Mpeg4Video;
case Avc: return GeneralMediaFormat::Avc;
case ParameterSetsForAvc: return GeneralMediaFormat::Avc;
case Als: return GeneralMediaFormat::Als;
case Sa0c: return GeneralMediaFormat::Sa0c;
case Aac: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile);
case Mpeg2VideoSimpleProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SimpleProfile);
case Mpeg2VideoMainProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SnrProfile);
case Mpeg2VideoSnrProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SpatialProfile);
case Mpeg2VideoSpatialProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2HighProfile);
case Mpeg2VideoHighProfile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2HighProfile);
case Mpeg2Video422Profile: return MediaFormat(GeneralMediaFormat::Mpeg4Video, SubFormats::Mpeg2SimpleProfile);
case Mpeg2AacMainProfile: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg2MainProfile);
case Mpeg2AacLowComplexityProfile: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg2LowComplexityProfile);
case Mpeg2AacScaleableSamplingRateProfile: return MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg2ScalableSamplingRateProfile);
case Mpeg2Audio: return GeneralMediaFormat::Mpeg2Audio;
case Mpeg1Video: return GeneralMediaFormat::Mpeg1Video;
case Mpeg1Audio: return GeneralMediaFormat::Mpeg1Audio;
case Jpeg: return GeneralMediaFormat::Jpeg;
case Png: return GeneralMediaFormat::Png;
case Evrc: case PrivateEvrc: return GeneralMediaFormat::Evrc;
case Smv: return GeneralMediaFormat::Smv;
case Gpp2Cmf: return GeneralMediaFormat::Gpp2Cmf;
case Vc1: return GeneralMediaFormat::Vc1;
case Dirac: return GeneralMediaFormat::Dirac;
case Ac3: case PrivateAc3: return GeneralMediaFormat::Ac3;
case EAc3: return GeneralMediaFormat::EAc3;
case Dts: case PrivateDts: return GeneralMediaFormat::Dts;
case DtsHdHighResolution: return MediaFormat(GeneralMediaFormat::DtsHd, SubFormats::DtsHdHighResolution);
case DtsHdMasterAudio: return MediaFormat(GeneralMediaFormat::DtsHd, SubFormats::DtsHdMasterAudio);
case DtsHdExpress: return MediaFormat(GeneralMediaFormat::DtsHd, SubFormats::DtsExpress);
case PrivateOgg: case PrivateOgg2: return GeneralMediaFormat::Vorbis;
case PrivateQcelp: return GeneralMediaFormat::Qcelp;
default: return MediaFormat();
}
}
}
/*!
* \brief Encapsulates all known MPEG-4 descriptor IDs.
*/
namespace Mpeg4DescriptorIds {
}
/*!
* \brief Returns the name of the stream type denoted by the specified MPEG-4 stream type ID.
*/
namespace Mpeg4ElementaryStreamTypeIds {
/*!
* \brief Returns the name of the stream type denoted by the specified MPEG-4 stream type ID.
*/
const char *streamTypeName(byte streamTypeId)
{
switch(streamTypeId) {
case ObjectDescriptor: return "object descriptor";
case ClockReference: return "clock reference";
case SceneDescriptor: return "scene descriptor";
case Visual: return "visual";
case Audio: return "audio";
case Mpeg7: return "MPEG-7";
case Ipmps: return "IMPS";
case ObjectContentInfo: return "object content info";
case MpegJava: return "MPEG Java";
case Interaction: return "interaction";
case Ipmp: return "IPMP";
case FontData: return "font data";
case StreamingText: return "streaming text";
default: return "";
}
}
}
/*!
* \brief Encapsulates all supported MPEG-4 audio object type IDs.
* \sa http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio
*/
namespace Mpeg4AudioObjectIds {
TAG_PARSER_EXPORT MediaFormat idToMediaFormat(byte mpeg4AudioObjectId, bool sbrPresent, bool psPresent)
{
MediaFormat fmt;
switch(mpeg4AudioObjectId) {
case AacMain:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4MainProfile);
break;
case AacLc:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile);
break;
case AacSsr:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ScalableSamplingRateProfile);
break;
case AacLtp:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LongTermPrediction);
break;
case Sbr:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile, ExtensionFormats::SpectralBandReplication);
break;
case AacScalable:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ScalableSamplingRateProfile);
break;
case ErAacLc:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ERLowComplecityProfile);
break;
case ErAacLtp:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ERLongTermPrediction);
break;
case ErAacLd:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4ERLowDelay);
break;
case Ps:
fmt = MediaFormat(GeneralMediaFormat::Aac, SubFormats::AacMpeg4LowComplexityProfile, ExtensionFormats::ParametricStereo);
break;
case Layer1:
fmt = MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer1);
break;
case Layer2:
fmt = MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer2);
break;
case Layer3:
fmt = MediaFormat(GeneralMediaFormat::Mpeg1Audio, SubFormats::Mpeg1Layer3);
break;
default:
;
}
if(sbrPresent) {
fmt.extension |= ExtensionFormats::SpectralBandReplication;
}
if(psPresent) {
fmt.extension |= ExtensionFormats::ParametricStereo;
}
return fmt;
}
}
uint32 mpeg4SamplingFrequencyTable[] = {
96000, 88200, 64000, 48000, 44100, 32000,
24000, 22050, 16000, 12000, 11025, 8000, 7350
};
/*!
* \brief Encapsulates all supported MPEG-4 channel configurations.
*/
namespace Mpeg4ChannelConfigs {
/*!
* \brief Returns the string representation for the specified MPEG-4 channel config.
*/
const char *channelConfigString(byte config)
{
switch(config) {
case AotSpecificConfig:
return "defined in AOT Specific Config";
case FrontCenter:
return "1 channel: front-center";
case FrontLeftFrontRight:
return "2 channels: front-left, front-right";
case FrontCenterFrontLeftFrontRight:
return "3 channels: front-center, front-left, front-right";
case FrontCenterFrontLeftFrontRightBackCenter:
return "4 channels: front-center, front-left, front-right, back-center";
case FrontCenterFrontLeftFrontRightBackLeftBackRight:
return "5 channels: front-center, front-left, front-right, back-left, back-right";
case FrontCenterFrontLeftFrontRightBackLeftBackRightLFEChannel:
return "6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel";
case FrontCenterFrontLeftFrontRightSideLeftSideRightBackLeftBackRightLFEChannel:
return "8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel";
default:
return nullptr;
}
}
/*!
* \brief Returns the channel count for the specified MPEG-4 channel config.
*/
byte channelCount(byte config)
{
switch(config) {
case FrontCenter:
return 1;
case FrontLeftFrontRight:
return 2;
case FrontCenterFrontLeftFrontRight:
return 3;
case FrontCenterFrontLeftFrontRightBackCenter:
return 4;
case FrontCenterFrontLeftFrontRightBackLeftBackRight:
return 5;
case FrontCenterFrontLeftFrontRightBackLeftBackRightLFEChannel:
return 6;
case FrontCenterFrontLeftFrontRightSideLeftSideRightBackLeftBackRightLFEChannel:
return 8;
default:
return 0;
}
}
}
/*!
* \brief Encapsulates MPEG-4 video (14496-2) codes.
*/
namespace Mpeg4VideoCodes {
}
/*!
* \brief Encapsulates MPEG-2 video codes.
*/
namespace Mpeg2VideoCodes {
}
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,7 @@ namespace Media
class Mp4Atom;
class Mp4Tag;
class LIB_EXPORT Mp4TagMaker
class TAG_PARSER_EXPORT Mp4TagMaker
{
friend class Mp4Tag;
@ -46,7 +46,7 @@ inline uint64 Mp4TagMaker::requiredSize() const
return m_metaSize;
}
class LIB_EXPORT Mp4Tag : public FieldMapBasedTag<Mp4TagField>
class TAG_PARSER_EXPORT Mp4Tag : public FieldMapBasedTag<Mp4TagField>
{
public:
Mp4Tag();

View File

@ -53,7 +53,7 @@ class Mp4TagField;
* \brief Defines traits for the TagField implementation of the Mp4TagField class.
*/
template <>
class LIB_EXPORT TagFieldTraits<Mp4TagField>
class TAG_PARSER_EXPORT TagFieldTraits<Mp4TagField>
{
public:
/*!
@ -74,7 +74,7 @@ public:
class Mp4Atom;
class LIB_EXPORT Mp4TagFieldMaker
class TAG_PARSER_EXPORT Mp4TagFieldMaker
{
friend class Mp4TagField;
@ -110,7 +110,7 @@ inline uint64 Mp4TagFieldMaker::requiredSize() const
return m_totalSize;
}
class LIB_EXPORT Mp4TagField : public TagField<Mp4TagField>, public StatusProvider
class TAG_PARSER_EXPORT Mp4TagField : public TagField<Mp4TagField>, public StatusProvider
{
friend class TagField<Mp4TagField>;

View File

@ -13,7 +13,7 @@ class Mp4Atom;
class Mpeg4Descriptor;
class AvcConfiguration;
class LIB_EXPORT Mpeg4AudioSpecificConfig
class TAG_PARSER_EXPORT Mpeg4AudioSpecificConfig
{
public:
Mpeg4AudioSpecificConfig();
@ -39,7 +39,7 @@ public:
byte epConfig;
};
class LIB_EXPORT Mpeg4VideoSpecificConfig
class TAG_PARSER_EXPORT Mpeg4VideoSpecificConfig
{
public:
Mpeg4VideoSpecificConfig();
@ -48,7 +48,7 @@ public:
std::string userData;
};
class LIB_EXPORT Mpeg4ElementaryStreamInfo
class TAG_PARSER_EXPORT Mpeg4ElementaryStreamInfo
{
public:
Mpeg4ElementaryStreamInfo();
@ -116,7 +116,7 @@ inline bool Mpeg4ElementaryStreamInfo::upstream() const
return decCfgDescFlags & 0x02;
}
class LIB_EXPORT Mp4Track : public AbstractTrack
class TAG_PARSER_EXPORT Mp4Track : public AbstractTrack
{
public:
Mp4Track(Mp4Atom &trakAtom);

View File

@ -14,7 +14,7 @@ class Mpeg4Descriptor;
* \brief Defines traits for the GenericFileElement implementation Mpeg4Descriptor.
*/
template <>
class LIB_EXPORT FileElementTraits<Mpeg4Descriptor>
class TAG_PARSER_EXPORT FileElementTraits<Mpeg4Descriptor>
{
public:
/*!
@ -46,7 +46,7 @@ public:
}
};
class LIB_EXPORT Mpeg4Descriptor : public GenericFileElement<Mpeg4Descriptor>
class TAG_PARSER_EXPORT Mpeg4Descriptor : public GenericFileElement<Mpeg4Descriptor>
{
friend class GenericFileElement<Mpeg4Descriptor>;

View File

@ -1,8 +1,9 @@
#ifndef MP3FRAMEAUDIOSTREAM_H
#define MP3FRAMEAUDIOSTREAM_H
#include "../global.h"
#include <c++utilities/conversion/types.h>
#include <c++utilities/application/global.h>
#include <iostream>
@ -25,7 +26,7 @@ enum class MpegChannelMode
Unspecifed /**< used to indicate that the channel mode is unknown */
};
LIB_EXPORT const char *mpegChannelModeString(MpegChannelMode channelMode);
TAG_PARSER_EXPORT const char *mpegChannelModeString(MpegChannelMode channelMode);
enum class XingHeaderFlags
{
@ -36,7 +37,7 @@ enum class XingHeaderFlags
HasQualityIndicator = 0x8u /**< Xing quality indicator is present */
};
class LIB_EXPORT MpegAudioFrame
class TAG_PARSER_EXPORT MpegAudioFrame
{
public:
MpegAudioFrame();

View File

@ -10,7 +10,7 @@
namespace Media
{
class LIB_EXPORT MpegAudioFrameStream : public AbstractTrack
class TAG_PARSER_EXPORT MpegAudioFrameStream : public AbstractTrack
{
public:
MpegAudioFrameStream(std::iostream &stream, uint64 startOffset);

View File

@ -1,6 +1,8 @@
#ifndef NOTIFICATION_H
#define NOTIFICATION_H
#include "./global.h"
#include <c++utilities/chrono/datetime.h>
#include <string>
@ -38,7 +40,7 @@ class Notification;
typedef std::list<Notification> NotificationList;
class LIB_EXPORT Notification
class TAG_PARSER_EXPORT Notification
{
public:
Notification(NotificationType type, const std::string &message, const std::string &context);

View File

@ -25,7 +25,7 @@ class OggContainer;
/*!
* \brief The OggParameter struct holds the OGG parameter for a VorbisComment.
*/
struct LIB_EXPORT OggParameter
struct TAG_PARSER_EXPORT OggParameter
{
OggParameter();
void set(std::size_t pageIndex, std::size_t segmentIndex, bool lastMetaDataBlock, GeneralMediaFormat streamFormat = GeneralMediaFormat::Vorbis);
@ -65,7 +65,7 @@ inline void OggParameter::set(std::size_t pageIndex, std::size_t segmentIndex, b
this->streamFormat = streamFormat;
}
class LIB_EXPORT OggVorbisComment : public VorbisComment
class TAG_PARSER_EXPORT OggVorbisComment : public VorbisComment
{
friend class OggContainer;
@ -124,7 +124,7 @@ inline const OggParameter &OggVorbisComment::oggParams() const
return m_oggParams;
}
class LIB_EXPORT OggContainer : public GenericContainer<MediaFileInfo, OggVorbisComment, OggStream, OggPage>
class TAG_PARSER_EXPORT OggContainer : public GenericContainer<MediaFileInfo, OggVorbisComment, OggStream, OggPage>
{
friend class OggStream;

View File

@ -8,7 +8,7 @@
namespace Media {
class LIB_EXPORT OggIterator
class TAG_PARSER_EXPORT OggIterator
{
public:
OggIterator(std::istream &stream, uint64 startOffset, uint64 streamSize);

View File

@ -1,8 +1,9 @@
#ifndef OGGPAGE_H
#define OGGPAGE_H
#include "../global.h"
#include <c++utilities/conversion/types.h>
#include <c++utilities/application/global.h>
#include <vector>
#include <numeric>
@ -10,7 +11,7 @@
namespace Media {
class LIB_EXPORT OggPage
class TAG_PARSER_EXPORT OggPage
{
public:
OggPage();

View File

@ -10,7 +10,7 @@ namespace Media {
class OggContainer;
class OggIterator;
class LIB_EXPORT OggStream : public AbstractTrack
class TAG_PARSER_EXPORT OggStream : public AbstractTrack
{
friend class OggContainer;

View File

@ -1,14 +1,15 @@
#ifndef MEDIA_OPUSIDENTIFICATIONHEADER_H
#define MEDIA_OPUSIDENTIFICATIONHEADER_H
#include <c++utilities/application/global.h>
#include "../global.h"
#include <c++utilities/conversion/types.h>
namespace Media {
class OggIterator;
class LIB_EXPORT OpusIdentificationHeader
class TAG_PARSER_EXPORT OpusIdentificationHeader
{
public:
OpusIdentificationHeader();

View File

@ -1,7 +1,8 @@
#ifndef POSITIONINSET_H
#define POSITIONINSET_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <c++utilities/conversion/stringconversion.h>
#include <string>
@ -16,7 +17,7 @@ namespace Media {
* This class is used to parse and store values like "9/11" which are used
* by some tag formats to denote track positions.
*/
class LIB_EXPORT PositionInSet
class TAG_PARSER_EXPORT PositionInSet
{
public:
constexpr PositionInSet(int32 position = 0, int32 total = 0);

View File

@ -4,7 +4,6 @@
#include "./mediaformat.h"
#include <c++utilities/conversion/types.h>
#include <c++utilities/application/global.h>
namespace Media {
@ -62,13 +61,13 @@ enum class ContainerFormat
Zip /**< ZIP archive */
};
LIB_EXPORT ContainerFormat parseSignature(const char *buffer, int bufferSize);
LIB_EXPORT const char *containerFormatName(ContainerFormat containerFormat);
LIB_EXPORT const char *containerFormatAbbreviation(ContainerFormat containerFormat, MediaType mediaType = MediaType::Unknown, unsigned int version = 0);
LIB_EXPORT const char *containerFormatSubversion(ContainerFormat containerFormat);
LIB_EXPORT const char *containerMimeType(ContainerFormat containerFormat, MediaType mediaType = MediaType::Unknown);
LIB_EXPORT TagTargetLevel containerTargetLevel(ContainerFormat containerFormat, uint64 targetLevelValue);
LIB_EXPORT uint64 containerTargetLevelValue(ContainerFormat containerFormat, TagTargetLevel targetLevel);
TAG_PARSER_EXPORT ContainerFormat parseSignature(const char *buffer, int bufferSize);
TAG_PARSER_EXPORT const char *containerFormatName(ContainerFormat containerFormat);
TAG_PARSER_EXPORT const char *containerFormatAbbreviation(ContainerFormat containerFormat, MediaType mediaType = MediaType::Unknown, unsigned int version = 0);
TAG_PARSER_EXPORT const char *containerFormatSubversion(ContainerFormat containerFormat);
TAG_PARSER_EXPORT const char *containerMimeType(ContainerFormat containerFormat, MediaType mediaType = MediaType::Unknown);
TAG_PARSER_EXPORT TagTargetLevel containerTargetLevel(ContainerFormat containerFormat, uint64 targetLevelValue);
TAG_PARSER_EXPORT uint64 containerTargetLevelValue(ContainerFormat containerFormat, TagTargetLevel targetLevel);
}

5
size.h
View File

@ -1,7 +1,8 @@
#ifndef SIZE_H
#define SIZE_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <c++utilities/conversion/types.h>
#include <string>
@ -12,7 +13,7 @@ namespace Media {
/*!
* \brief The Size class defines the size of a two-dimensional object using integer point precision.
*/
class LIB_EXPORT Size
class TAG_PARSER_EXPORT Size
{
public:
constexpr Size();

View File

@ -8,7 +8,7 @@
namespace Media {
class LIB_EXPORT StatusProvider
class TAG_PARSER_EXPORT StatusProvider
{
public:
typedef std::function<void (StatusProvider &sender)> CallbackFunction;

2
tag.h
View File

@ -96,7 +96,7 @@ constexpr KnownField nextKnownField(KnownField field)
return field == lastKnownField ? KnownField::Invalid : static_cast<KnownField>(static_cast<int>(field) + 1);
}
class LIB_EXPORT Tag : public StatusProvider
class TAG_PARSER_EXPORT Tag : public StatusProvider
{
public:
virtual ~Tag();

View File

@ -1,7 +1,8 @@
#ifndef MEDIA_TAGTARGET_H
#define MEDIA_TAGTARGET_H
#include <c++utilities/application/global.h>
#include "./global.h"
#include <c++utilities/conversion/types.h>
#include <string>
@ -25,9 +26,9 @@ enum class TagTargetLevel : unsigned char
Collection
};
LIB_EXPORT const char *tagTargetLevelName(TagTargetLevel tagTargetLevel);
TAG_PARSER_EXPORT const char *tagTargetLevelName(TagTargetLevel tagTargetLevel);
class LIB_EXPORT TagTarget
class TAG_PARSER_EXPORT TagTarget
{
public:
typedef uint64 IdType;

View File

@ -61,7 +61,7 @@ enum class TagDataType : unsigned int
Undefined /**< undefined/invalid data type */
};
class LIB_EXPORT TagValue
class TAG_PARSER_EXPORT TagValue
{
public:
// constructor, destructor

View File

@ -12,7 +12,7 @@ namespace Media {
class OggIterator;
class VorbisComment;
class LIB_EXPORT VorbisComment : public FieldMapBasedTag<VorbisCommentField, CaseInsensitiveStringComparer>
class TAG_PARSER_EXPORT VorbisComment : public FieldMapBasedTag<VorbisCommentField, CaseInsensitiveStringComparer>
{
public:
VorbisComment();

View File

@ -38,7 +38,7 @@ class VorbisCommentField;
* \brief Defines traits for the TagField implementation of the VorbisCommentField class.
*/
template <>
class LIB_EXPORT TagFieldTraits<VorbisCommentField>
class TAG_PARSER_EXPORT TagFieldTraits<VorbisCommentField>
{
public:
/*!
@ -57,7 +57,7 @@ public:
class OggIterator;
class LIB_EXPORT VorbisCommentField : public TagField<VorbisCommentField>, public StatusProvider
class TAG_PARSER_EXPORT VorbisCommentField : public TagField<VorbisCommentField>, public StatusProvider
{
friend class TagField<VorbisCommentField>;

View File

@ -1,7 +1,7 @@
#ifndef MEDIA_VORBISCOMMENTIDS_H
#define MEDIA_VORBISCOMMENTIDS_H
#include <c++utilities/application/global.h>
#include "../global.h"
namespace Media {
@ -10,112 +10,112 @@ namespace Media {
*/
namespace VorbisCommentIds {
inline LIB_EXPORT const char *trackNumber() {
inline TAG_PARSER_EXPORT const char *trackNumber() {
return "TRACKNUMBER";
}
inline LIB_EXPORT const char *diskNumber() {
inline TAG_PARSER_EXPORT const char *diskNumber() {
return "DISCNUMBER";
}
inline LIB_EXPORT const char *part() {
inline TAG_PARSER_EXPORT const char *part() {
return "PART";
}
inline LIB_EXPORT const char *partNumber() {
inline TAG_PARSER_EXPORT const char *partNumber() {
return "PARTNUMBER";
}
inline LIB_EXPORT const char *title() {
inline TAG_PARSER_EXPORT const char *title() {
return "TITLE";
}
inline LIB_EXPORT const char *version() {
inline TAG_PARSER_EXPORT const char *version() {
return "VERSION";
}
inline LIB_EXPORT const char *artist() {
inline TAG_PARSER_EXPORT const char *artist() {
return "ARTIST";
}
inline LIB_EXPORT const char *album() {
inline TAG_PARSER_EXPORT const char *album() {
return "ALBUM";
}
inline LIB_EXPORT const char *label() {
inline TAG_PARSER_EXPORT const char *label() {
return "LABEL";
}
inline LIB_EXPORT const char *labelNo() {
inline TAG_PARSER_EXPORT const char *labelNo() {
return "LABELNO";
}
inline LIB_EXPORT const char *language() {
inline TAG_PARSER_EXPORT const char *language() {
return "LANGUAGE";
}
inline LIB_EXPORT const char *performer() {
inline TAG_PARSER_EXPORT const char *performer() {
return "PERFORMER";
}
inline LIB_EXPORT const char *composer() {
inline TAG_PARSER_EXPORT const char *composer() {
return "COMPOSER";
}
inline LIB_EXPORT const char *ensemble() {
inline TAG_PARSER_EXPORT const char *ensemble() {
return "ENSEMBLE";
}
inline LIB_EXPORT const char *arranger() {
inline TAG_PARSER_EXPORT const char *arranger() {
return "ARRANGER";
}
inline LIB_EXPORT const char *lyricist() {
inline TAG_PARSER_EXPORT const char *lyricist() {
return "LYRICIST";
}
inline LIB_EXPORT const char *author() {
inline TAG_PARSER_EXPORT const char *author() {
return "AUTHOR";
}
inline LIB_EXPORT const char *conductor() {
inline TAG_PARSER_EXPORT const char *conductor() {
return "CONDUCTOR";
}
inline LIB_EXPORT const char *encoder() {
inline TAG_PARSER_EXPORT const char *encoder() {
return "ENCODER";
}
inline LIB_EXPORT const char *publisher() {
inline TAG_PARSER_EXPORT const char *publisher() {
return "PUBLISHER";
}
inline LIB_EXPORT const char *genre() {
inline TAG_PARSER_EXPORT const char *genre() {
return "GENRE";
}
inline LIB_EXPORT const char *originalMediaType() {
inline TAG_PARSER_EXPORT const char *originalMediaType() {
return "ORIGINAL_MEDIA_TYPE";
}
inline LIB_EXPORT const char *contentType() {
inline TAG_PARSER_EXPORT const char *contentType() {
return "CONTENT_TYPE";
}
inline LIB_EXPORT const char *subject() {
inline TAG_PARSER_EXPORT const char *subject() {
return "SUBJECT";
}
inline LIB_EXPORT const char *description() {
inline TAG_PARSER_EXPORT const char *description() {
return "DESCRIPTION";
}
inline LIB_EXPORT const char *isrc() {
inline TAG_PARSER_EXPORT const char *isrc() {
return "ISRC";
}
inline LIB_EXPORT const char *eanupn() {
inline TAG_PARSER_EXPORT const char *eanupn() {
return "EAN/UPN";
}
inline LIB_EXPORT const char *comment() {
inline TAG_PARSER_EXPORT const char *comment() {
return "COMMENT";
}
inline LIB_EXPORT const char *encoderSettings() {
inline TAG_PARSER_EXPORT const char *encoderSettings() {
return "ENCODING";
}
inline LIB_EXPORT const char *date() {
inline TAG_PARSER_EXPORT const char *date() {
return "DATE";
}
inline LIB_EXPORT const char *location() {
inline TAG_PARSER_EXPORT const char *location() {
return "LOCATION";
}
inline LIB_EXPORT const char *license() {
inline TAG_PARSER_EXPORT const char *license() {
return "LICENSE";
}
inline LIB_EXPORT const char *copyright() {
inline TAG_PARSER_EXPORT const char *copyright() {
return "COPYRIGHT";
}
inline LIB_EXPORT const char *opus() {
inline TAG_PARSER_EXPORT const char *opus() {
return "OPUS";
}
inline LIB_EXPORT const char *sourceMedia() {
inline TAG_PARSER_EXPORT const char *sourceMedia() {
return "SOURCEMEDIA";
}
inline LIB_EXPORT const char *cover() {
inline TAG_PARSER_EXPORT const char *cover() {
return "METADATA_BLOCK_PICTURE";
}

View File

@ -1,14 +1,15 @@
#ifndef MEDIA_VORBISIDENTIFICATIONHEADER_H
#define MEDIA_VORBISIDENTIFICATIONHEADER_H
#include <c++utilities/application/global.h>
#include "../global.h"
#include <c++utilities/conversion/types.h>
namespace Media {
class OggIterator;
class LIB_EXPORT VorbisIdentificationHeader
class TAG_PARSER_EXPORT VorbisIdentificationHeader
{
public:
VorbisIdentificationHeader();

View File

@ -8,7 +8,7 @@
namespace Media
{
class LIB_EXPORT WaveFormatHeader
class TAG_PARSER_EXPORT WaveFormatHeader
{
public:
WaveFormatHeader();
@ -33,7 +33,7 @@ inline uint32 WaveFormatHeader::bitrate() const
return bitsPerSample * sampleRate * channelCount;
}
class LIB_EXPORT WaveAudioStream : public AbstractTrack
class TAG_PARSER_EXPORT WaveAudioStream : public AbstractTrack
{
public:
WaveAudioStream(std::iostream &stream, uint64 startOffset);