mirror of
https://github.com/moonlight-stream/moonlight-qt
synced 2024-12-13 21:02:28 +00:00
Reduce VideoToolbox renderer video latency
This commit is contained in:
parent
e32aace443
commit
e85ca2a6c9
1 changed files with 11 additions and 3 deletions
|
@ -140,15 +140,23 @@ public:
|
||||||
CVReturn
|
CVReturn
|
||||||
displayLinkOutputCallback(
|
displayLinkOutputCallback(
|
||||||
CVDisplayLinkRef,
|
CVDisplayLinkRef,
|
||||||
const CVTimeStamp*,
|
const CVTimeStamp* now,
|
||||||
const CVTimeStamp* vsyncTime,
|
const CVTimeStamp* /* vsyncTime */,
|
||||||
CVOptionFlags,
|
CVOptionFlags,
|
||||||
CVOptionFlags*,
|
CVOptionFlags*,
|
||||||
void *displayLinkContext)
|
void *displayLinkContext)
|
||||||
{
|
{
|
||||||
VTRenderer* me = reinterpret_cast<VTRenderer*>(displayLinkContext);
|
VTRenderer* me = reinterpret_cast<VTRenderer*>(displayLinkContext);
|
||||||
|
|
||||||
me->drawFrame(vsyncTime->hostTime);
|
// In my testing on macOS 10.13, this callback is invoked about 24 ms
|
||||||
|
// prior to the specified v-sync time (now - vsyncTime). Since this is
|
||||||
|
// greater than the standard v-sync interval (16 ms = 60 FPS), we will
|
||||||
|
// draw using the current host time, rather than the actual v-sync target
|
||||||
|
// time. Because the CVDisplayLink is in sync with the actual v-sync
|
||||||
|
// interval, even if many ms prior, we can safely use the current host time
|
||||||
|
// and get a consistent callback for each v-sync. This reduces video latency
|
||||||
|
// by at least 1 frame vs. rendering with the actual vsyncTime.
|
||||||
|
me->drawFrame(now->hostTime);
|
||||||
|
|
||||||
return kCVReturnSuccess;
|
return kCVReturnSuccess;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue