将AVCaptureVideoDataOutput捕捉的CVPixelBuffer对象作为OpenGLES的贴图来呈现。使用AVCaptureVideoDataOutput的一个问题在于会失去AVCaptureMovieFileOutput来记录输出的便捷性。解决办法:使用AVAssetWriter创建一个与AVCaptureMovieFileOutput类似的可重用类从高级捕捉输出中记录输出。
公式:
kCVPixelFormatType_{长度|序列}{颜色空间}{Planar|BiPlanar}{VideoRange|FullRange}
Planar: 平面;BiPlanar:双平面
平面/双平面主要应用在yuv上。uv分开存储的为Planar,反之是BiPlanar。所以,kCVPixelFormatType_420YpCbCr8PlanarFullRange是420p,kCVPixelFormatType_420YpCbCr8BiPlanarFullRange是nv12.
VideoRange和FullRange的区别在于数值的范围,FullRange比VideoRange大一些,颜色也更丰富一些。
如果没有指定颜色范围,默认都是FullRange。但有一个除外:kCVPixelFormatType_420YpCbCr8Planar。因为有一个kCVPixelFormatType_420YpCbCr8PlanarFullRange定义,所以kCVPixelFormatType_420YpCbCr8Planar理论上应该是VideoRange (参考链接)
颜色空间对应的就是它在内存中的顺序。比如kCVPixelFormatType_32BGRA,内存中的顺序是 B G R A B G R A...。
有一些特别的,比如kCVPixelFormatType_16BE555,这里需要用BE或LE指定字节顺序。
有的颜色空间后面还带有一个数字,用于表示bit长度。
网友评论