цифровое увеличение камеры в ios 4.0 и позже - PullRequest
1 голос
/ 30 ноября 2010

как мне реализовать слайдер с цифровым зумом для камеры. Я использую следующие API: AVCaptureVideoPreviewLayer, AVCaptureSession, AVCaptureVideoDataOutput, AVCaptureDeviceInput.

Я хотел бы иметь тот же слайдер, который доступен в приложении для камеры iphone 4.

Заранее благодарим за любые советы и примеры!

1 Ответ

1 голос
/ 06 октября 2011

Я новичок, и я попытался сделать масштабирование только с помощью инфраструктуры AVFoundation, используя AVCaptureVideoPreviewLayer, и я не могу заставить его работать.Я думаю, потому что у этого слоя есть свой собственный AVCaptureSession, который управляет его собственным выводом, и хотя я добавил его как подслой в UIScrollView, он все еще работает сам по себе, и слой прокрутки не может влиять на слой предварительного просмотра.

В сеансе WWDC 419 «Захват с камеры с использованием AVFoundation в iOS5» Брэд Форд сказал, что «AVCaptureVideoPreviewLayer НЕ наследует от AVCaptureOutput (как это делает AVCaptureVideoDataOutput). Он наследуется от CALayer, но может быть вставлен в ядро ​​анимации(как и другие слои). В AVFoundation AVSession владеет своими выходами, но НЕ владеет своими слоями. Слоям принадлежит сеанс. Поэтому, если вы хотите вставить слой в иерархию представления, вы присоединяете к нему сеанс и забываете оэто. Затем, когда дерево слоев избавится от самого себя, оно также очистит сеанс. "

Я видел Брэда Ларсона, использующего комбинацию Open GL ES и инфраструктуры AVFoundation в: http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-iosиспользуйте AVCaptureVideoPreviewLayer, где он может корректировать необработанные данные с камеры, поэтому я предполагаю, что это то место, с которого нужно начинать.Проверьте его приложение ColorTrackingCamera.Используются шейдеры, которые вам (и мне) не нужно масштабировать, но я думаю, что аналогичный механизм можно использовать для масштабирования.

О, я забыл упомянуть, что Брэд Ларсон НЕ присоединяет AVCaptureInput к AVCaptureSession.Я вижу, что он также использует основной поток для своей очереди вместо создания своей собственной очереди в другом потоке.Его методы Open GL ES для drawFrame также показывают, как он отображает изображение, а сам сеанс захвата этого не делает.Итак, если вы понимаете больше, или мои предположения неверны, пожалуйста, дайте мне знать тоже.

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

Джефф У.

...