什么是CVPixelbuffer中的飞机?

时间:2016-11-01 02:01:52

标签: ios cvpixelbuffer

在CVPixelBuffer对象中,有一个或多个平面。 (reference) 我们有方法来获得飞机的数量,高度,基地址。

那么飞机究竟是什么?它是如何在CVPixelBuffer中构建的?

样本:

<CVPixelBuffer 0x1465f8b30 width=1280 height=720 pixelFormat=420v iosurface=0x14a000008 planes=2>
    <Plane 0 width=1280 height=720 bytesPerRow=1280>
    <Plane 1 width=640 height=360 bytesPerRow=1280>

2 个答案:

答案 0 :(得分:6)

视频格式是一个非常复杂的主题。

某些视频流的像素存储为RGBA,ARGB,ABGR或其他几种变体(带或不带alpha通道)

(在RGBA格式中,你在内存中有一个像素的红色,绿色,蓝色和alpha值,然后是另一组4个字节,下一个像素的颜色值等等。)这是隔行扫描的颜色信息。

某些视频流将颜色通道分开,因此所有红色通道,蓝色,绿色和alpha都作为单独的“平面”发送。您将获得一个包含所有红色信息的缓冲区,然后是所有蓝色数据,然后是绿色,然后是alpha,如果包含alpha。 (想想彩色底片,其中有单独的乳液层来捕捉不同的颜色。乳液层是颜色信息的平面。这与数字相同。)

有些颜色数据在一个或两个平面中的格式,然后亮度在一个单独的平面上。这就是模拟彩电的工作原理。它以黑白(亮度)开始,然后广播公司添加了边带信号以传达颜色信息。

我不会经常使用CVPixelBuffers来了解你所要求的血腥细节,并且必须投入大量的时间和大量的咖啡才能“旋转”我的大脑足以掌握那些血淋淋的细节。

答案 1 :(得分:0)

尽管在处理CVPixelBuffers时,现有的和可接受的答案包含很多重要信息,但是在这种特殊情况下,答案是错误的。问题所涉及的两个平面是亮度色度平面

亮度是指亮度,色度是指颜色-来自Quora

Apple的以下代码片段使内容更清晰:

let lumaBaseAddress = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0)
let lumaWidth = CVPixelBufferGetWidthOfPlane(pixelBuffer, 0)
let lumaHeight = CVPixelBufferGetHeightOfPlane(pixelBuffer, 0)
let lumaRowBytes = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 0)

var sourceLumaBuffer = vImage_Buffer(data: lumaBaseAddress,
                                     height: vImagePixelCount(lumaHeight),
                                     width: vImagePixelCount(lumaWidth),
                                     rowBytes: lumaRowBytes)

let chromaBaseAddress = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1)
let chromaWidth = CVPixelBufferGetWidthOfPlane(pixelBuffer, 1)
let chromaHeight = CVPixelBufferGetHeightOfPlane(pixelBuffer, 1)
let chromaRowBytes = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 1)

var sourceChromaBuffer = vImage_Buffer(data: chromaBaseAddress,
                                       height: vImagePixelCount(chromaHeight),
                                       width: vImagePixelCount(chromaWidth),
                                       rowBytes: chromaRowBytes)

查看完整的参考文献here