Tag Parser  6.4.1
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Friends | List of all members
Media::EbmlElement Class Reference

The EbmlElement class helps to parse EBML files such as Matroska files. More...

#include <ebmlelement.h>

Inheritance diagram for Media::EbmlElement:
[legend]
Collaboration diagram for Media::EbmlElement:
[legend]

Public Member Functions

 EbmlElement (MatroskaContainer &container, uint64 startOffset)
 Constructs a new top level element with the specified container at the specified startOffset. More...
 
std::string idToString () const
 Converts the specified EBML ID to a printable string. More...
 
bool isParent () const
 Returns an indication whether the element is a parent element. More...
 
bool isPadding () const
 Returns an indication whether the element is considered as padding. More...
 
uint64 firstChildOffset () const
 Returns the offset of the first child of the element. More...
 
std::string readString ()
 Reads the content of the element as string. More...
 
uint64 readUInteger ()
 Reads the content of the element as unsigned integer. More...
 
float64 readFloat ()
 Reads the content of the element as float. More...
 
- Public Member Functions inherited from Media::GenericFileElement< EbmlElement >
 GenericFileElement (containerType &container, uint64 startOffset)
 
 GenericFileElement (implementationType &parent, uint64 startOffset)
 
 GenericFileElement (containerType &container, uint64 startOffset, uint64 maxSize)
 
 GenericFileElement (const GenericFileElement &other)=delete
 
 GenericFileElement (GenericFileElement &other)=delete
 
GenericFileElementoperator= (const GenericFileElement &other)=delete
 
containerTypecontainer ()
 Returns the related container. More...
 
const containerTypecontainer () const
 Returns the related container. More...
 
std::iostream & stream ()
 Returns the related stream. More...
 
IoUtilities::BinaryReader & reader ()
 Returns the related BinaryReader. More...
 
IoUtilities::BinaryWriter & writer ()
 Returns the related BinaryWriter. More...
 
uint64 startOffset () const
 Returns the start offset in the related stream. More...
 
uint64 relativeStartOffset () const
 Returns the offset of the element in its parent or - if it is a top-level element - in the related stream. More...
 
const identifierTypeid () const
 Returns the element ID. More...
 
std::string idToString () const
 Returns a printable string representation of the element ID. More...
 
uint32 idLength () const
 Returns the length of the id denotation in byte. More...
 
uint32 headerSize () const
 Returns the header size of the element in byte. More...
 
dataSizeType dataSize () const
 Returns the data size of the element in byte. More...
 
uint32 sizeLength () const
 Returns the length of the size denotation of the element in byte. More...
 
uint64 dataOffset () const
 Returns the data offset of the element in the related stream. More...
 
uint64 totalSize () const
 Returns the total size of the element. More...
 
uint64 endOffset () const
 Returns the offset of the first byte which doesn't belong to this element anymore. More...
 
uint64 maxTotalSize () const
 Returns maximum total size. More...
 
implementationTypeparent ()
 Returns the parent of the element. More...
 
const implementationTypeparent () const
 Returns the parent of the element. More...
 
implementationTypenextSibling ()
 Returns the next sibling of the element. More...
 
const implementationTypenextSibling () const
 Returns the next sibling of the element. More...
 
implementationTypefirstChild ()
 Returns the first child of the element. More...
 
const implementationTypefirstChild () const
 Returns the first child of the element. More...
 
implementationTypesubelementByPath (const std::initializer_list< identifierType > &path)
 Returns the sub element for the specified path. More...
 
implementationTypesubelementByPath (std::list< identifierType > &path)
 
implementationTypechildById (const identifierType &id)
 Returns the first child with the specified id. More...
 
implementationTypesiblingById (const identifierType &id, bool includeThis=false)
 Returns the first sibling with the specified id. More...
 
FileElementIterator< implementationTypebegin ()
 Returns an iterator for iterating over the element's childs. More...
 
const FileElementIterator< implementationTypebegin () const
 Returns an iterator for iterating over the element's childs (constant). More...
 
FileElementIterator< implementationTypeend ()
 Returns an invalid iterator. More...
 
const FileElementIterator< implementationTypeend () const
 Returns an invalid iterator. More...
 
bool isParent () const
 Returns an indication whether this instance is a parent element. More...
 
bool isPadding () const
 Returns an indication whether this instance is a padding element. More...
 
uint64 firstChildOffset () const
 Returns the offset of the first child (relative to the start offset of this element). More...
 
bool isParsed () const
 Returns an indication whether this instance has been parsed yet. More...
 
void clear ()
 Clears the status of the element. More...
 
void parse ()
 Parses the header information of the element which is read from the related stream at the start offset. More...
 
void reparse ()
 Parses the header information of the element which is read from the related stream at the start offset. More...
 
void validateSubsequentElementStructure (NotificationList &gatheredNotifications, uint64 *paddingSize=nullptr)
 Parses (see parse()) this and all subsequent elements. More...
 
void copyHeader (std::ostream &targetStream)
 Writes the header informaton of the element to the specified targetStream. More...
 
void copyWithoutChilds (std::ostream &targetStream)
 Writes the element without its childs to the specified targetStream. More...
 
void copyEntirely (std::ostream &targetStream)
 Writes the entire element including all childs to the specified targetStream. More...
 
void makeBuffer ()
 Buffers the element (header and data). More...
 
void discardBuffer ()
 Discards buffered data. More...
 
void copyBuffer (std::ostream &targetStream)
 Copies buffered data to targetStream. More...
 
void copyPreferablyFromBuffer (std::ostream &targetStream)
 Copies buffered data to targetStream if data has been buffered; copies from input stream otherwise. More...
 
const std::unique_ptr< char[]> & buffer ()
 Returns buffered data. More...
 
implementationTypedenoteFirstChild (uint32 offset)
 Denotes the first child to start at the specified offset (relative to the start offset of this descriptor). More...
 
- Public Member Functions inherited from Media::StatusProvider
const NotificationListnotifications () const
 Returns notifications for the current object. More...
 
bool hasNotifications () const
 Returns an indication whether there are notifications for the current object. More...
 
bool hasCriticalNotifications () const
 Returns an indication whether there are critical notifications for the current object. More...
 
NotificationType worstNotificationType () const
 Returns the worst notification type. More...
 
const std::string & currentStatus () const
 Returns a status information for the current object. More...
 
double currentPercentage () const
 Returns the progress percentage of the current object. More...
 
size_t registerCallback (CallbackFunction callback)
 Registers a callback function. More...
 
void unregisterCallback (size_t id)
 Unregisters a previously registered callback function whith the specified id. More...
 
void unregisterAllCallbacks ()
 Unregisters all callback functions. More...
 
void forwardStatusUpdateCalls (StatusProvider *other=nullptr)
 Forwards all status updates calls to the specified statusProvider. More...
 
StatusProviderusedProvider ()
 Returns the provider which callback functions will be called when the status or the percentage is updated. More...
 
void tryToAbort ()
 Commands the object to abort the current operation. More...
 
bool isAborted () const
 Returns an indication whether the current operation should be aborted. More...
 
void invalidateStatus ()
 Invalidates the current status. More...
 
void invalidateNotifications ()
 Invalidates the object's notifications. More...
 
void updateStatus (const std::string &status)
 This method is meant to be called by the derived class to report updated status information. More...
 
void updateStatus (const std::string &status, double percentage)
 This method is meant to be called by the derived class to report updated status information. More...
 
void updatePercentage (double percentage)
 This method is meant to be called by the derived class to report updated progress percentage only. More...
 
void addNotification (const Notification &notification)
 This method is meant to be called by the derived class to add a notification. More...
 
void addNotification (NotificationType type, const std::string &message, const std::string &context)
 This method is meant to be called by the derived class to add a notification of the specified type, message and context. More...
 
void addNotifications (const StatusProvider &from)
 This method is meant to be called by the derived class to add all notifications from another StatusProvider instance. More...
 
void addNotifications (const std::string &higherContext, const StatusProvider &from)
 This method is meant to be called by the derived class to add all notifications from another StatusProvider instance. More...
 
void addNotifications (const NotificationList &notifications)
 This method is meant to be called by the derived class to add the specified notifications. More...
 

Static Public Member Functions

static byte calculateIdLength (identifierType id)
 Returns the length of the specified id in byte. More...
 
static byte calculateSizeDenotationLength (uint64 size)
 Returns the length of the size denotation for the specified size in byte. More...
 
static byte makeId (identifierType id, char *buff)
 Stores the specified id in the specified buffer which must be at least 8 bytes long. More...
 
static byte makeSizeDenotation (uint64 size, char *buff)
 Makes the size denotation for the specified size and stores it to buff. More...
 
static byte makeSizeDenotation (uint64 size, char *buff, byte minBytes)
 Makes the size denotation for the specified size and stores it to buff. More...
 
static byte calculateUIntegerLength (uint64 integer)
 Returns the length of the specified unsigned integer in byte. More...
 
static byte makeUInteger (uint64 value, char *buff)
 Writes value to buff. More...
 
static byte makeUInteger (uint64 value, char *buff, byte minBytes)
 Writes value to buff. More...
 
static void makeSimpleElement (std::ostream &stream, identifierType id, uint64 content)
 Makes a simple EBML element. More...
 
static void makeSimpleElement (std::ostream &stream, identifierType id, const std::string &content)
 
static void makeSimpleElement (std::ostream &stream, GenericFileElement::identifierType id, const char *data, std::size_t dataSize)
 Makes a simple EBML element. More...
 
- Static Public Member Functions inherited from Media::GenericFileElement< EbmlElement >
static constexpr uint32 maximumIdLengthSupported ()
 Returns the maximum id length supported by the class in byte. More...
 
static constexpr uint32 maximumSizeLengthSupported ()
 Returns the maximum size length supported by the class in byte. More...
 
static constexpr byte minimumElementSize ()
 Returns the mimimum element size. More...
 

Static Public Attributes

static uint64 bytesToBeSkipped = 0x4000
 Specifies the number of bytes to be skipped till a valid EBML element is found in the stream. More...
 

Protected Member Functions

 EbmlElement (EbmlElement &parent, uint64 startOffset)
 Constructs a new sub level element with the specified parent at the specified startOffset. More...
 
 EbmlElement (MatroskaContainer &container, uint64 startOffset, uint64 maxSize)
 Constructs a new top level element with the specified container at the specified startOffset. More...
 
void internalParse ()
 Parses the EBML element. More...
 
- Protected Member Functions inherited from Media::StatusProvider
 StatusProvider ()
 Constructs a new StatusProvider. More...
 

Friends

class GenericFileElement< EbmlElement >
 

Additional Inherited Members

- Public Types inherited from Media::GenericFileElement< EbmlElement >
typedef FileElementTraits< EbmlElement >::containerType containerType
 Specifies the type of the corresponding container. More...
 
typedef FileElementTraits< EbmlElement >::identifierType identifierType
 Specifies the type used to store identifiers. More...
 
typedef FileElementTraits< EbmlElement >::dataSizeType dataSizeType
 Specifies the type used to store data sizes. More...
 
typedef FileElementTraits< EbmlElement >::implementationType implementationType
 Specifies the type of the actual implementation. More...
 
- Public Types inherited from Media::StatusProvider
typedef std::function< void(StatusProvider &sender)> CallbackFunction
 
typedef std::vector< CallbackFunctionCallbackVector
 
typedef std::pair< int, CallbackFunctionCallbackPair
 
- Protected Attributes inherited from Media::GenericFileElement< EbmlElement >
identifierType m_id
 
uint64 m_startOffset
 
uint64 m_maxSize
 
uint32 m_idLength
 
dataSizeType m_dataSize
 
uint32 m_sizeLength
 
implementationTypem_parent
 
std::unique_ptr< implementationTypem_nextSibling
 
std::unique_ptr< implementationTypem_firstChild
 
std::unique_ptr< char[]> m_buffer
 

Detailed Description

The EbmlElement class helps to parse EBML files such as Matroska files.

Definition at line 50 of file ebmlelement.h.

Constructor & Destructor Documentation

◆ EbmlElement() [1/3]

Media::EbmlElement::EbmlElement ( MatroskaContainer container,
uint64  startOffset 
)

Constructs a new top level element with the specified container at the specified startOffset.

Definition at line 39 of file ebmlelement.cpp.

◆ EbmlElement() [2/3]

Media::EbmlElement::EbmlElement ( EbmlElement parent,
uint64  startOffset 
)
protected

Constructs a new sub level element with the specified parent at the specified startOffset.

Definition at line 53 of file ebmlelement.cpp.

◆ EbmlElement() [3/3]

Media::EbmlElement::EbmlElement ( MatroskaContainer container,
uint64  startOffset,
uint64  maxSize 
)
protected

Constructs a new top level element with the specified container at the specified startOffset.

Definition at line 46 of file ebmlelement.cpp.

Member Function Documentation

◆ calculateIdLength()

byte Media::EbmlElement::calculateIdLength ( identifierType  id)
static

Returns the length of the specified id in byte.

Exceptions
ThrowsInvalidDataException() if id can not be represented.

Definition at line 226 of file ebmlelement.cpp.

◆ calculateSizeDenotationLength()

byte Media::EbmlElement::calculateSizeDenotationLength ( uint64  size)
static

Returns the length of the size denotation for the specified size in byte.

Exceptions
ThrowsInvalidDataException() if size can not be represented.

Definition at line 245 of file ebmlelement.cpp.

◆ calculateUIntegerLength()

byte Media::EbmlElement::calculateUIntegerLength ( uint64  integer)
static

Returns the length of the specified unsigned integer in byte.

Exceptions
ThrowsInvalidDataException() if integer can not be represented.

Definition at line 372 of file ebmlelement.cpp.

◆ firstChildOffset()

uint64 Media::EbmlElement::firstChildOffset ( ) const
inline

Returns the offset of the first child of the element.

Remarks
The returned offset is relative to the start offset if this element.

Definition at line 142 of file ebmlelement.h.

◆ idToString()

std::string Media::EbmlElement::idToString ( ) const
inline

Converts the specified EBML ID to a printable string.

Definition at line 91 of file ebmlelement.h.

◆ internalParse()

void Media::EbmlElement::internalParse ( )
protected

Parses the EBML element.

Definition at line 68 of file ebmlelement.cpp.

◆ isPadding()

bool Media::EbmlElement::isPadding ( ) const
inline

Returns an indication whether the element is considered as padding.

Definition at line 133 of file ebmlelement.h.

◆ isParent()

bool Media::EbmlElement::isParent ( ) const
inline

Returns an indication whether the element is a parent element.

Remarks
This information is not read from the element header. Some elements are simply known to be parents whereas all other are considered as non-parents.

Definition at line 108 of file ebmlelement.h.

◆ makeId()

byte Media::EbmlElement::makeId ( identifierType  id,
char *  buff 
)
static

Stores the specified id in the specified buffer which must be at least 8 bytes long.

Returns
Returns the number of bytes written to buff.
Exceptions
ThrowsInvalidDataException() if id can not be represented.

Definition at line 274 of file ebmlelement.cpp.

◆ makeSimpleElement() [1/3]

void Media::EbmlElement::makeSimpleElement ( std::ostream &  stream,
identifierType  id,
uint64  content 
)
static

Makes a simple EBML element.

Parameters
streamSpecifies the stream to write the data to.
idSpecifies the element ID.
contentSpecifies the value of the element as unsigned integer.

Definition at line 468 of file ebmlelement.cpp.

◆ makeSimpleElement() [2/3]

static void Media::EbmlElement::makeSimpleElement ( std::ostream &  stream,
identifierType  id,
const std::string &  content 
)
static

◆ makeSimpleElement() [3/3]

void Media::EbmlElement::makeSimpleElement ( std::ostream &  stream,
GenericFileElement::identifierType  id,
const char *  data,
std::size_t  dataSize 
)
static

Makes a simple EBML element.

Parameters
streamSpecifies the stream to write the data to.
idSpecifies the element ID.
dataSpecifies the data of the element.
dataSizeSpecifies the size of data.

Definition at line 503 of file ebmlelement.cpp.

◆ makeSizeDenotation() [1/2]

byte Media::EbmlElement::makeSizeDenotation ( uint64  size,
char *  buff 
)
static

Makes the size denotation for the specified size and stores it to buff.

Parameters
sizeSpecifies the size to be denoted.
buffSpecifies the buffer to store the denotation. Must be at least 8 bytes long.
Returns
Returns the number of bytes written to buff.
Exceptions
ThrowsInvalidDataException() if size can not be represented.

Definition at line 300 of file ebmlelement.cpp.

◆ makeSizeDenotation() [2/2]

byte Media::EbmlElement::makeSizeDenotation ( uint64  size,
char *  buff,
byte  minBytes 
)
static

Makes the size denotation for the specified size and stores it to buff.

Parameters
sizeSpecifies the size to be denoted.
buffSpecifies the buffer to store the denotation. Must be at least 8 bytes long.
minBytesSpecifies the minimum number of bytes to use. Might be use allow subsequent element growth.
Returns
Returns the number of bytes written to buff. Always in the range of minBytes and 8.
Exceptions
ThrowsInvalidDataException() if size can not be represented.

Definition at line 338 of file ebmlelement.cpp.

◆ makeUInteger() [1/2]

byte Media::EbmlElement::makeUInteger ( uint64  value,
char *  buff 
)
static

Writes value to buff.

Returns
Returns the number of bytes written to buff.

Definition at line 397 of file ebmlelement.cpp.

◆ makeUInteger() [2/2]

byte Media::EbmlElement::makeUInteger ( uint64  value,
char *  buff,
byte  minBytes 
)
static

Writes value to buff.

Returns
Returns the number of bytes written to buff.
Parameters
valueSpecifies the value to be written.
buffSpecifies the buffer to write to.
minBytesSpecifies the minimum number of bytes to use.

Definition at line 433 of file ebmlelement.cpp.

◆ readFloat()

float64 Media::EbmlElement::readFloat ( )

Reads the content of the element as float.

Remarks
Reads exactly 4 or 8 bytes. If the element stores more or less data zero is returned.

Definition at line 209 of file ebmlelement.cpp.

◆ readString()

std::string Media::EbmlElement::readString ( )

Reads the content of the element as string.

Definition at line 181 of file ebmlelement.cpp.

◆ readUInteger()

uint64 Media::EbmlElement::readUInteger ( )

Reads the content of the element as unsigned integer.

Reads up to 8 bytes. If the element stores more data the additional bytes are ignored.

Definition at line 193 of file ebmlelement.cpp.

Friends And Related Function Documentation

◆ GenericFileElement< EbmlElement >

friend class GenericFileElement< EbmlElement >
friend

Definition at line 52 of file ebmlelement.h.

Member Data Documentation

◆ bytesToBeSkipped

uint64 Media::EbmlElement::bytesToBeSkipped = 0x4000
static

Specifies the number of bytes to be skipped till a valid EBML element is found in the stream.

Definition at line 76 of file ebmlelement.h.


The documentation for this class was generated from the following files: