CMSampleBuffer

时间:2018-07-29 07:00:43

标签: ios avfoundation

我有一个目前非常简单的相机预览应用,其中一个AVCaptureVideoDataOutputSampleBufferDelegate也占用了视频帧。我对这些帧进行了一些处理(目前没有什么困难,我只是对r,g,b值进行平均以进行灰度缩放)并将它们绘制到UIView上。

第一次执行此操作时,我注意到该视图已翻转。嗯,我想当然是将AVCaptureConnection的默认方向为LandscapeLeft,所以我将其更改为Portrait。现在缓冲区处于纵向状态。上下翻转。并镜像。

我可以通过将AVCaptureConnection的{​​{1}}设置为videoOrientation并将PortraitUpsideDown设置为isVideoMirrored来获得所需的方式,但是我没有知道为什么我需要这样做,却找不到相关文档或其他人在做同样的事情。附加到我的true的{​​{1}}似乎在做相同的事情。我不想做这个更改,只是想看看它是否在其他设备上崩溃了,所以我想了解这里发生了什么。因此,问题就来了:为什么我的AVCaptureConnection颠倒过来并为iOS 11.4上的iPhone 5s背面摄像头镜像?我衷心希望有人能对此情况有所了解。

1 个答案:

答案 0 :(得分:0)

几个小时后,我可以回答我自己的问题。

CVImageBuffer返回的CMSampleBuffer具有isFlipped属性,指示y轴已翻转。对此翻转进行校正可得到正确的图像。

我纠正了! isFlipped属性实际上指示原点位于我期望的位置,位于左上角。在错误地假设坐标系被翻转的情况下进行操作,因此我在处理过程中将其翻转。然后,我将结果渲染到CGImage中,并将其渲染到UIView中。由于CGImage实际上确实的坐标系发生了翻转,因此一切似乎都很好,直到我尝试对图像数据做其他事情并且那些翻转了。原来问题一直是CGImage