updated appendNal and added upgradeNal in DTSC lib, nal lib speedup

This commit is contained in:
Ramkoemar 2017-06-26 14:44:09 +02:00 committed by Thulinma
parent 994ad94fde
commit c7816c42f0
3 changed files with 31 additions and 17 deletions

View file

@ -118,7 +118,6 @@ 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;
@ -126,7 +125,8 @@ 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 appendNal(const char * appendData, uint32_t appendLen);
void upgradeNal(const char * appendData, uint32_t appendLen);
void setKeyFrame(bool kf); void setKeyFrame(bool kf);
long long unsigned int getTime() const; long long unsigned int getTime() const;
long int getTrackId() const; long int getTrackId() const;
@ -145,6 +145,8 @@ namespace DTSC {
char * data; char * data;
unsigned int bufferLen; unsigned int bufferLen;
unsigned int dataLen; unsigned int dataLen;
uint64_t prevNalSize;
}; };
/// A simple structure used for ordering byte seek positions. /// A simple structure used for ordering byte seek positions.

View file

@ -291,30 +291,42 @@ namespace DTSC {
} }
} }
void Packet::appendData(const char * appendData, uint32_t appendLen){ void Packet::appendNal(const char * appendData, uint32_t appendLen){
resize(dataLen + appendLen); if(appendLen ==0){
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; return;
} }
// INFO_MSG("totallen: %d, appendLen: %d",totalLen,appendLen); // INFO_MSG("totallen: %d, appendLen: %d",totalLen,appendLen);
resize(dataLen + appendLen +4); resize(dataLen + appendLen +4);
Bit::htobl(data+dataLen -3, totalLen); Bit::htobl(data+dataLen -3, appendLen);
memcpy(data + dataLen-3+4, appendData, appendLen); memcpy(data + dataLen-3+4, appendData, appendLen);
memcpy(data + dataLen-3+4 + appendLen, "\000\000\356", 3); //end container memcpy(data + dataLen-3+4 + appendLen, "\000\000\356", 3); //end container
dataLen += appendLen +4; dataLen += appendLen +4;
Bit::htobl(data+4, Bit::btohl(data +4)+appendLen+4); Bit::htobl(data+4, Bit::btohl(data +4)+appendLen+4);
uint32_t offset = getDataStringLenOffset(); uint32_t offset = getDataStringLenOffset();
Bit::htobl(data+offset, Bit::btohl(data+offset)+appendLen+4); Bit::htobl(data+offset, Bit::btohl(data+offset)+appendLen+4);
prevNalSize = appendLen;
}
void Packet::upgradeNal(const char * appendData, uint32_t appendLen){
if(appendLen ==0){
return;
}
uint64_t sizeOffset = dataLen - 3 - 4 - prevNalSize;
if (Bit::btohl(data + sizeOffset) != prevNalSize){
FAIL_MSG("PrevNalSize state not correct");
return;
}
resize(dataLen + appendLen);//Not + 4 as size bytes have already been written here.
Bit::htobl(data+sizeOffset, prevNalSize + appendLen);
prevNalSize += 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);
} }
uint32_t Packet::getDataStringLen(){ uint32_t Packet::getDataStringLen(){

View file

@ -82,8 +82,8 @@ namespace nalu {
int offset = 0; int offset = 0;
while(offset+2 < dataSize){ while(offset+2 < dataSize){
const char * begin = data + offset; const char * begin = data + offset;
int t = (int)((begin[0] << 8)|((begin[1]) << 8)|(begin[2])); bool t = (begin[2] == 1 && !begin[0] && !begin[1]);
if(t != 1){ if(!t){
if (begin[2]){//skip three bytes if the last one isn't zero if (begin[2]){//skip three bytes if the last one isn't zero
offset +=3; offset +=3;
}else if (begin[1]){//skip two bytes if the second one isn't zero }else if (begin[1]){//skip two bytes if the second one isn't zero