5#include <QtCore/qcoreapplication.h>
8#include <QtCore/qdebug.h>
11#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
12#import <QuartzCore/CADisplayLink.h>
13#import <Foundation/NSRunLoop.h>
14#define _m_displayLink static_cast<DisplayLinkObserver*>(m_displayLink)
20#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
21@interface DisplayLinkObserver : NSObject
25- (
void)displayLinkNotification:(CADisplayLink *)sender;
29@implementation DisplayLinkObserver
32 CADisplayLink *m_displayLink;
40 m_avfDisplayLink = link;
41 m_displayLink = [[CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkNotification:)] retain];
50 [m_displayLink release];
51 m_displayLink =
nullptr;
59 [m_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
64 [m_displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
67- (
void)displayLinkNotification:(CADisplayLink *)sender
70 m_avfDisplayLink->displayLinkEvent(
nullptr);
76 const CVTimeStamp *inNow,
77 const CVTimeStamp *inOutputTime,
78 CVOptionFlags flagsIn,
79 CVOptionFlags *flagsOut,
80 void *displayLinkContext)
90 return kCVReturnSuccess;
97 , m_pendingDisplayLinkEvent(
false)
100#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
101 m_displayLink = [[DisplayLinkObserver alloc] initWithAVFDisplayLink:this];
104 CVDisplayLinkCreateWithCGDisplay(kCGDirectMainDisplay, &m_displayLink);
107 CVDisplayLinkSetCurrentCGDisplay(m_displayLink, kCGDirectMainDisplay);
123#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
124 [_m_displayLink release];
126 CVDisplayLinkRelease(m_displayLink);
128 m_displayLink =
nullptr;
134 return m_displayLink !=
nullptr;
144 if (m_displayLink && !m_isActive) {
145#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
146 [_m_displayLink start];
148 CVDisplayLinkStart(m_displayLink);
156 if (m_displayLink && m_isActive) {
157#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
158 [_m_displayLink stop];
160 CVDisplayLinkStop(m_displayLink);
172 m_displayLinkMutex.
lock();
173 bool pending = m_pendingDisplayLinkEvent;
174 m_pendingDisplayLinkEvent =
true;
175#if defined(Q_OS_IOS) || defined(Q_OS_TVOS)
177 memset(&m_frameTimeStamp, 0,
sizeof(CVTimeStamp));
179 m_frameTimeStamp = *ts;
181 m_displayLinkMutex.
unlock();
189 switch (
event->type()){
191 m_displayLinkMutex.
lock();
192 m_pendingDisplayLinkEvent =
false;
193 CVTimeStamp ts = m_frameTimeStamp;
194 m_displayLinkMutex.
unlock();
207#include "moc_avfdisplaylink_p.cpp"
static QT_USE_NAMESPACE CVReturn CVDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp *inNow, const CVTimeStamp *inOutputTime, CVOptionFlags flagsIn, CVOptionFlags *flagsOut, void *displayLinkContext)
void displayLinkEvent(const CVTimeStamp *)
virtual ~AVFDisplayLink()
AVFDisplayLink(QObject *parent=nullptr)
virtual bool event(QEvent *) override
This virtual function receives events to an object and should return true if the event e was recogniz...
void tick(const CVTimeStamp &ts)
void unlock() noexcept
Unlocks the mutex.
void lock() noexcept
Locks the mutex.
virtual bool event(QEvent *event)
This virtual function receives events to an object and should return true if the event e was recogniz...
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage return DBusPendingCall * pending
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent