diff --git a/lib/dtsc.h b/lib/dtsc.h index 472a34c4..cf832493 100644 --- a/lib/dtsc.h +++ b/lib/dtsc.h @@ -129,7 +129,7 @@ namespace DTSC { void appendNal(const char * appendData, uint32_t appendLen); void upgradeNal(const char * appendData, uint32_t appendLen); void setKeyFrame(bool kf); - long long unsigned int getTime() const; + virtual long long unsigned int getTime() const; long int getTrackId() const; char * getData() const; int getDataLen() const; @@ -150,6 +150,23 @@ namespace DTSC { uint64_t prevNalSize; }; + /// A child class of DTSC::Packet, which allows overriding the packet time efficiently. + class RetimedPacket : public Packet { + public: + RetimedPacket(uint64_t reTime){ + timeOverride = reTime; + } + RetimedPacket(uint64_t reTime, const Packet & rhs) : Packet(rhs){ + timeOverride = reTime; + } + RetimedPacket(uint64_t reTime, const char * data_, unsigned int len, bool noCopy = false) : Packet(data_, len, noCopy){ + timeOverride = reTime; + } + virtual long long unsigned int getTime() const{return timeOverride;} + protected: + uint64_t timeOverride; + }; + /// A simple structure used for ordering byte seek positions. struct livePos { livePos() { diff --git a/src/io.cpp b/src/io.cpp index ebf48ff6..d5687db4 100644 --- a/src/io.cpp +++ b/src/io.cpp @@ -303,9 +303,9 @@ namespace Mist { //First memcpy only the payload to the destination //Leaves the 20 bytes inbetween empty to ensure the data is not accidentally read before it is complete memcpy(myPage.mapped + curOffset + 20, pack.getData() + 20, pack.getDataLen() - 20); - //Copy the remaing values in reverse order: + //Copy the remaining values in reverse order: //8 byte timestamp - memcpy(myPage.mapped + curOffset + 12, pack.getData() + 12, 8); + Bit::htobll(myPage.mapped + curOffset + 12, pack.getTime()); //The mapped track id ((int *)(myPage.mapped + curOffset + 8))[0] = htonl(mapTid); int size = Bit::btohl(pack.getData() + 4);