Added (simplistic) compatibility for QuickTime-style ISOBMF files
This commit is contained in:
parent
7c36de707f
commit
a2700aad17
2 changed files with 28 additions and 7 deletions
|
@ -1357,7 +1357,11 @@ namespace MP4{
|
||||||
|
|
||||||
void HDLR::setName(std::string newName){setString(newName, 24);}
|
void HDLR::setName(std::string newName){setString(newName, 24);}
|
||||||
|
|
||||||
std::string HDLR::getName(){return getString(24);}
|
std::string HDLR::getName(){
|
||||||
|
std::string tmpName = getString(24);
|
||||||
|
if (tmpName[0] == tmpName.size()-1){tmpName.erase(0, 1);}
|
||||||
|
return tmpName;
|
||||||
|
}
|
||||||
|
|
||||||
std::string HDLR::toPrettyString(uint32_t indent){
|
std::string HDLR::toPrettyString(uint32_t indent){
|
||||||
std::stringstream r;
|
std::stringstream r;
|
||||||
|
@ -2695,7 +2699,11 @@ namespace MP4{
|
||||||
setString(newCompressorName, 42);
|
setString(newCompressorName, 42);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string VisualSampleEntry::getCompressorName(){return getString(42);}
|
std::string VisualSampleEntry::getCompressorName(){
|
||||||
|
std::string tmpName = getString(42);
|
||||||
|
if (tmpName[0] == tmpName.size()-1){tmpName.erase(0, 1);}
|
||||||
|
return tmpName;
|
||||||
|
}
|
||||||
|
|
||||||
void VisualSampleEntry::setDepth(uint16_t newDepth){setInt16(newDepth, 74);}
|
void VisualSampleEntry::setDepth(uint16_t newDepth){setInt16(newDepth, 74);}
|
||||||
|
|
||||||
|
@ -2839,6 +2847,8 @@ namespace MP4{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t AudioSampleEntry::getVersion() const{return getInt16(8);}
|
||||||
|
|
||||||
void AudioSampleEntry::setCodec(const char *newCodec){memcpy(data + 4, newCodec, 4);}
|
void AudioSampleEntry::setCodec(const char *newCodec){memcpy(data + 4, newCodec, 4);}
|
||||||
|
|
||||||
void AudioSampleEntry::setChannelCount(uint16_t newChannelCount){
|
void AudioSampleEntry::setChannelCount(uint16_t newChannelCount){
|
||||||
|
@ -2861,9 +2871,9 @@ namespace MP4{
|
||||||
|
|
||||||
uint32_t AudioSampleEntry::getSampleRate(){return getInt32(24) >> 16;}
|
uint32_t AudioSampleEntry::getSampleRate(){return getInt32(24) >> 16;}
|
||||||
|
|
||||||
void AudioSampleEntry::setCodecBox(Box &newBox){setBox(newBox, 28);}
|
void AudioSampleEntry::setCodecBox(Box &newBox){setBox(newBox, getBoxOffset());}
|
||||||
|
|
||||||
Box &AudioSampleEntry::getCodecBox(){return getBox(28);}
|
Box &AudioSampleEntry::getCodecBox(){return getBox(getBoxOffset());}
|
||||||
|
|
||||||
/*LTS-START*/
|
/*LTS-START*/
|
||||||
Box &AudioSampleEntry::getSINFBox(){
|
Box &AudioSampleEntry::getSINFBox(){
|
||||||
|
@ -2872,12 +2882,21 @@ namespace MP4{
|
||||||
}
|
}
|
||||||
/*LTS-END*/
|
/*LTS-END*/
|
||||||
|
|
||||||
|
size_t AudioSampleEntry::getBoxOffset() const{
|
||||||
|
size_t offset = 28;
|
||||||
|
//Quicktime-specific box versions. We should really only do this if we see a "qt " ftyp
|
||||||
|
/// \TODO Do this properly at some point :-(
|
||||||
|
if (getVersion() == 1){offset = 28 + 16;}
|
||||||
|
if (getVersion() == 2){offset = 28 + 36;}
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
size_t AudioSampleEntry::getBoxEntryCount(){
|
size_t AudioSampleEntry::getBoxEntryCount(){
|
||||||
if (payloadSize() < 36){// if the EntryBox is not big enough to hold any box
|
if (payloadSize() < 36){// if the EntryBox is not big enough to hold any box
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
size_t offset = 28;
|
size_t offset = getBoxOffset();
|
||||||
while (offset <= payloadSize() - 8){
|
while (offset <= payloadSize() - 8){
|
||||||
offset += getBoxLen(offset);
|
offset += getBoxLen(offset);
|
||||||
count++;
|
count++;
|
||||||
|
@ -2889,7 +2908,7 @@ namespace MP4{
|
||||||
static Box ret = Box((char *)"\000\000\000\010erro", false);
|
static Box ret = Box((char *)"\000\000\000\010erro", false);
|
||||||
if (index >= getBoxEntryCount()){return ret;}
|
if (index >= getBoxEntryCount()){return ret;}
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
size_t offset = 28;
|
size_t offset = getBoxOffset();
|
||||||
while (offset < payloadSize()){
|
while (offset < payloadSize()){
|
||||||
if (count == index){return getBox(offset);}
|
if (count == index){return getBox(offset);}
|
||||||
offset += getBoxLen(offset);
|
offset += getBoxLen(offset);
|
||||||
|
@ -2904,7 +2923,7 @@ namespace MP4{
|
||||||
WARN_MSG("This function can not leave empty spaces, appending at index %zu nstead!", index);
|
WARN_MSG("This function can not leave empty spaces, appending at index %zu nstead!", index);
|
||||||
}
|
}
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
size_t offset = 28;
|
size_t offset = getBoxOffset();
|
||||||
while (offset < payloadSize()){
|
while (offset < payloadSize()){
|
||||||
if (count == index){
|
if (count == index){
|
||||||
setBox(box, offset);
|
setBox(box, offset);
|
||||||
|
|
|
@ -714,6 +714,7 @@ namespace MP4{
|
||||||
///\todo set default values
|
///\todo set default values
|
||||||
AudioSampleEntry();
|
AudioSampleEntry();
|
||||||
AudioSampleEntry(const DTSC::Meta &M, size_t idx);
|
AudioSampleEntry(const DTSC::Meta &M, size_t idx);
|
||||||
|
uint16_t getVersion() const;
|
||||||
void initialize();
|
void initialize();
|
||||||
void setCodec(const char *newCodec);
|
void setCodec(const char *newCodec);
|
||||||
void setChannelCount(uint16_t newChannelCount);
|
void setChannelCount(uint16_t newChannelCount);
|
||||||
|
@ -725,6 +726,7 @@ namespace MP4{
|
||||||
void setSampleRate(uint32_t newSampleRate);
|
void setSampleRate(uint32_t newSampleRate);
|
||||||
uint16_t toAACInit();
|
uint16_t toAACInit();
|
||||||
uint32_t getSampleRate();
|
uint32_t getSampleRate();
|
||||||
|
size_t getBoxOffset() const;
|
||||||
void setCodecBox(Box &newBox);
|
void setCodecBox(Box &newBox);
|
||||||
Box &getCodecBox();
|
Box &getCodecBox();
|
||||||
Box &getSINFBox(); /*LTS*/
|
Box &getSINFBox(); /*LTS*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue