Synthesize a PTS for hosts that don't send one

This commit is contained in:
Cameron Gutman
2022-12-06 17:22:02 -06:00
parent 8169a31ecc
commit bc00d957d3

View File

@@ -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,8 +759,20 @@ static void processRtpPayload(PNV_VIDEO_PACKET videoPacket, int length,
// We're now decoding a frame
decodingFrame = true;
firstPacketReceiveTime = receiveTimeMs;
// 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;