Справка по демоверсии iPhone: кто-нибудь знает более быструю альтернативу UIGetScreenImage () для захвата экрана?

Я работаю над приложением для iPhone, которое скоро собираюсь продемонстрировать живой аудитории.

Я действительно хотел бы продемонстрировать приложение в прямом эфире через VGA на проекторе, а не покажите скриншоты.

Я купил адаптер VGA для iPhone и адаптировал TVOutManager Роба Террелла под свои нужды. К сожалению, частота кадров после тестирования на моем домашнем телевизоре просто не так хороша - даже на iPhone 4 (возможно, 4-5 кадров в секунду, она может варьироваться).

Я считаю, что причина такой медлительности в том, что Основная процедура, которую я использую для захвата экрана устройства (который затем отображается на внешнем дисплее), - это UIGetScreenImage () . Эта процедура, которая больше не может быть частью приложений для доставки, на самом деле довольно медленная. Вот код I ' m, используя для захвата экрана (FYI mirrorView - это UIImageView ):

CGImageRef cgScreen = UIGetScreenImage();
self.mirrorView.image = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);

Есть ли более быстрый метод, который я могу использовать для захвата экрана iPhone и достижения лучшей частоты кадров (съемка для 20+ кадров в секунду)? Не нужно проходить проверку приложения Apple - этого демонстрационного кода не будет в приложении для доставки. Если кто-нибудь знает какие-либо более быстрые частные API, я бы очень признателен за помощь!

Кроме того, приведенный выше код выполняется с использованием повторяющегося NSTimer , который запускается каждые 1.0 / desireFrameRate секунд (в настоящее время каждые 0,1 секунды). Я' Мне интересно, может ли вместо этого оборачивание этих вызовов в блок и использование GCD или NSOperationQueue быть более эффективным, чем использование NSTimer моего метода updateTVOut obj-c, который в настоящее время содержит эти вызовы. Был бы признателен за некоторые данные по этому поводу - некоторые поисковые запросы, похоже, указывают на то, что отправка сообщения obj-c несколько медленнее по сравнению с другими операциями.

Наконец, как вы можете видеть выше, CGImageRef , что Возвращаемое значение UIGetScreenImage () превращается в UIImage , а затем этот UIImage передается в UIImageView , который, вероятно, изменяет размер изображения на летать. Мне интересно, может ли изменение размера замедлить работу еще больше. Идеи, как сделать это быстрее?

9
задан Aza 24 April 2013 в 06:27
поделиться