MistServer  2.5.3-Pro-19-gf5e75b1 ( Generic_64)
Public Member Functions | Protected Member Functions | Protected Attributes
MP4::Box Class Reference

#include <mp4.h>

Inheritance diagram for MP4::Box:
MP4::ABST MP4::ABST MP4::AFRA MP4::AFRA MP4::AFRT MP4::AFRT MP4::ASRT MP4::ASRT MP4::AVCC MP4::AVCC MP4::CLAP MP4::CLAP MP4::containerBox MP4::containerBox MP4::DAC3 MP4::DAC3 MP4::FIEL MP4::FIEL MP4::FRMA MP4::FRMA MP4::FTYP MP4::FTYP MP4::fullBox MP4::fullBox MP4::HDLR MP4::HDLR MP4::HVCC MP4::HVCC MP4::MFHD MP4::MFHD MP4::MFRO MP4::MFRO MP4::PASP MP4::PASP MP4::SampleEntry MP4::SampleEntry MP4::SCHI MP4::SCHI MP4::SDTP MP4::SDTP MP4::SINF MP4::SINF MP4::TFHD MP4::TFHD MP4::TRAF MP4::TRAF MP4::TRUN MP4::TRUN MP4::UUID MP4::UUID

Public Member Functions

 Box (char *datapointer=0, bool manage=true)
 Creates a new box, optionally using the indicated pointer for storage. More...
 
 Box (char *datapointer=0, bool manage=true)
 
 Box (const Box &rs)
 
 Box (const Box &rs)
 
 ~Box ()
 If managed, this will free the data pointer. More...
 
 ~Box ()
 
char * asBox ()
 Returns a copy of the data pointer. More...
 
char * asBox ()
 
uint64_t boxedSize ()
 Returns the total boxed size of this box, including the header. More...
 
uint64_t boxedSize ()
 
void clear ()
 
void clear ()
 Makes this box managed if it wasn't already, resetting the internal storage to 8 bytes (the minimum). More...
 
std::string getType ()
 
std::string getType ()
 Returns the values at byte positions 4 through 7. More...
 
bool isType (const char *boxType)
 
bool isType (const char *boxType)
 Returns true if the given 4-byte boxtype is equal to the values at byte positions 4 through 7. More...
 
Boxoperator= (const Box &rs)
 
Boxoperator= (const Box &rs)
 
char * payload ()
 
char * payload ()
 
uint64_t payloadSize ()
 Retruns the size of the payload of thix box, excluding the header. More...
 
uint64_t payloadSize ()
 
bool read (FILE *newData)
 
bool read (FILE *newData)
 
bool read (std::string &newData)
 Reads out a whole box (if possible) from newData, copying to the internal data storage and removing from the input string. More...
 
bool read (std::string &newData)
 
std::string toPrettyString (uint32_t indent=0)
 
std::string toPrettyString (uint32_t indent=0)
 Attempts to typecast this Box to a more specific type and call the toPrettyString() function of that type. More...
 

Protected Member Functions

BoxgetBox (size_t index)
 Gets a reference to the box at the given index. More...
 
BoxgetBox (size_t index)
 
size_t getBoxLen (size_t index)
 Returns the size of the box at the given position. More...
 
size_t getBoxLen (size_t index)
 
short getInt16 (size_t index)
 
short getInt16 (size_t index)
 Gets the 16 bits integer at the given index. More...
 
uint32_t getInt24 (size_t index)
 
uint32_t getInt24 (size_t index)
 Gets the 24 bits integer at the given index. More...
 
uint32_t getInt32 (size_t index)
 Gets the 32 bits integer at the given index. More...
 
uint32_t getInt32 (size_t index)
 
uint64_t getInt64 (size_t index)
 Gets the 64 bits integer at the given index. More...
 
uint64_t getInt64 (size_t index)
 
char getInt8 (size_t index)
 Gets the 8 bits integer at the given index. More...
 
char getInt8 (size_t index)
 
char * getString (size_t index)
 Gets the NULL-terminated string at the given index. More...
 
char * getString (size_t index)
 
size_t getStringLen (size_t index)
 
size_t getStringLen (size_t index)
 Returns the length of the NULL-terminated string at the given index. More...
 
bool reserve (size_t position, size_t current, size_t wanted)
 Attempts to reserve enough space for wanted bytes of data at given position, where current bytes of data is now reserved. More...
 
bool reserve (size_t position, size_t current, size_t wanted)
 
void setBox (Box &newEntry, size_t index)
 
void setBox (Box &newEntry, size_t index)
 Replaces the existing box at the given index by the new box newEntry. More...
 
void setInt16 (short newData, size_t index)
 
void setInt16 (short newData, size_t index)
 Sets the 16 bits integer at the given index. More...
 
void setInt24 (uint32_t newData, size_t index)
 Sets the 24 bits integer at the given index. More...
 
void setInt24 (uint32_t newData, size_t index)
 
void setInt32 (uint32_t newData, size_t index)
 
void setInt32 (uint32_t newData, size_t index)
 Sets the 32 bits integer at the given index. More...
 
void setInt64 (uint64_t newData, size_t index)
 
void setInt64 (uint64_t newData, size_t index)
 Sets the 64 bits integer at the given index. More...
 
void setInt8 (char newData, size_t index)
 
void setInt8 (char newData, size_t index)
 Sets the 8 bits integer at the given index. More...
 
void setString (std::string newData, size_t index)
 
void setString (std::string newData, size_t index)
 Sets the NULL-terminated string at the given index. More...
 
void setString (char *newData, size_t size, size_t index)
 Sets the NULL-terminated string at the given index. More...
 
void setString (char *newData, size_t size, size_t index)
 

Protected Attributes

char * data
 Holds the data of this box. More...
 
unsigned int data_size
 Currently reserved size. More...
 
bool managed
 If false, will not attempt to resize/free the data pointer. More...
 
unsigned int payloadOffset
 The offset of the payload with regards to the data. More...
 

Constructor & Destructor Documentation

MP4::Box::Box ( char *  datapointer = 0,
bool  manage = true 
)

Creates a new box, optionally using the indicated pointer for storage.

If manage is set to true, the pointer will be realloc'ed when the box needs to be resized. If the datapointer is NULL, manage is assumed to be true even if explicitly given as false. If managed, the pointer will be free'd upon destruction.

MP4::Box::Box ( const Box rs)
MP4::Box::~Box ( )

If managed, this will free the data pointer.

MP4::Box::Box ( char *  datapointer = 0,
bool  manage = true 
)
MP4::Box::Box ( const Box rs)
MP4::Box::~Box ( )

Member Function Documentation

char * MP4::Box::asBox ( )

Returns a copy of the data pointer.

char* MP4::Box::asBox ( )
uint64_t MP4::Box::boxedSize ( )

Returns the total boxed size of this box, including the header.

uint64_t MP4::Box::boxedSize ( )
void MP4::Box::clear ( )
void MP4::Box::clear ( )

Makes this box managed if it wasn't already, resetting the internal storage to 8 bytes (the minimum).

If this box wasn't managed, the original data is left intact - otherwise it is free'd. If it was somehow impossible to allocate 8 bytes (should never happen), this will cause segfaults later.

Box & MP4::Box::getBox ( size_t  index)
protected

Gets a reference to the box at the given index.

Do not store or copy this reference, for there will be raptors. Will attempt to resize if out of range. Returns an 8-byte error box if resizing failed.

Box& MP4::Box::getBox ( size_t  index)
protected
size_t MP4::Box::getBoxLen ( size_t  index)
protected

Returns the size of the box at the given position.

Returns undefined values if there is no box at the given position. Returns 0 if out of range.

size_t MP4::Box::getBoxLen ( size_t  index)
protected
short MP4::Box::getInt16 ( size_t  index)
protected
short MP4::Box::getInt16 ( size_t  index)
protected

Gets the 16 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Returns zero if resizing failed.

uint32_t MP4::Box::getInt24 ( size_t  index)
protected

Gets the 24 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Returns zero if resizing failed.

uint32_t MP4::Box::getInt24 ( size_t  index)
protected
uint32_t MP4::Box::getInt32 ( size_t  index)
protected

Gets the 32 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Returns zero if resizing failed.

uint32_t MP4::Box::getInt32 ( size_t  index)
protected
uint64_t MP4::Box::getInt64 ( size_t  index)
protected

Gets the 64 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Returns zero if resizing failed.

uint64_t MP4::Box::getInt64 ( size_t  index)
protected
char MP4::Box::getInt8 ( size_t  index)
protected
char MP4::Box::getInt8 ( size_t  index)
protected

Gets the 8 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Returns zero if resizing failed.

char * MP4::Box::getString ( size_t  index)
protected

Gets the NULL-terminated string at the given index.

Will attempt to resize if the string is out of range. Returns null if resizing failed.

char* MP4::Box::getString ( size_t  index)
protected
size_t MP4::Box::getStringLen ( size_t  index)
protected
size_t MP4::Box::getStringLen ( size_t  index)
protected

Returns the length of the NULL-terminated string at the given index.

Returns 0 if out of range.

std::string MP4::Box::getType ( )

Returns the values at byte positions 4 through 7.

std::string MP4::Box::getType ( )
bool MP4::Box::isType ( const char *  boxType)
bool MP4::Box::isType ( const char *  boxType)

Returns true if the given 4-byte boxtype is equal to the values at byte positions 4 through 7.

Box & MP4::Box::operator= ( const Box rs)
Box& MP4::Box::operator= ( const Box rs)
char* MP4::Box::payload ( )
char * MP4::Box::payload ( )
uint64_t MP4::Box::payloadSize ( )
uint64_t MP4::Box::payloadSize ( )

Retruns the size of the payload of thix box, excluding the header.

This value is defined as boxedSize() - 8.

bool MP4::Box::read ( FILE *  newData)
bool MP4::Box::read ( FILE *  newData)
bool MP4::Box::read ( std::string &  newData)

Reads out a whole box (if possible) from newData, copying to the internal data storage and removing from the input string.

Returns
True on success, false otherwise.
bool MP4::Box::read ( std::string &  newData)
bool MP4::Box::reserve ( size_t  position,
size_t  current,
size_t  wanted 
)
protected

Attempts to reserve enough space for wanted bytes of data at given position, where current bytes of data is now reserved.

This will move any existing data behind the currently reserved space to the proper location after reserving.

Returns
True on success, false otherwise.
bool MP4::Box::reserve ( size_t  position,
size_t  current,
size_t  wanted 
)
protected
void MP4::Box::setBox ( Box newEntry,
size_t  index 
)
protected
void MP4::Box::setBox ( Box newEntry,
size_t  index 
)
protected

Replaces the existing box at the given index by the new box newEntry.

Will resize if needed, will reserve new space if out of range.

void MP4::Box::setInt16 ( short  newData,
size_t  index 
)
protected
void MP4::Box::setInt16 ( short  newData,
size_t  index 
)
protected

Sets the 16 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Fails silently if resizing failed.

void MP4::Box::setInt24 ( uint32_t  newData,
size_t  index 
)
protected

Sets the 24 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Fails silently if resizing failed.

void MP4::Box::setInt24 ( uint32_t  newData,
size_t  index 
)
protected
void MP4::Box::setInt32 ( uint32_t  newData,
size_t  index 
)
protected
void MP4::Box::setInt32 ( uint32_t  newData,
size_t  index 
)
protected

Sets the 32 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Fails silently if resizing failed.

void MP4::Box::setInt64 ( uint64_t  newData,
size_t  index 
)
protected

Sets the 64 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Fails silently if resizing failed.

void MP4::Box::setInt64 ( uint64_t  newData,
size_t  index 
)
protected
void MP4::Box::setInt8 ( char  newData,
size_t  index 
)
protected
void MP4::Box::setInt8 ( char  newData,
size_t  index 
)
protected

Sets the 8 bits integer at the given index.

Attempts to resize the data pointer if the index is out of range. Fails silently if resizing failed.

void MP4::Box::setString ( std::string  newData,
size_t  index 
)
protected
void MP4::Box::setString ( std::string  newData,
size_t  index 
)
protected

Sets the NULL-terminated string at the given index.

Will attempt to resize if the string doesn't fit. Fails silently if resizing failed.

void MP4::Box::setString ( char *  newData,
size_t  size,
size_t  index 
)
protected

Sets the NULL-terminated string at the given index.

Will attempt to resize if the string doesn't fit. Fails silently if resizing failed.

void MP4::Box::setString ( char *  newData,
size_t  size,
size_t  index 
)
protected
std::string MP4::Box::toPrettyString ( uint32_t  indent = 0)
std::string MP4::Box::toPrettyString ( uint32_t  indent = 0)

Attempts to typecast this Box to a more specific type and call the toPrettyString() function of that type.

If this failed, it will print out a message saying pretty-printing is not implemented for boxtype.

Todo:
Implement hexdump for unimplemented boxes?

Field Documentation

char * MP4::Box::data
protected

Holds the data of this box.

unsigned int MP4::Box::data_size
protected

Currently reserved size.

bool MP4::Box::managed
protected

If false, will not attempt to resize/free the data pointer.

unsigned int MP4::Box::payloadOffset
protected

The offset of the payload with regards to the data.


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