From de7b973239e386eba24947dfb9bdb981f4ef54cb Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 11 Nov 2019 18:03:47 -0800 Subject: [PATCH] Plumb presentation time from server into AVFrame.pts field --- app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp | 2 +- app/streaming/video/ffmpeg.cpp | 5 ++++- moonlight-common-c/moonlight-common-c | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp b/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp index 1ff8d49c..574c5eab 100644 --- a/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp +++ b/app/streaming/video/ffmpeg-renderers/pacer/pacer.cpp @@ -258,7 +258,7 @@ void Pacer::renderFrame(AVFrame* frame) { // Count time spent in Pacer's queues Uint32 beforeRender = SDL_GetTicks(); - m_VideoStats->totalPacerTime += beforeRender - frame->pts; + m_VideoStats->totalPacerTime += beforeRender - frame->pkt_dts; // Render it m_VsyncRenderer->renderFrame(frame); diff --git a/app/streaming/video/ffmpeg.cpp b/app/streaming/video/ffmpeg.cpp index b8431a15..a4cf96bf 100644 --- a/app/streaming/video/ffmpeg.cpp +++ b/app/streaming/video/ffmpeg.cpp @@ -731,8 +731,11 @@ int FFmpegVideoDecoder::submitDecodeUnit(PDECODE_UNIT du) // Restore default log level after a successful decode av_log_set_level(AV_LOG_INFO); + // Store the presentation time + frame->pts = du->presentationTimeMs; + // Capture a frame timestamp to measuring pacing delay - frame->pts = SDL_GetTicks(); + frame->pkt_dts = SDL_GetTicks(); // Count time in avcodec_send_packet() and avcodec_receive_frame() // as time spent decoding diff --git a/moonlight-common-c/moonlight-common-c b/moonlight-common-c/moonlight-common-c index 49fd1bed..f4dad9ae 160000 --- a/moonlight-common-c/moonlight-common-c +++ b/moonlight-common-c/moonlight-common-c @@ -1 +1 @@ -Subproject commit 49fd1bed3f40456e98a6ede60558a8ce1964327c +Subproject commit f4dad9ae8bca90aada76c9bb858e4eea0fff5b76