Метод addInput QTCaptureSession не возвращается - PullRequest
1 голос
/ 18 апреля 2011

У меня есть следующий код:

BOOL success;

QTCaptureSession *session = [[QTCaptureSession alloc] init];
QTCaptureDevice  *device  = [QTCaptureDevice defaultInputDeviceWithMediaType: QTMediaTypeVideo];
success = [device open: &e];
if ( !success )
{
    NSLog(@"error opening input device: %@", e);
    return;
}

QTCaptureDeviceInput *input = [QTCaptureDeviceInput deviceInputWithDevice: device];
success = [session addInput: input error: &e];
if ( !success )
{
    NSLog(@"error adding input device to session: %@", e);
    return;
}

QTCaptureDecompressedVideoOutput *output = [[QTCaptureDecompressedVideoOutput alloc] init];
[output setDelegate: self];
success = [session addOutput: output error: &e];
if ( !success )
{
    NSLog(@"error adding output device to session: %@", e);
    return;
}

[session startRunning];

он находится в пакете, загруженном во время выполнения, и является частью метода, который является селектором NSThread (он же запускается в фоновом потоке).а не основная нить).

Моя проблема в том, что вызов #addInput: error: никогда не возвращается.Что мне здесь не хватает?

1 Ответ

0 голосов
/ 19 апреля 2011

Проблема заключалась в том, что основной поток приложения не использовал цикл запуска, обычно предоставляемый NSApplicationMain () в приложениях Какао. Вместо этого я обрабатывал события в своем собственном цикле while.

Решение называлось:

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);

Эта тема в списке рассылки Apple QuickTime для более подробного объяснения проблемы.

...