Какао IOSurfaces и синхронизация с фоновым заданием, тянущим кадры через Quicktime - PullRequest
3 голосов
/ 02 февраля 2012

У меня есть вопрос относительно IOSurface на какао.После обширного исследования, необходимого для переключения моего приложения OPENGL в реальном времени на 64-битное, я выбрал единственный путь для поддержки воспроизведения Quicktime, порождающего фоновый поток, который извлекает кадры, устанавливая обратный вызов, готовый к кадрам, а затем с помощью QTVisualContextCopyImageForTime и передавая IOSurfaceRef черезRPC для родительского процесса.

Все работает нормально, но есть одна главная проблема.В моем 32-битном приложении я смог сериализовать любой вызов подсистемы GL путем рендеринга кадра, получения кадров QT для следующего прохода, а затем ожидания следующей V-синхронизации.Это дало очень плавный и стабильный результат.

Использование техники IOSurface не дает мне возможности синхронизироваться, когда мое приложение рисует рамку и когда фоновый процесс извлекает IOSurface из фильма QuickTime.В результате, на случайной основе, я испытываю выступления SPYKES.Действительно, использование монитора драйвера OPENGL увеличивает циклы ожидания процессора до 10% в моем 64-разрядном приложении, в то время как у меня 0% -ный график ожидания процессора под 32-разрядным.

Каждый, кто здесь использовал IOSurface в реальном приложении, сталкивался стакие вопросы, как этот?Я думал о межпроцессном мьютексе / блокировке, но, учитывая, что мне нужно блокировать / разблокировать примерно 120 раз x секунду, я не смог найти правильное решение, не похоже, что у Дарвина есть что-то вроде НАЗВАННЫХ СИГНАЛОВ, доступных вWin32 ...

Любое предложение, или я должен принять совершенно другой подход к проблеме?

Спасибо!

...