Tom*_*mmy 19
从iOS 4.0开始,您可以使用AVCaptureDeviceInput
相机作为设备输入,并将其连接到AVCaptureVideoDataOutput
您喜欢设置为委托的任何对象.通过为摄像机设置32bpp BGRA格式,委托对象将以一种非常适合立即处理的格式从摄像机接收每个帧glTexImage2D
(或者glTexSubImage2D
如果设备不支持非二次幂纹理;我认为MBX设备属于这一类).
有一堆帧大小和帧速率选项; 猜测你将不得不根据你想要使用GPU的其他数量进行调整.我发现一个完全无关紧要的场景只有一个纹理四边形显示最新的帧,仅在新的帧到达iPhone 4时重新绘制,能够显示该设备的最大720p 24fps馈送而没有任何明显的延迟.我还没有比那更彻底的基准测试,所以希望其他人可以提供建议.
原则上,根据API,帧可以在扫描行之间返回一些内存中的填充,这意味着在发布到GL之前会对内容进行一些重排,因此您需要为此实现代码路径.在实践中,纯粹凭经验说,似乎iOS的当前版本永远不会返回该形式的图像,因此它实际上不是性能问题.
编辑:它现在非常接近三年后.在此期间苹果发布的iOS 5,6和7随着5他们引进CVOpenGLESTexture
和CVOpenGLESTextureCache
,这是我们从捕捉设备转换成OpenGL管视频聪明的办法.苹果提供的示例代码在这里,从其中特别有趣的部分是RippleViewController.m
,特别是其setupAVCapture
与captureOutput:didOutputSampleBuffer:fromConnection:
-见线196-329.遗憾的是,这些条款和条件在不附加整个项目的情况下可以防止代码重复,但逐步设置是:
CVOpenGLESTextureCacheCreate
和一个AVCaptureSession
;AVCaptureDevice
的视频;AVCaptureDeviceInput
使用该捕获设备创建;AVCaptureVideoDataOutput
并告诉它将您称为样本缓冲区委托.收到每个样本缓冲区后:
CVImageBufferRef
它;CVOpenGLESTextureCacheCreateTextureFromImage
获取Y和UV CVOpenGLESTextureRef
; 归档时间: |
|
查看次数: |
8423 次 |
最近记录: |