我有一个目前非常简单的相机预览应用,其中一个AVCaptureVideoDataOutputSampleBufferDelegate
也占用了视频帧。我对这些帧进行了一些处理(目前没有什么困难,我只是对r,g,b值进行平均以进行灰度缩放)并将它们绘制到UIView上。
第一次执行此操作时,我注意到该视图已翻转。嗯,我想当然是将AVCaptureConnection
的默认方向为LandscapeLeft
,所以我将其更改为Portrait
。现在缓冲区处于纵向状态。上下翻转。并镜像。
我可以通过将AVCaptureConnection
的{{1}}设置为videoOrientation
并将PortraitUpsideDown
设置为isVideoMirrored
来获得所需的方式,但是我没有知道为什么我需要这样做,却找不到相关文档或其他人在做同样的事情。附加到我的true
的{{1}}似乎在做相同的事情。我不想做这个更改,只是想看看它是否在其他设备上崩溃了,所以我想了解这里发生了什么。因此,问题就来了:为什么我的AVCaptureConnection
颠倒过来并为iOS 11.4上的iPhone 5s背面摄像头镜像?我衷心希望有人能对此情况有所了解。
答案 0 :(得分:0)
几个小时后,我可以回答我自己的问题。
从 CVImageBuffer
返回的CMSampleBuffer
具有isFlipped
属性,指示y轴已翻转。对此翻转进行校正可得到正确的图像。
我纠正了! isFlipped
属性实际上指示原点位于我期望的位置,位于左上角。在错误地假设坐标系被翻转的情况下进行操作,因此我在处理过程中将其翻转。然后,我将结果渲染到CGImage
中,并将其渲染到UIView
中。由于CGImage
实际上确实的坐标系发生了翻转,因此一切似乎都很好,直到我尝试对图像数据做其他事情并且那些翻转了。原来问题一直是CGImage
。