From b524e275c1db2f09f2a3a5f6ccc7ad6fc5d4bc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Devernay?= Date: Tue, 2 Jul 2013 18:08:12 +0200 Subject: [PATCH] allow QtKit capture in secondary threads [NSRunLoop currentRunLoop] is not the same as in the main thread. see https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/F oundation/Classes/nsrunloop_Class/Reference/Reference.html "If no input sources or timers are attached to the run loop, this method exits immediately" The old code caused grabFrame() to return immediately if the capture was not done in the main thread. This code works correctly, even in secondary threads, provided that all capture functions are called in the *same* thread --- modules/highgui/src/cap_qtkit.mm | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/modules/highgui/src/cap_qtkit.mm b/modules/highgui/src/cap_qtkit.mm index c7afffa075a7..207f01b525ee 100644 --- a/modules/highgui/src/cap_qtkit.mm +++ b/modules/highgui/src/cap_qtkit.mm @@ -277,11 +277,8 @@ - (IplImage*)getOutput; double sleepTime = 0.005; double total = 0; - NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:sleepTime]; - while (![capture updateImage] && (total += sleepTime)<=timeOut && - [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode - beforeDate:loopUntil]) - loopUntil = [NSDate dateWithTimeIntervalSinceNow:sleepTime]; + while (![capture updateImage] && (total += sleepTime)<=timeOut) + usleep((int)(sleepTime*1000)); [localpool drain];