From ddb681fb8c8d61f273018238da4b7bf3d72e7e0d Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 4 Mar 2013 22:02:10 +0100 Subject: [PATCH] MP4 lib signedness fixes. --- lib/mp4.cpp | 278 ++++++++++++++++++++++++++-------------------------- lib/mp4.h | 268 +++++++++++++++++++++++++------------------------- 2 files changed, 273 insertions(+), 273 deletions(-) diff --git a/lib/mp4.cpp b/lib/mp4.cpp index 94575003..0095868a 100644 --- a/lib/mp4.cpp +++ b/lib/mp4.cpp @@ -4,7 +4,7 @@ #include "mp4.h" #include "json.h" -#define Int64 long long int +#define Int64 uint64_t /// Contains all MP4 format related code. namespace MP4 { @@ -50,7 +50,7 @@ namespace MP4 { } if (newData.size() > 4){ payloadOffset = 8; - long long int size = ntohl(((int*)newData.c_str())[0]); + uint64_t size = ntohl(((int*)newData.c_str())[0]); if (size == 1){ if (newData.size() > 16){ size = 0 + ntohl(((int*)newData.c_str())[2]); @@ -77,16 +77,16 @@ namespace MP4 { } /// Returns the total boxed size of this box, including the header. - long long int Box::boxedSize(){ + uint64_t Box::boxedSize(){ if (payloadOffset == 16){ - return ((long long int)ntohl(((int*)data)[2]) << 32) + ntohl(((int*)data)[3]); + return ((uint64_t)ntohl(((int*)data)[2]) << 32) + ntohl(((int*)data)[3]); } return ntohl(((int*)data)[0]); } /// Retruns the size of the payload of thix box, excluding the header. /// This value is defined as boxedSize() - 8. - long long int Box::payloadSize(){ + uint64_t Box::payloadSize(){ return boxedSize() - payloadOffset; } @@ -217,7 +217,7 @@ namespace MP4 { /// 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 Box::setInt24(long newData, size_t index){ + void Box::setInt24(uint32_t newData, size_t index){ index += payloadOffset; if (index + 2 >= boxedSize()){ if ( !reserve(index, 0, 3)){ @@ -232,7 +232,7 @@ namespace MP4 { /// 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. - long Box::getInt24(size_t index){ + uint32_t Box::getInt24(size_t index){ index += payloadOffset; if (index + 2 >= boxedSize()){ if ( !reserve(index, 0, 3)){ @@ -240,7 +240,7 @@ namespace MP4 { } setInt24(0, index - payloadOffset); } - long result = data[index]; + uint32_t result = data[index]; result <<= 8; result += data[index + 1]; result <<= 8; @@ -251,7 +251,7 @@ namespace MP4 { /// 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 Box::setInt32(long newData, size_t index){ + void Box::setInt32(uint32_t newData, size_t index){ index += payloadOffset; if (index + 3 >= boxedSize()){ if ( !reserve(index, 0, 4)){ @@ -265,7 +265,7 @@ namespace MP4 { /// 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. - long Box::getInt32(size_t index){ + uint32_t Box::getInt32(size_t index){ index += payloadOffset; if (index + 3 >= boxedSize()){ if ( !reserve(index, 0, 4)){ @@ -273,7 +273,7 @@ namespace MP4 { } setInt32(0, index - payloadOffset); } - long result; + uint32_t result; memcpy((char*) &result, data + index, 4); return ntohl(result); } @@ -463,19 +463,19 @@ namespace MP4 { return getInt8(0); } - void ABST::setFlags(long newFlags){ + void ABST::setFlags(uint32_t newFlags){ setInt24(newFlags, 1); } - long ABST::getFlags(){ + uint32_t ABST::getFlags(){ return getInt24(1); } - void ABST::setBootstrapinfoVersion(long newVersion){ + void ABST::setBootstrapinfoVersion(uint32_t newVersion){ setInt32(newVersion, 4); } - long ABST::getBootstrapinfoVersion(){ + uint32_t ABST::getBootstrapinfoVersion(){ return getInt32(4); } @@ -507,11 +507,11 @@ namespace MP4 { return (getInt8(8) & 0x08); } - void ABST::setTimeScale(long newScale){ + void ABST::setTimeScale(uint32_t newScale){ setInt32(newScale, 9); } - long ABST::getTimeScale(){ + uint32_t ABST::getTimeScale(){ return getInt32(9); } @@ -539,12 +539,12 @@ namespace MP4 { return getString(29); } - long ABST::getServerEntryCount(){ + uint32_t ABST::getServerEntryCount(){ int countLoc = 29 + getStringLen(29) + 1; return getInt8(countLoc); } - void ABST::setServerEntry(std::string & newEntry, long no){ + void ABST::setServerEntry(std::string & newEntry, uint32_t no){ int countLoc = 29 + getStringLen(29) + 1; int tempLoc = countLoc + 1; //attempt to reach the wanted position @@ -568,7 +568,7 @@ namespace MP4 { } ///\return Empty string if no > serverEntryCount(), serverEntry[no] otherwise. - const char* ABST::getServerEntry(long no){ + const char* ABST::getServerEntry(uint32_t no){ if (no + 1 > getServerEntryCount()){ return ""; } @@ -579,7 +579,7 @@ namespace MP4 { return getString(tempLoc); } - long ABST::getQualityEntryCount(){ + uint32_t ABST::getQualityEntryCount(){ int countLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ countLoc += getStringLen(countLoc) + 1; @@ -587,7 +587,7 @@ namespace MP4 { return getInt8(countLoc); } - void ABST::setQualityEntry(std::string & newEntry, long no){ + void ABST::setQualityEntry(std::string & newEntry, uint32_t no){ int countLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ countLoc += getStringLen(countLoc) + 1; @@ -613,7 +613,7 @@ namespace MP4 { setString(newEntry, tempLoc); } - const char* ABST::getQualityEntry(long no){ + const char* ABST::getQualityEntry(uint32_t no){ if (no > getQualityEntryCount()){ return ""; } @@ -629,7 +629,7 @@ namespace MP4 { } void ABST::setDrmData(std::string newDrm){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -641,7 +641,7 @@ namespace MP4 { } char* ABST::getDrmData(){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -653,7 +653,7 @@ namespace MP4 { } void ABST::setMetaData(std::string newMetaData){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -666,7 +666,7 @@ namespace MP4 { } char* ABST::getMetaData(){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -678,8 +678,8 @@ namespace MP4 { return getString(tempLoc); } - long ABST::getSegmentRunTableCount(){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t ABST::getSegmentRunTableCount(){ + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -692,8 +692,8 @@ namespace MP4 { return getInt8(tempLoc); } - void ABST::setSegmentRunTable(ASRT & newSegment, long no){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + void ABST::setSegmentRunTable(ASRT & newSegment, uint32_t no){ + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -728,13 +728,13 @@ namespace MP4 { setBox(newSegment, tempLoc); } - ASRT & ABST::getSegmentRunTable(long no){ + ASRT & ABST::getSegmentRunTable(uint32_t no){ static Box result; if (no > getSegmentRunTableCount()){ static Box res; return (ASRT&)res; } - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -752,8 +752,8 @@ namespace MP4 { return (ASRT&)getBox(tempLoc); } - long ABST::getFragmentRunTableCount(){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t ABST::getFragmentRunTableCount(){ + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -769,8 +769,8 @@ namespace MP4 { return getInt8(tempLoc); } - void ABST::setFragmentRunTable(AFRT & newFragment, long no){ - long tempLoc = 29 + getStringLen(29) + 1 + 1; + void ABST::setFragmentRunTable(AFRT & newFragment, uint32_t no){ + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -808,13 +808,13 @@ namespace MP4 { setBox(newFragment, tempLoc); } - AFRT & ABST::getFragmentRunTable(long no){ + AFRT & ABST::getFragmentRunTable(uint32_t no){ static Box result; if (no >= getFragmentRunTableCount()){ static Box res; return (AFRT&)res; } - long tempLoc = 29 + getStringLen(29) + 1 + 1; + uint32_t tempLoc = 29 + getStringLen(29) + 1 + 1; for (int i = 0; i < getServerEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; } @@ -835,7 +835,7 @@ namespace MP4 { return (AFRT&)getBox(tempLoc); } - std::string ABST::toPrettyString(long indent){ + std::string ABST::toPrettyString(uint32_t indent){ std::stringstream r; r << std::string(indent, ' ') << "[abst] Bootstrap Info (" << boxedSize() << ")" << std::endl; r << std::string(indent + 1, ' ') << "Version " << (int)getVersion() << std::endl; @@ -887,31 +887,31 @@ namespace MP4 { setInt8(newVersion, 0); } - long AFRT::getVersion(){ + uint32_t AFRT::getVersion(){ return getInt8(0); } - void AFRT::setUpdate(long newUpdate){ + void AFRT::setUpdate(uint32_t newUpdate){ setInt24(newUpdate, 1); } - long AFRT::getUpdate(){ + uint32_t AFRT::getUpdate(){ return getInt24(1); } - void AFRT::setTimeScale(long newScale){ + void AFRT::setTimeScale(uint32_t newScale){ setInt32(newScale, 4); } - long AFRT::getTimeScale(){ + uint32_t AFRT::getTimeScale(){ return getInt32(4); } - long AFRT::getQualityEntryCount(){ + uint32_t AFRT::getQualityEntryCount(){ return getInt8(8); } - void AFRT::setQualityEntry(std::string & newEntry, long no){ + void AFRT::setQualityEntry(std::string & newEntry, uint32_t no){ int countLoc = 8; int tempLoc = countLoc + 1; //attempt to reach the wanted position @@ -934,7 +934,7 @@ namespace MP4 { setString(newEntry, tempLoc); } - const char* AFRT::getQualityEntry(long no){ + const char* AFRT::getQualityEntry(uint32_t no){ if (no + 1 > getQualityEntryCount()){ return ""; } @@ -945,7 +945,7 @@ namespace MP4 { return getString(tempLoc); } - long AFRT::getFragmentRunCount(){ + uint32_t AFRT::getFragmentRunCount(){ int tempLoc = 9; for (int i = 0; i < getQualityEntryCount(); ++i){ tempLoc += getStringLen(tempLoc) + 1; @@ -953,7 +953,7 @@ namespace MP4 { return getInt32(tempLoc); } - void AFRT::setFragmentRun(afrt_runtable newRun, long no){ + void AFRT::setFragmentRun(afrt_runtable newRun, uint32_t no){ int tempLoc = 9; for (int i = 0; i < getQualityEntryCount(); ++i){ tempLoc += getStringLen(tempLoc) + 1; @@ -983,7 +983,7 @@ namespace MP4 { } } - afrt_runtable AFRT::getFragmentRun(long no){ + afrt_runtable AFRT::getFragmentRun(uint32_t no){ afrt_runtable res; if (no > getFragmentRunCount()){ return res; @@ -1050,23 +1050,23 @@ namespace MP4 { setInt8(newVersion, 0); } - long ASRT::getVersion(){ + uint32_t ASRT::getVersion(){ return getInt8(0); } - void ASRT::setUpdate(long newUpdate){ + void ASRT::setUpdate(uint32_t newUpdate){ setInt24(newUpdate, 1); } - long ASRT::getUpdate(){ + uint32_t ASRT::getUpdate(){ return getInt24(1); } - long ASRT::getQualityEntryCount(){ + uint32_t ASRT::getQualityEntryCount(){ return getInt8(4); } - void ASRT::setQualityEntry(std::string & newEntry, long no){ + void ASRT::setQualityEntry(std::string & newEntry, uint32_t no){ int countLoc = 4; int tempLoc = countLoc + 1; //attempt to reach the wanted position @@ -1089,7 +1089,7 @@ namespace MP4 { setString(newEntry, tempLoc); } - const char* ASRT::getQualityEntry(long no){ + const char* ASRT::getQualityEntry(uint32_t no){ if (no > getQualityEntryCount()){ return ""; } @@ -1100,7 +1100,7 @@ namespace MP4 { return getString(tempLoc); } - long ASRT::getSegmentRunEntryCount(){ + uint32_t ASRT::getSegmentRunEntryCount(){ int tempLoc = 5; //position of qualityentry count; for (int i = 0; i < getQualityEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; @@ -1108,7 +1108,7 @@ namespace MP4 { return getInt32(tempLoc); } - void ASRT::setSegmentRun(long firstSegment, long fragmentsPerSegment, long no){ + void ASRT::setSegmentRun(uint32_t firstSegment, uint32_t fragmentsPerSegment, uint32_t no){ int tempLoc = 5; //position of qualityentry count; for (int i = 0; i < getQualityEntryCount(); i++){ tempLoc += getStringLen(tempLoc) + 1; @@ -1122,7 +1122,7 @@ namespace MP4 { setInt32(fragmentsPerSegment, tempLoc + 4); } - asrt_runtable ASRT::getSegmentRun(long no){ + asrt_runtable ASRT::getSegmentRun(uint32_t no){ asrt_runtable res; if (no >= getSegmentRunEntryCount()){ return res; @@ -1164,11 +1164,11 @@ namespace MP4 { setInt32(0, 0); } - void MFHD::setSequenceNumber(long newSequenceNumber){ + void MFHD::setSequenceNumber(uint32_t newSequenceNumber){ setInt32(newSequenceNumber, 4); } - long MFHD::getSequenceNumber(){ + uint32_t MFHD::getSequenceNumber(){ return getInt32(4); } @@ -1183,7 +1183,7 @@ namespace MP4 { memcpy(data + 4, "moof", 4); } - long MOOF::getContentCount(){ + uint32_t MOOF::getContentCount(){ int res = 0; int tempLoc = 0; while (tempLoc < boxedSize() - 8){ @@ -1193,7 +1193,7 @@ namespace MP4 { return res; } - void MOOF::setContent(Box & newContent, long no){ + void MOOF::setContent(Box & newContent, uint32_t no){ int tempLoc = 0; int contentCount = getContentCount(); for (int i = 0; i < no; i++){ @@ -1211,7 +1211,7 @@ namespace MP4 { setBox(newContent, tempLoc); } - Box & MOOF::getContent(long no){ + Box & MOOF::getContent(uint32_t no){ static Box ret = Box((char*)"\000\000\000\010erro", false); if (no > getContentCount()){ return ret; @@ -1243,7 +1243,7 @@ namespace MP4 { memcpy(data + 4, "traf", 4); } - long TRAF::getContentCount(){ + uint32_t TRAF::getContentCount(){ int res = 0; int tempLoc = 0; while (tempLoc < boxedSize() - 8){ @@ -1253,7 +1253,7 @@ namespace MP4 { return res; } - void TRAF::setContent(Box & newContent, long no){ + void TRAF::setContent(Box & newContent, uint32_t no){ int tempLoc = 0; int contentCount = getContentCount(); for (int i = 0; i < no; i++){ @@ -1271,7 +1271,7 @@ namespace MP4 { setBox(newContent, tempLoc); } - Box & TRAF::getContent(long no){ + Box & TRAF::getContent(uint32_t no){ static Box ret = Box((char*)"\000\000\000\010erro", false); if (no > getContentCount()){ return ret; @@ -1303,21 +1303,21 @@ namespace MP4 { memcpy(data + 4, "trun", 4); } - void TRUN::setFlags(long newFlags){ + void TRUN::setFlags(uint32_t newFlags){ setInt24(newFlags, 1); } - long TRUN::getFlags(){ + uint32_t TRUN::getFlags(){ return getInt24(1); } - void TRUN::setDataOffset(long newOffset){ + void TRUN::setDataOffset(uint32_t newOffset){ if (getFlags() & trundataOffset){ setInt32(newOffset, 8); } } - long TRUN::getDataOffset(){ + uint32_t TRUN::getDataOffset(){ if (getFlags() & trundataOffset){ return getInt32(8); }else{ @@ -1325,7 +1325,7 @@ namespace MP4 { } } - void TRUN::setFirstSampleFlags(long newSampleFlags){ + void TRUN::setFirstSampleFlags(uint32_t newSampleFlags){ if ( !(getFlags() & trunfirstSampleFlags)){ return; } @@ -1336,7 +1336,7 @@ namespace MP4 { } } - long TRUN::getFirstSampleFlags(){ + uint32_t TRUN::getFirstSampleFlags(){ if ( !(getFlags() & trunfirstSampleFlags)){ return 0; } @@ -1347,13 +1347,13 @@ namespace MP4 { } } - long TRUN::getSampleInformationCount(){ + uint32_t TRUN::getSampleInformationCount(){ return getInt32(4); } - void TRUN::setSampleInformation(trunSampleInformation newSample, long no){ - long flags = getFlags(); - long sampInfoSize = 0; + void TRUN::setSampleInformation(trunSampleInformation newSample, uint32_t no){ + uint32_t flags = getFlags(); + uint32_t sampInfoSize = 0; if (flags & trunsampleDuration){ sampInfoSize += 4; } @@ -1366,14 +1366,14 @@ namespace MP4 { if (flags & trunsampleOffsets){ sampInfoSize += 4; } - long offset = 8; + uint32_t offset = 8; if (flags & trundataOffset){ offset += 4; } if (flags & trunfirstSampleFlags){ offset += 4; } - long innerOffset = 0; + uint32_t innerOffset = 0; if (flags & trunsampleDuration){ setInt32(newSample.sampleDuration, offset + no * sampInfoSize + innerOffset); innerOffset += 4; @@ -1395,7 +1395,7 @@ namespace MP4 { } } - trunSampleInformation TRUN::getSampleInformation(long no){ + trunSampleInformation TRUN::getSampleInformation(uint32_t no){ trunSampleInformation ret; ret.sampleDuration = 0; ret.sampleSize = 0; @@ -1404,8 +1404,8 @@ namespace MP4 { if (getSampleInformationCount() < no + 1){ return ret; } - long flags = getFlags(); - long sampInfoSize = 0; + uint32_t flags = getFlags(); + uint32_t sampInfoSize = 0; if (flags & trunsampleDuration){ sampInfoSize += 4; } @@ -1418,14 +1418,14 @@ namespace MP4 { if (flags & trunsampleOffsets){ sampInfoSize += 4; } - long offset = 8; + uint32_t offset = 8; if (flags & trundataOffset){ offset += 4; } if (flags & trunfirstSampleFlags){ offset += 4; } - long innerOffset = 0; + uint32_t innerOffset = 0; if (flags & trunsampleDuration){ ret.sampleDuration = getInt32(offset + no * sampInfoSize + innerOffset); innerOffset += 4; @@ -1445,12 +1445,12 @@ namespace MP4 { return ret; } - std::string TRUN::toPrettyString(long indent){ + std::string TRUN::toPrettyString(uint32_t indent){ std::stringstream r; r << std::string(indent, ' ') << "[trun] Track Fragment Run (" << boxedSize() << ")" << std::endl; r << std::string(indent + 1, ' ') << "Version " << (int)getInt8(0) << std::endl; - long flags = getFlags(); + uint32_t flags = getFlags(); r << std::string(indent + 1, ' ') << "Flags"; if (flags & trundataOffset){ r << " dataOffset"; @@ -1500,7 +1500,7 @@ namespace MP4 { return r.str(); } - std::string prettySampleFlags(long flag){ + std::string prettySampleFlags(uint32_t flag){ std::stringstream r; if (flag & noIPicture){ r << " noIPicture"; @@ -1532,29 +1532,29 @@ namespace MP4 { memcpy(data + 4, "tfhd", 4); } - void TFHD::setFlags(long newFlags){ + void TFHD::setFlags(uint32_t newFlags){ setInt24(newFlags, 1); } - long TFHD::getFlags(){ + uint32_t TFHD::getFlags(){ return getInt24(1); } - void TFHD::setTrackID(long newID){ + void TFHD::setTrackID(uint32_t newID){ setInt32(newID, 4); } - long TFHD::getTrackID(){ + uint32_t TFHD::getTrackID(){ return getInt32(4); } - void TFHD::setBaseDataOffset(long long newOffset){ + void TFHD::setBaseDataOffset(uint64_t newOffset){ if (getFlags() & tfhdBaseOffset){ setInt64(newOffset, 8); } } - long long TFHD::getBaseDataOffset(){ + uint64_t TFHD::getBaseDataOffset(){ if (getFlags() & tfhdBaseOffset){ return getInt64(8); }else{ @@ -1562,7 +1562,7 @@ namespace MP4 { } } - void TFHD::setSampleDescriptionIndex(long newIndex){ + void TFHD::setSampleDescriptionIndex(uint32_t newIndex){ if ( !(getFlags() & tfhdSampleDesc)){ return; } @@ -1573,7 +1573,7 @@ namespace MP4 { setInt32(newIndex, offset); } - long TFHD::getSampleDescriptionIndex(){ + uint32_t TFHD::getSampleDescriptionIndex(){ if ( !(getFlags() & tfhdSampleDesc)){ return 0; } @@ -1584,7 +1584,7 @@ namespace MP4 { return getInt32(offset); } - void TFHD::setDefaultSampleDuration(long newDuration){ + void TFHD::setDefaultSampleDuration(uint32_t newDuration){ if ( !(getFlags() & tfhdSampleDura)){ return; } @@ -1598,7 +1598,7 @@ namespace MP4 { setInt32(newDuration, offset); } - long TFHD::getDefaultSampleDuration(){ + uint32_t TFHD::getDefaultSampleDuration(){ if ( !(getFlags() & tfhdSampleDura)){ return 0; } @@ -1612,7 +1612,7 @@ namespace MP4 { return getInt32(offset); } - void TFHD::setDefaultSampleSize(long newSize){ + void TFHD::setDefaultSampleSize(uint32_t newSize){ if ( !(getFlags() & tfhdSampleSize)){ return; } @@ -1629,7 +1629,7 @@ namespace MP4 { setInt32(newSize, offset); } - long TFHD::getDefaultSampleSize(){ + uint32_t TFHD::getDefaultSampleSize(){ if ( !(getFlags() & tfhdSampleSize)){ return 0; } @@ -1646,7 +1646,7 @@ namespace MP4 { return getInt32(offset); } - void TFHD::setDefaultSampleFlags(long newFlags){ + void TFHD::setDefaultSampleFlags(uint32_t newFlags){ if ( !(getFlags() & tfhdSampleFlag)){ return; } @@ -1666,7 +1666,7 @@ namespace MP4 { setInt32(newFlags, offset); } - long TFHD::getDefaultSampleFlags(){ + uint32_t TFHD::getDefaultSampleFlags(){ if ( !(getFlags() & tfhdSampleFlag)){ return 0; } @@ -1686,12 +1686,12 @@ namespace MP4 { return getInt32(offset); } - std::string TFHD::toPrettyString(long indent){ + std::string TFHD::toPrettyString(uint32_t indent){ std::stringstream r; r << std::string(indent, ' ') << "[tfhd] Track Fragment Header (" << boxedSize() << ")" << std::endl; r << std::string(indent + 1, ' ') << "Version " << (int)getInt8(0) << std::endl; - long flags = getFlags(); + uint32_t flags = getFlags(); r << std::string(indent + 1, ' ') << "Flags"; if (flags & tfhdBaseOffset){ r << " BaseOffset"; @@ -1740,19 +1740,19 @@ namespace MP4 { setFlags(0); } - void AFRA::setVersion(long newVersion){ + void AFRA::setVersion(uint32_t newVersion){ setInt8(newVersion, 0); } - long AFRA::getVersion(){ + uint32_t AFRA::getVersion(){ return getInt8(0); } - void AFRA::setFlags(long newFlags){ + void AFRA::setFlags(uint32_t newFlags){ setInt24(newFlags, 1); } - long AFRA::getFlags(){ + uint32_t AFRA::getFlags(){ return getInt24(1); } @@ -1792,19 +1792,19 @@ namespace MP4 { return getInt8(4) & 0x20; } - void AFRA::setTimeScale(long newVal){ + void AFRA::setTimeScale(uint32_t newVal){ setInt32(newVal, 5); } - long AFRA::getTimeScale(){ + uint32_t AFRA::getTimeScale(){ return getInt32(5); } - long AFRA::getEntryCount(){ + uint32_t AFRA::getEntryCount(){ return getInt32(9); } - void AFRA::setEntry(afraentry newEntry, long no){ + void AFRA::setEntry(afraentry newEntry, uint32_t no){ int entrysize = 12; if (getLongOffsets()){ entrysize = 16; @@ -1820,7 +1820,7 @@ namespace MP4 { } } - afraentry AFRA::getEntry(long no){ + afraentry AFRA::getEntry(uint32_t no){ afraentry ret; int entrysize = 12; if (getLongOffsets()){ @@ -1835,7 +1835,7 @@ namespace MP4 { return ret; } - long AFRA::getGlobalEntryCount(){ + uint32_t AFRA::getGlobalEntryCount(){ if ( !getGlobalEntries()){ return 0; } @@ -1846,7 +1846,7 @@ namespace MP4 { return getInt32(13 + entrysize * getEntryCount()); } - void AFRA::setGlobalEntry(globalafraentry newEntry, long no){ + void AFRA::setGlobalEntry(globalafraentry newEntry, uint32_t no){ int offset = 13 + 12 * getEntryCount() + 4; if (getLongOffsets()){ offset = 13 + 16 * getEntryCount() + 4; @@ -1880,7 +1880,7 @@ namespace MP4 { } } - globalafraentry AFRA::getGlobalEntry(long no){ + globalafraentry AFRA::getGlobalEntry(uint32_t no){ globalafraentry ret; int offset = 13 + 12 * getEntryCount() + 4; if (getLongOffsets()){ @@ -1912,7 +1912,7 @@ namespace MP4 { return ret; } - std::string AFRA::toPrettyString(long indent){ + std::string AFRA::toPrettyString(uint32_t indent){ std::stringstream r; r << std::string(indent, ' ') << "[afra] Fragment Random Access (" << boxedSize() << ")" << std::endl; r << std::string(indent + 1, ' ') << "Version " << getVersion() << std::endl; @@ -1922,9 +1922,9 @@ namespace MP4 { r << std::string(indent + 1, ' ') << "Global Entries " << getGlobalEntries() << std::endl; r << std::string(indent + 1, ' ') << "TimeScale " << getTimeScale() << std::endl; - long count = getEntryCount(); + uint32_t count = getEntryCount(); r << std::string(indent + 1, ' ') << "Entries (" << count << ") " << std::endl; - for (long i = 0; i < count; ++i){ + for (uint32_t i = 0; i < count; ++i){ afraentry tmpent = getEntry(i); r << std::string(indent + 1, ' ') << i << ": Time " << tmpent.time << ", Offset " << tmpent.offset << std::endl; } @@ -1932,7 +1932,7 @@ namespace MP4 { if (getGlobalEntries()){ count = getGlobalEntryCount(); r << std::string(indent + 1, ' ') << "Global Entries (" << count << ") " << std::endl; - for (long i = 0; i < count; ++i){ + for (uint32_t i = 0; i < count; ++i){ globalafraentry tmpent = getGlobalEntry(i); r << std::string(indent + 1, ' ') << i << ": T " << tmpent.time << ", S" << tmpent.segment << "F" << tmpent.fragment << ", " << tmpent.afraoffset << "/" << tmpent.offsetfromafra << std::endl; @@ -1947,43 +1947,43 @@ namespace MP4 { setInt8(0xFF, 4); //reserved + 4-bytes NAL length } - void AVCC::setVersion(long newVersion){ + void AVCC::setVersion(uint32_t newVersion){ setInt8(newVersion, 0); } - long AVCC::getVersion(){ + uint32_t AVCC::getVersion(){ return getInt8(0); } - void AVCC::setProfile(long newProfile){ + void AVCC::setProfile(uint32_t newProfile){ setInt8(newProfile, 1); } - long AVCC::getProfile(){ + uint32_t AVCC::getProfile(){ return getInt8(1); } - void AVCC::setCompatibleProfiles(long newCompatibleProfiles){ + void AVCC::setCompatibleProfiles(uint32_t newCompatibleProfiles){ setInt8(newCompatibleProfiles, 2); } - long AVCC::getCompatibleProfiles(){ + uint32_t AVCC::getCompatibleProfiles(){ return getInt8(2); } - void AVCC::setLevel(long newLevel){ + void AVCC::setLevel(uint32_t newLevel){ setInt8(newLevel, 3); } - long AVCC::getLevel(){ + uint32_t AVCC::getLevel(){ return getInt8(3); } - void AVCC::setSPSNumber(long newSPSNumber){ + void AVCC::setSPSNumber(uint32_t newSPSNumber){ setInt8(newSPSNumber, 5); } - long AVCC::getSPSNumber(){ + uint32_t AVCC::getSPSNumber(){ return getInt8(5); } @@ -1994,7 +1994,7 @@ namespace MP4 { } //not null-terminated } - long AVCC::getSPSLen(){ + uint32_t AVCC::getSPSLen(){ return getInt16(6); } @@ -2002,12 +2002,12 @@ namespace MP4 { return payload() + 8; } - void AVCC::setPPSNumber(long newPPSNumber){ + void AVCC::setPPSNumber(uint32_t newPPSNumber){ int offset = 8 + getSPSLen(); setInt8(newPPSNumber, offset); } - long AVCC::getPPSNumber(){ + uint32_t AVCC::getPPSNumber(){ int offset = 8 + getSPSLen(); return getInt8(offset); } @@ -2020,7 +2020,7 @@ namespace MP4 { } //not null-terminated } - long AVCC::getPPSLen(){ + uint32_t AVCC::getPPSLen(){ int offset = 8 + getSPSLen() + 1; return getInt16(offset); } @@ -2030,7 +2030,7 @@ namespace MP4 { return payload() + offset; } - std::string AVCC::toPrettyString(long indent){ + std::string AVCC::toPrettyString(uint32_t indent){ std::stringstream r; r << std::string(indent, ' ') << "[avcC] H.264 Init Data (" << boxedSize() << ")" << std::endl; r << std::string(indent + 1, ' ') << "Version: " << getVersion() << std::endl; @@ -2065,19 +2065,19 @@ namespace MP4 { memcpy(data + 4, "sdtp", 4); } - void SDTP::setVersion(long newVersion){ + void SDTP::setVersion(uint32_t newVersion){ setInt8(newVersion, 0); } - long SDTP::getVersion(){ + uint32_t SDTP::getVersion(){ return getInt8(0); } - void SDTP::setValue(long newValue, size_t index){ + void SDTP::setValue(uint32_t newValue, size_t index){ setInt8(newValue, index); } - long SDTP::getValue(size_t index){ + uint32_t SDTP::getValue(size_t index){ getInt8(index); } } diff --git a/lib/mp4.h b/lib/mp4.h index 7f631dae..053b59e3 100644 --- a/lib/mp4.h +++ b/lib/mp4.h @@ -19,8 +19,8 @@ namespace MP4 { std::string getType(); bool isType(const char* boxType); bool read(std::string & newData); - long long int boxedSize(); - long long int payloadSize(); + uint64_t boxedSize(); + uint64_t payloadSize(); char * asBox(); char * payload(); void clear(); @@ -31,12 +31,12 @@ namespace MP4 { char getInt8(size_t index); void setInt16(short newData, size_t index); short getInt16(size_t index); - void setInt24(long newData, size_t index); - long getInt24(size_t index); - void setInt32(long newData, size_t index); - long getInt32(size_t index); - void setInt64(long long int newData, size_t index); - long long int getInt64(size_t index); + void setInt24(uint32_t newData, size_t index); + uint32_t getInt24(size_t index); + void setInt32(uint32_t newData, size_t index); + uint32_t getInt32(size_t index); + void setInt64(uint64_t newData, size_t index); + uint64_t getInt64(size_t index); //string functions void setString(std::string newData, size_t index); void setString(char* newData, size_t size, size_t index); @@ -57,10 +57,10 @@ namespace MP4 { //Box Class struct afrt_runtable{ - long firstFragment; - long long int firstTimestamp; - long duration; - long discontinuity; + uint32_t firstFragment; + uint64_t firstTimestamp; + uint32_t duration; + uint32_t discontinuity; }; //fragmentRun @@ -69,24 +69,24 @@ namespace MP4 { public: AFRT(); void setVersion(char newVersion); - long getVersion(); - void setUpdate(long newUpdate); - long getUpdate(); - void setTimeScale(long newScale); - long getTimeScale(); - long getQualityEntryCount(); - void setQualityEntry(std::string & newQuality, long no); - const char * getQualityEntry(long no); - long getFragmentRunCount(); - void setFragmentRun(afrt_runtable newRun, long no); - afrt_runtable getFragmentRun(long no); + uint32_t getVersion(); + void setUpdate(uint32_t newUpdate); + uint32_t getUpdate(); + void setTimeScale(uint32_t newScale); + uint32_t getTimeScale(); + uint32_t getQualityEntryCount(); + void setQualityEntry(std::string & newQuality, uint32_t no); + const char * getQualityEntry(uint32_t no); + uint32_t getFragmentRunCount(); + void setFragmentRun(afrt_runtable newRun, uint32_t no); + afrt_runtable getFragmentRun(uint32_t no); std::string toPrettyString(int indent = 0); }; //AFRT Box struct asrt_runtable{ - long firstSegment; - long fragmentsPerSegment; + uint32_t firstSegment; + uint32_t fragmentsPerSegment; }; /// ASRT Box class @@ -94,15 +94,15 @@ namespace MP4 { public: ASRT(); void setVersion(char newVersion); - long getVersion(); - void setUpdate(long newUpdate); - long getUpdate(); - long getQualityEntryCount(); - void setQualityEntry(std::string & newQuality, long no); - const char* getQualityEntry(long no); - long getSegmentRunEntryCount(); - void setSegmentRun(long firstSegment, long fragmentsPerSegment, long no); - asrt_runtable getSegmentRun(long no); + uint32_t getVersion(); + void setUpdate(uint32_t newUpdate); + uint32_t getUpdate(); + uint32_t getQualityEntryCount(); + void setQualityEntry(std::string & newQuality, uint32_t no); + const char* getQualityEntry(uint32_t no); + uint32_t getSegmentRunEntryCount(); + void setSegmentRun(uint32_t firstSegment, uint32_t fragmentsPerSegment, uint32_t no); + asrt_runtable getSegmentRun(uint32_t no); std::string toPrettyString(int indent = 0); }; //ASRT Box @@ -113,49 +113,49 @@ namespace MP4 { ABST(); void setVersion(char newVersion); char getVersion(); - void setFlags(long newFlags); - long getFlags(); - void setBootstrapinfoVersion(long newVersion); - long getBootstrapinfoVersion(); + void setFlags(uint32_t newFlags); + uint32_t getFlags(); + void setBootstrapinfoVersion(uint32_t newVersion); + uint32_t getBootstrapinfoVersion(); void setProfile(char newProfile); char getProfile(); void setLive(bool newLive); bool getLive(); void setUpdate(bool newUpdate); bool getUpdate(); - void setTimeScale(long newTimeScale); - long getTimeScale(); - void setCurrentMediaTime(long long int newTime); - long long int getCurrentMediaTime(); - void setSmpteTimeCodeOffset(long long int newTime); - long long int getSmpteTimeCodeOffset(); + void setTimeScale(uint32_t newTimeScale); + uint32_t getTimeScale(); + void setCurrentMediaTime(uint64_t newTime); + uint64_t getCurrentMediaTime(); + void setSmpteTimeCodeOffset(uint64_t newTime); + uint64_t getSmpteTimeCodeOffset(); void setMovieIdentifier(std::string & newIdentifier); char * getMovieIdentifier(); - long getServerEntryCount(); - void setServerEntry(std::string & entry, long no); - const char * getServerEntry(long no); - long getQualityEntryCount(); - void setQualityEntry(std::string & entry, long no); - const char * getQualityEntry(long no); + uint32_t getServerEntryCount(); + void setServerEntry(std::string & entry, uint32_t no); + const char * getServerEntry(uint32_t no); + uint32_t getQualityEntryCount(); + void setQualityEntry(std::string & entry, uint32_t no); + const char * getQualityEntry(uint32_t no); void setDrmData(std::string newDrm); char * getDrmData(); void setMetaData(std::string newMetaData); char * getMetaData(); - long getSegmentRunTableCount(); - void setSegmentRunTable(ASRT & table, long no); - ASRT & getSegmentRunTable(long no); - long getFragmentRunTableCount(); - void setFragmentRunTable(AFRT & table, long no); - AFRT & getFragmentRunTable(long no); - std::string toPrettyString(long indent = 0); + uint32_t getSegmentRunTableCount(); + void setSegmentRunTable(ASRT & table, uint32_t no); + ASRT & getSegmentRunTable(uint32_t no); + uint32_t getFragmentRunTableCount(); + void setFragmentRunTable(AFRT & table, uint32_t no); + AFRT & getFragmentRunTable(uint32_t no); + std::string toPrettyString(uint32_t indent = 0); }; //ABST Box class MFHD: public Box{ public: MFHD(); - void setSequenceNumber(long newSequenceNumber); - long getSequenceNumber(); + void setSequenceNumber(uint32_t newSequenceNumber); + uint32_t getSequenceNumber(); std::string toPrettyString(int indent = 0); }; //MFHD Box @@ -163,9 +163,9 @@ namespace MP4 { class MOOF: public Box{ public: MOOF(); - long getContentCount(); - void setContent(Box & newContent, long no); - Box & getContent(long no); + uint32_t getContentCount(); + void setContent(Box & newContent, uint32_t no); + Box & getContent(uint32_t no); std::string toPrettyString(int indent = 0); }; //MOOF Box @@ -173,18 +173,18 @@ namespace MP4 { class TRAF: public Box{ public: TRAF(); - long getContentCount(); - void setContent(Box & newContent, long no); - Box & getContent(long no); + uint32_t getContentCount(); + void setContent(Box & newContent, uint32_t no); + Box & getContent(uint32_t no); std::string toPrettyString(int indent = 0); }; //TRAF Box struct trunSampleInformation{ - long sampleDuration; - long sampleSize; - long sampleFlags; - long sampleOffset; + uint32_t sampleDuration; + uint32_t sampleSize; + uint32_t sampleFlags; + uint32_t sampleOffset; }; enum trunflags{ trundataOffset = 0x00000001, @@ -205,20 +205,20 @@ namespace MP4 { isKeySample = 0x00000000, MUST_BE_PRESENT = 0x1 }; - std::string prettySampleFlags(long flag); + std::string prettySampleFlags(uint32_t flag); class TRUN: public Box{ public: TRUN(); - void setFlags(long newFlags); - long getFlags(); - void setDataOffset(long newOffset); - long getDataOffset(); - void setFirstSampleFlags(long newSampleFlags); - long getFirstSampleFlags(); - long getSampleInformationCount(); - void setSampleInformation(trunSampleInformation newSample, long no); - trunSampleInformation getSampleInformation(long no); - std::string toPrettyString(long indent = 0); + void setFlags(uint32_t newFlags); + uint32_t getFlags(); + void setDataOffset(uint32_t newOffset); + uint32_t getDataOffset(); + void setFirstSampleFlags(uint32_t newSampleFlags); + uint32_t getFirstSampleFlags(); + uint32_t getSampleInformationCount(); + void setSampleInformation(trunSampleInformation newSample, uint32_t no); + trunSampleInformation getSampleInformation(uint32_t no); + std::string toPrettyString(uint32_t indent = 0); }; enum tfhdflags{ @@ -232,91 +232,91 @@ namespace MP4 { class TFHD: public Box{ public: TFHD(); - void setFlags(long newFlags); - long getFlags(); - void setTrackID(long newID); - long getTrackID(); - void setBaseDataOffset(long long newOffset); - long long getBaseDataOffset(); - void setSampleDescriptionIndex(long newIndex); - long getSampleDescriptionIndex(); - void setDefaultSampleDuration(long newDuration); - long getDefaultSampleDuration(); - void setDefaultSampleSize(long newSize); - long getDefaultSampleSize(); - void setDefaultSampleFlags(long newFlags); - long getDefaultSampleFlags(); - std::string toPrettyString(long indent = 0); + void setFlags(uint32_t newFlags); + uint32_t getFlags(); + void setTrackID(uint32_t newID); + uint32_t getTrackID(); + void setBaseDataOffset(uint64_t newOffset); + uint64_t getBaseDataOffset(); + void setSampleDescriptionIndex(uint32_t newIndex); + uint32_t getSampleDescriptionIndex(); + void setDefaultSampleDuration(uint32_t newDuration); + uint32_t getDefaultSampleDuration(); + void setDefaultSampleSize(uint32_t newSize); + uint32_t getDefaultSampleSize(); + void setDefaultSampleFlags(uint32_t newFlags); + uint32_t getDefaultSampleFlags(); + std::string toPrettyString(uint32_t indent = 0); }; struct afraentry{ - long long time; - long long offset; + uint64_t time; + uint64_t offset; }; struct globalafraentry{ - long long time; - long segment; - long fragment; - long long afraoffset; - long long offsetfromafra; + uint64_t time; + uint32_t segment; + uint32_t fragment; + uint64_t afraoffset; + uint64_t offsetfromafra; }; class AFRA: public Box{ public: AFRA(); - void setVersion(long newVersion); - long getVersion(); - void setFlags(long newFlags); - long getFlags(); + void setVersion(uint32_t newVersion); + uint32_t getVersion(); + void setFlags(uint32_t newFlags); + uint32_t getFlags(); void setLongIDs(bool newVal); bool getLongIDs(); void setLongOffsets(bool newVal); bool getLongOffsets(); void setGlobalEntries(bool newVal); bool getGlobalEntries(); - void setTimeScale(long newVal); - long getTimeScale(); - long getEntryCount(); - void setEntry(afraentry newEntry, long no); - afraentry getEntry(long no); - long getGlobalEntryCount(); - void setGlobalEntry(globalafraentry newEntry, long no); - globalafraentry getGlobalEntry(long no); - std::string toPrettyString(long indent = 0); + void setTimeScale(uint32_t newVal); + uint32_t getTimeScale(); + uint32_t getEntryCount(); + void setEntry(afraentry newEntry, uint32_t no); + afraentry getEntry(uint32_t no); + uint32_t getGlobalEntryCount(); + void setGlobalEntry(globalafraentry newEntry, uint32_t no); + globalafraentry getGlobalEntry(uint32_t no); + std::string toPrettyString(uint32_t indent = 0); }; class AVCC: public Box{ public: AVCC(); - void setVersion(long newVersion); - long getVersion(); - void setProfile(long newProfile); - long getProfile(); - void setCompatibleProfiles(long newCompatibleProfiles); - long getCompatibleProfiles(); - void setLevel(long newLevel); - long getLevel(); - void setSPSNumber(long newSPSNumber); - long getSPSNumber(); + void setVersion(uint32_t newVersion); + uint32_t getVersion(); + void setProfile(uint32_t newProfile); + uint32_t getProfile(); + void setCompatibleProfiles(uint32_t newCompatibleProfiles); + uint32_t getCompatibleProfiles(); + void setLevel(uint32_t newLevel); + uint32_t getLevel(); + void setSPSNumber(uint32_t newSPSNumber); + uint32_t getSPSNumber(); void setSPS(std::string newSPS); - long getSPSLen(); + uint32_t getSPSLen(); char* getSPS(); - void setPPSNumber(long newPPSNumber); - long getPPSNumber(); + void setPPSNumber(uint32_t newPPSNumber); + uint32_t getPPSNumber(); void setPPS(std::string newPPS); - long getPPSLen(); + uint32_t getPPSLen(); char* getPPS(); std::string asAnnexB(); void setPayload(std::string newPayload); - std::string toPrettyString(long indent = 0); + std::string toPrettyString(uint32_t indent = 0); }; class SDTP: public Box{ public: SDTP(); - void setVersion(long newVersion); - long getVersion(); - void setValue(long newValue, size_t index); - long getValue(size_t index); + void setVersion(uint32_t newVersion); + uint32_t getVersion(); + void setValue(uint32_t newValue, size_t index); + uint32_t getValue(size_t index); }; }