Synthesize a PTS for hosts that don't send one
This commit is contained in:
parent
8169a31ecc
commit
bc00d957d3
1 changed files with 15 additions and 1 deletions
|
|
@ -15,6 +15,7 @@ static bool waitingForRefInvalFrame;
|
|||
static unsigned int lastPacketInStream;
|
||||
static bool decodingFrame;
|
||||
static bool strictIdrFrameWait;
|
||||
static uint64_t syntheticPtsBase;
|
||||
static uint64_t firstPacketReceiveTime;
|
||||
static unsigned int firstPacketPresentationTime;
|
||||
static bool dropStatePending;
|
||||
|
|
@ -62,6 +63,7 @@ void initializeVideoDepacketizer(int pktSize) {
|
|||
waitingForRefInvalFrame = false;
|
||||
lastPacketInStream = UINT32_MAX;
|
||||
decodingFrame = false;
|
||||
syntheticPtsBase = 0;
|
||||
firstPacketReceiveTime = 0;
|
||||
firstPacketPresentationTime = 0;
|
||||
dropStatePending = false;
|
||||
|
|
@ -757,7 +759,19 @@ static void processRtpPayload(PNV_VIDEO_PACKET videoPacket, int length,
|
|||
// We're now decoding a frame
|
||||
decodingFrame = true;
|
||||
firstPacketReceiveTime = receiveTimeMs;
|
||||
firstPacketPresentationTime = presentationTimeMs;
|
||||
|
||||
// Some versions of Sunshine don't send a valid PTS, so we will
|
||||
// synthesize one using the receive time as the time base.
|
||||
if (!syntheticPtsBase) {
|
||||
syntheticPtsBase = receiveTimeMs;
|
||||
}
|
||||
|
||||
if (!presentationTimeMs && frameIndex > 0) {
|
||||
firstPacketPresentationTime = receiveTimeMs - syntheticPtsBase;
|
||||
}
|
||||
else {
|
||||
firstPacketPresentationTime = presentationTimeMs;
|
||||
}
|
||||
}
|
||||
|
||||
lastPacketInStream = streamPacketIndex;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue