【问题标题】:Applying Effect to iPhone Camera Preview "Video" Using OpenGL使用 OpenGL 将效果应用于 iPhone 相机预览“视频”
【发布时间】:2011-02-04 01:27:02
【问题描述】:

我的目标是编写一个自定义的相机视图控制器:

  1. 可以使用后置摄像头和前置摄像头(如果有的话)在所有四个界面方向上拍照。
  2. 正确旋转和缩放预览“视频”以及全分辨率照片。
  3. 允许对预览“视频”和全分辨率照片应用(简单)效果。

我之前的努力记录在this question。我最近的尝试是修改 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 示例 (blog post) 切换为使用 AVCaptureSessionPresetPhoto 时,我得到了相同的 garbled video 结果。

【问题讨论】:

  • 当我将其作为 OpenGL ES 2.0 图像处理的示例进行展示时,我知道您在课堂上:sunsetlakesoftware.com/2010/10/22/…,但是您是否尝试过针对您想要的预设进行调整?如果我没记错的话,AVCaptureSessionPresetHigh 为后置摄像头返回了一个 720p 视频帧。
  • 我一定会尝试的。修改 WWDC 示例代码以使用 1280x720 视频大小导致其阻塞,但照片预设实际上以低于此的分辨率提供帧。都是乱码,所以不清楚它是否以 15-30 FPS 的速度处理它们。
  • 您的捕获会话中是否同时安装了前置和后置摄像头?也许它正在使用某种最小公分母图像大小。
  • 明确地说,我并没有质疑或混淆视频尺寸,我只是让每个人都知道它们是什么。我会将它们全部添加到问题中。
  • @Dex 你能在这里重新发布你的答案或它的摘要,然后链接到完整的吗?我还没有机会尝试它,但这是我见过的最好的,所以我想接受一些东西。

标签: iphone opengl-es avcapturesession


【解决方案1】:

问题在于AVCaptureSessionPresetPhoto 现在具有上下文感知能力,并根据您是显示视频还是静止图像捕获以不同的分辨率运行。

此模式的实时预览不同,因为它用额外的字节填充行。我猜这是某种硬件优化。

无论如何,你可以在这里看到我是如何解决问题的:

iOS CVImageBuffer distorted from AVCaptureSessionDataOutput with AVCaptureSessionPresetPhoto

【讨论】:

    【解决方案2】:

    AVCaptureSessionPresetPhoto 用于拍照,而不是捕获实时提要。你可以在这里阅读:http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html

    (我认为这实际上是两个不同的摄像头或传感器,因为它们的行为非常不同,并且在照片和 640x480 之间切换时会有几秒钟的延迟)。

    你甚至不能同时使用这两个预设,在它们之间切换也很头疼 - How to get both the video output and full photo resolution image in AVFoundation Framework

    HTH,虽然不是你想听到的……

    奥德。

    【讨论】:

    • 即使您使用 AVCaptureSessionPresetPhoto 预设进行会话,您也可以获得实时视频帧(不是照片分辨率),这些是我尝试使用的(并且与非 OpenGL 解决方案一起使用) )。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多