使用OpenGL将效果应用于iPhone Camera Preview“视频”
-
28-10-2019 - |
题
我的目标是编写一个自定义的相机视图控制器,该控制器:
- 可以使用后置摄像头和前置摄像头(如果有)在所有四个界面方向拍照。
- 正确旋转和缩放预览“视频”以及全分辨率照片。
- 允许将(简单)效果应用于预览“视频”和全分辨率照片。
此问题中记录了我以前的努力。我的最新尝试是修改Apple的示例GLVideoFrame(来自WWDC 2010)。但是,当会话预设为AVCaptureSessionPresetPhoto时,我无法使iPhone 4正确显示预览“视频”。
有人尝试过这个吗,还是知道为什么该示例不适用于此预设?
Apple的示例使用具有640x480视频尺寸的预设和默认的1280x720纹理尺寸。当预设为AVCaptureSessionPresetPhoto时,iPhone 4后置摄像头仅提供852x640。
当预设为AVCaptureSessionPresetPhoto时,iOS设备相机的视频/照片尺寸:
- iPhone 4背面:视频为852x640,照片为2592x1936
- iPhone 4前面板:视频和照片均为640x480
- iPod Touch 4G背面:视频和照片为960x720
- iPod Touch 4G正面:视频和照片为640x480
- iPhone 3GS:视频为512x384,照片为2048x1536
更新
当切换Brad Larson的ColorTracking示例(<< a href=“ http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios” rel=“ nofollow noreferrer”>博客帖子)使用AVCaptureSessionPresetPhoto。
解决方案
问题在于,AVCaptureSessionPresetPhoto
现在可以识别上下文,并且可以根据显示视频还是静止图像而以不同的分辨率运行。
此模式的实时预览有所不同,因为它会用额外的字节填充行。我猜这是某种硬件优化。
无论如何,您可以在这里看到我的解决方法:
iOS CVImageBuffer从AVCaptureSessionDataOutput和AVCaptureSessionPresetPhoto变形了
其他提示
AVCaptureSessionPresetPhoto用于拍照,而不是捕获实时供稿。您可以在这里阅读: http: //developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html
(我相信这实际上是两个不同的凸轮或传感器,因为它们的行为截然不同,并且仅在Photo和640x480之间切换需要几秒钟的延迟。)
您甚至不能同时使用两个预设,并且在两个预设之间进行切换同样令人头疼-如何在AVFoundation Framework中同时获取视频输出和全照片分辨率图像
HTH,尽管不是您想听到的...
Oded。