«Не удалось загрузить ядро» при запуске сеанса камеры и попытке выполнить фильтрацию живого изображения - PullRequest
3 голосов
/ 22 декабря 2011

Я пытаюсь сделать некоторую фильтрацию живого изображения, как это делают Instagram и Path.Я активно реализовал этот метод:

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {

Я использовал сеанс камеры и инфраструктуру CoreImage (я не использовал OpenGL напрямую).В большинстве случаев мое приложение работало бы довольно счастливо без сбоев или сбоев.

Тем не менее, когда я пытаюсь запустить сеанс фильтрации в режиме реального времени, когда мое приложение испытывает некоторую UIView анимацию наэкран.Я бы увидел черный экран в области фильтрации в реальном времени.Кроме того, консоль будет несколько раз печатать что-то вроде этого:

Недопустимая шейдерная программа, возможно, из-за превышения аппаратных ресурсов

И:

Не удалось загрузить ядро!

При возникновении такой ошибки я заметил, что могу исправить ее, просто повторно запустив и заново запустив сеанс камеры.Поэтому, пока мой код будет уведомляться во время выполнения, я мог бы легко исправить ситуацию, просто позволив коду выполнить проверку во время выполнения и, если такая ситуация произойдет, перезапустить сеанс камеры.

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

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 24 августа 2012

«Ядро», о котором идет речь, не ядро ​​iOS, а ядро ​​OpenCL. Это происходит в OpenCL.framework (общедоступный в OS X, но частный в iOS, доступный с iOS 5). Поскольку это личное, вы, скорее всего, застряли здесь. Инициализация OpenCL требует значительного объема системных ресурсов. Хорошим подходом является взаимное исключение (мьютекс) доступа к экрану, удерживая его, когда вы находитесь в анимации UIView.

Надеюсь, это поможет,

TG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...