Fixed timing issues in ts

This commit is contained in:
Erik Zandvliet 2015-02-17 15:38:56 +01:00 committed by Thulinma
parent 9587f3b708
commit 4811a7e065

View file

@ -387,7 +387,12 @@ namespace TS {
/// \param PTS The timestamp of the frame.
/// \param offset The timestamp of the frame.
void Packet::PESVideoLeadIn(unsigned int len, unsigned long long PTS, unsigned long long offset) {
strBuf.append("\000\000\001\340\000\000\204", 7);
len += (offset ? 13 : 8);
len = 0;
strBuf.append("\000\000\001\340", 4);
strBuf += (char)((len >> 8) & 0xFF);
strBuf += (char)(len & 0xFF);
strBuf.append("\204", 1);
strBuf += (char)(offset ? 0xC0 : 0x80); //PTS/DTS + Flags
strBuf += (char)(offset ? 0x0A : 0x05); //PESHeaderDataLength
encodePESTimestamp(strBuf, (offset ? 0x30 : 0x20), PTS + offset);
@ -401,9 +406,14 @@ namespace TS {
/// \param toSend Data that is to be send, will be modified.
/// \param PTS The timestamp of the frame.
void Packet::PESVideoLeadIn(std::string & toSend, unsigned long long PTS, unsigned long long offset) {
unsigned int len = toSend.size() + (offset ? 13 : 8);
len = 0;
std::string tmpStr;
tmpStr.reserve(25);
tmpStr.append("\000\000\001\340\000\000\204", 7);
tmpStr.append("\000\000\001\340", 4);
tmpStr += (char)((len >> 8) & 0xFF);
tmpStr += (char)(len & 0xFF);
tmpStr.append("\204", 1);
tmpStr += (char)(offset ? 0xC0 : 0x80); //PTS/DTS + Flags
tmpStr += (char)(offset ? 0x0A : 0x05); //PESHeaderDataLength
encodePESTimestamp(tmpStr, (offset ? 0x30 : 0x20), PTS + offset);
@ -418,9 +428,21 @@ namespace TS {
/// \param len The length of this frame.
/// \param PTS The timestamp of the frame.
std::string & Packet::getPESVideoLeadIn(unsigned int len, unsigned long long PTS, unsigned long long offset) {
len += (offset ? 13 : 8);
len = 0;
static std::string tmpStr;
tmpStr.clear();
PESVideoLeadIn(tmpStr, PTS, offset);
tmpStr.reserve(25);
tmpStr.append("\000\000\001\340", 4);
tmpStr += (char)((len >> 8) & 0xFF);
tmpStr += (char)(len & 0xFF);
tmpStr.append("\204", 1);
tmpStr += (char)(offset ? 0xC0 : 0x80); //PTS/DTS + Flags
tmpStr += (char)(offset ? 0x0A : 0x05); //PESHeaderDataLength
encodePESTimestamp(tmpStr, (offset ? 0x30 : 0x20), PTS + offset);
if (offset){
encodePESTimestamp(tmpStr, 0x10, PTS);
}
return tmpStr;
}
@ -434,7 +456,7 @@ namespace TS {
strBuf += (char)((len & 0xFF00) >> 8); //PES PacketLength
strBuf += (char)(len & 0x00FF); //PES PacketLength (Cont)
strBuf.append("\204\200\005", 3);
encodePESTimestamp(strBuf, 0x30, PTS);
encodePESTimestamp(strBuf, 0x20, PTS);
}
@ -450,7 +472,7 @@ namespace TS {
tmpStr += (char)((len & 0xFF00) >> 8); //PES PacketLength
tmpStr += (char)(len & 0x00FF); //PES PacketLength (Cont)
tmpStr.append("\204\200\005", 3);
encodePESTimestamp(tmpStr, 0x30, PTS);
encodePESTimestamp(tmpStr, 0x20, PTS);
toSend.insert(0, tmpStr);
}
@ -467,7 +489,7 @@ namespace TS {
tmpStr += (char)((len & 0xFF00) >> 8); //PES PacketLength
tmpStr += (char)(len & 0x00FF); //PES PacketLength (Cont)
tmpStr.append("\204\200\005", 3);
encodePESTimestamp(tmpStr, 0x30, PTS);
encodePESTimestamp(tmpStr, 0x20, PTS);
return tmpStr;
}