Added several DTSC packet convenience functions
This commit is contained in:
parent
4442b330e8
commit
45022f36c9
2 changed files with 70 additions and 0 deletions
|
@ -118,6 +118,7 @@ namespace DTSC {
|
||||||
void reInit(Socket::Connection & src);
|
void reInit(Socket::Connection & src);
|
||||||
void reInit(const char * data_, unsigned int len, bool noCopy = false);
|
void reInit(const char * data_, unsigned int len, bool noCopy = false);
|
||||||
void genericFill(long long packTime, long long packOffset, long long packTrack, const char * packData, long long packDataSize, uint64_t packBytePos, bool isKeyframe);
|
void genericFill(long long packTime, long long packOffset, long long packTrack, const char * packData, long long packDataSize, uint64_t packBytePos, bool isKeyframe);
|
||||||
|
void appendData(const char * appendData, uint32_t appendLen);
|
||||||
void getString(const char * identifier, char *& result, unsigned int & len) const;
|
void getString(const char * identifier, char *& result, unsigned int & len) const;
|
||||||
void getString(const char * identifier, std::string & result) const;
|
void getString(const char * identifier, std::string & result) const;
|
||||||
void getInt(const char * identifier, int & result) const;
|
void getInt(const char * identifier, int & result) const;
|
||||||
|
@ -125,11 +126,15 @@ namespace DTSC {
|
||||||
void getFlag(const char * identifier, bool & result) const;
|
void getFlag(const char * identifier, bool & result) const;
|
||||||
bool getFlag(const char * identifier) const;
|
bool getFlag(const char * identifier) const;
|
||||||
bool hasMember(const char * identifier) const;
|
bool hasMember(const char * identifier) const;
|
||||||
|
void appendNal(const char * appendData, uint32_t appendLen, uint32_t totalLen);
|
||||||
|
void clearKeyFrame();
|
||||||
long long unsigned int getTime() const;
|
long long unsigned int getTime() const;
|
||||||
long int getTrackId() const;
|
long int getTrackId() const;
|
||||||
char * getData() const;
|
char * getData() const;
|
||||||
int getDataLen() const;
|
int getDataLen() const;
|
||||||
int getPayloadLen() const;
|
int getPayloadLen() const;
|
||||||
|
uint32_t getDataStringLen();
|
||||||
|
uint32_t getDataStringLenOffset();
|
||||||
JSON::Value toJSON() const;
|
JSON::Value toJSON() const;
|
||||||
std::string toSummary() const;
|
std::string toSummary() const;
|
||||||
Scan getScan() const;
|
Scan getScan() const;
|
||||||
|
|
|
@ -270,6 +270,71 @@ namespace DTSC {
|
||||||
memcpy(data+offset+11+packDataSize, "\000\000\356", 3);
|
memcpy(data+offset+11+packDataSize, "\000\000\356", 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///clear the keyframe byte.
|
||||||
|
void Packet::clearKeyFrame(){
|
||||||
|
uint32_t offset = 23;
|
||||||
|
while (data[offset] != 'd' && data[offset] != 'k'){
|
||||||
|
switch (data[offset]){
|
||||||
|
case 'o': offset += 17; break;
|
||||||
|
case 'b': offset += 15; break;
|
||||||
|
default:
|
||||||
|
FAIL_MSG("Errrrrrr");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data[offset] == 'k'){
|
||||||
|
data[offset] = 'K';
|
||||||
|
data[offset+16] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Packet::appendData(const char * appendData, uint32_t appendLen){
|
||||||
|
resize(dataLen + appendLen);
|
||||||
|
memcpy(data + dataLen-3, appendData, appendLen);
|
||||||
|
memcpy(data + dataLen-3 + appendLen, "\000\000\356", 3); //end container
|
||||||
|
dataLen += appendLen;
|
||||||
|
Bit::htobl(data+4, Bit::btohl(data +4)+appendLen);
|
||||||
|
uint32_t offset = getDataStringLenOffset();
|
||||||
|
Bit::htobl(data+offset, Bit::btohl(data+offset)+appendLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Packet::appendNal(const char * appendData, uint32_t appendLen, uint32_t totalLen){
|
||||||
|
if(totalLen ==0){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// INFO_MSG("totallen: %d, appendLen: %d",totalLen,appendLen);
|
||||||
|
resize(dataLen + appendLen +4);
|
||||||
|
Bit::htobl(data+dataLen -3, totalLen);
|
||||||
|
memcpy(data + dataLen-3+4, appendData, appendLen);
|
||||||
|
memcpy(data + dataLen-3+4 + appendLen, "\000\000\356", 3); //end container
|
||||||
|
dataLen += appendLen +4;
|
||||||
|
Bit::htobl(data+4, Bit::btohl(data +4)+appendLen+4);
|
||||||
|
uint32_t offset = getDataStringLenOffset();
|
||||||
|
Bit::htobl(data+offset, Bit::btohl(data+offset)+appendLen+4);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Packet::getDataStringLen(){
|
||||||
|
return Bit::btohl(data+getDataStringLenOffset());
|
||||||
|
}
|
||||||
|
|
||||||
|
///Method can only be used when using internal functions to build the data.
|
||||||
|
uint32_t Packet::getDataStringLenOffset(){
|
||||||
|
uint32_t offset = 23;
|
||||||
|
while (data[offset] != 'd'){
|
||||||
|
switch (data[offset]){
|
||||||
|
case 'o': offset += 17; break;
|
||||||
|
case 'b': offset += 15; break;
|
||||||
|
case 'k': offset += 19; break;
|
||||||
|
default:
|
||||||
|
FAIL_MSG("Errrrrrr");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return offset +5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Helper function for skipping over whole DTSC parts
|
/// Helper function for skipping over whole DTSC parts
|
||||||
static char * skipDTSC(char * p, char * max) {
|
static char * skipDTSC(char * p, char * max) {
|
||||||
if (p + 1 >= max || p[0] == 0x00) {
|
if (p + 1 >= max || p[0] == 0x00) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue