Лучшее решение до сих пор заключалось в добавлении пула автоматического выпуска. Я обновил свой ответ.

ель - написать собственный контроллер вида камеры, который:

Можно делать фотографии во всех четырех ориентациях интерфейса как с задней, так и, если доступно, фронтальной камерой.Правильно поворачивает и масштабирует превью «видео», а также фотографию в полном разрешении.Позволяет применить (простой) эффект к ОБА предварительному просмотру «видео» и фотографии в полном разрешении.

Реализация (на iOS 4.2 / Xcode 3.2.5):

Из-за требования (3) мне нужно было перейти к AVFoundation.

Я начал сТехнические вопросы и ответы QA1702 и сделал эти изменения:

Изменен сессионный пресет на AVCaptureSessionPresetPhoto.Добавлен AVCaptureStillImageOutput в качестве дополнительного вывода перед началом сеанса.

Проблема, с которой я сталкиваюсь, связана с производительностью обработки изображения для предварительного просмотра (кадр предварительного просмотра «видео»).

Во-первых, я получаю результат UIImageimageFromSampleBuffer: на буфере для образцов изcaptureOutput:didOutputSampleBuffer:fromConnection:, Затем я масштабирую и поворачиваю его для экрана, используя CGGraphicsContext.

На данный момент частота кадров уже ниже 15 FPS, указанных в видеовыходе сеанса, и когда я добавляю эффект, она падает до уровня ниже или ниже 10. Быстро происходит сбой приложения из-за нехватки памяти.

У меня был некоторый успех в снижении частоты кадров до 9 FPS на iPhone 4 и 8, FPS на iPod Touch (4-го поколения).

Я также добавил некоторый код для «очистки» очереди отправки, но я не уверен, насколько она на самом деле помогает. По сути, каждые 8-10 кадров устанавливается флаг, который сигнализируетcaptureOutput:didOutputSampleBuffer:fromConnection: вернуть сразу, а не обрабатывать кадр. Флаг сбрасывается после завершения операции синхронизации в очереди вывода.

На данный момент я даже не возражаю против низкой частоты кадров, но, очевидно, мы не можем поставлять с низкими сбоями памяти. У кого-нибудь есть идеи, как предпринять действия, чтобы в этом случае предотвратить нехватку памяти (и / или лучший способ «очистить» очередь отправки)?

Ответы на вопрос(2)

Ваш ответ на вопрос