编辑:
固定的工作样本位于
https://github.com/halmueller/vImage-mac-sample
。
我正在阅读MacBook Pro Facetime摄像头的提要,以使用vImage框架进行处理。我在苹果的
VideoCaptureSample
,它是为iOS编写的。
我正在忙于创建vImageConverter,它创建了vImage可以使用的图像缓冲区。我的呼叫
vImageConverter_CreateForCVToCGImageFormat()
失败,控制台错误为“srcCVFormat中的信息不足,无法解码图像。vImageCVImageFormatError=-21601”。
同样的调用也适用于iOS。但iOS和macOS上的图像格式不同。在iOS上,vImageConverter构造函数能够推断格式信息,但在macOS上,它不能。
以下是我的设置代码:
func displayEqualizedPixelBuffer(pixelBuffer: CVPixelBuffer) {
var error = kvImageNoError
if converter == nil {
let cvImageFormat = vImageCVImageFormat_CreateWithCVPixelBuffer(pixelBuffer).takeRetainedValue()
let deviceRGBSpace = CGColorSpaceCreateDeviceRGB()
let dcip3SolorSpace = CGColorSpace(name: CGColorSpace.dcip3)
vImageCVImageFormat_SetColorSpace(cvImageFormat,
deviceRGBSpace)
print(cvImageFormat)
if let unmanagedConverter = vImageConverter_CreateForCVToCGImageFormat(
cvImageFormat,
&cgImageFormat,
nil,
vImage_Flags(kvImagePrintDiagnosticsToConsole),
&error) {
guard error == kvImageNoError else {
return
}
converter = unmanagedConverter.takeRetainedValue()
} else {
return
}
}
在iOS上运行时,我在控制台中看到:
vImageCVFormatRef 0x101e12210:
type: '420f'
matrix:
0.29899999499321 0.58700001239777 0.11400000005960
-0.16873589158058 -0.33126410841942 0.50000000000000
0.50000000000000 -0.41868758201599 -0.08131241053343
chroma location: <RGB Base colorspace missing>
RGB base colorspace: =Bo
但在macOS上
vImageConverter_CreateForCVToCGImageFormat
返回nil,我看到:
vImageCVFormatRef 0x10133a270:
type: '2vuy'
matrix:
0.29899999499321 0.58700001239777 0.11400000005960
-0.16873589158058 -0.33126410841942 0.50000000000000
0.50000000000000 -0.41868758201599 -0.08131241053343
chroma location: <RGB Base colorspace missing>
RGB base colorspace: àü
2018-03-13... kvImagePrintDiagnosticsToConsole: vImageConverter_CreateForCVToCGImageFormat error:
insufficient information in srcCVFormat to decode image. vImageCVImageFormatError = -21601
请注意,图像类型(4字母代码)不同,RGB基本颜色空间也不同。我在Mac上尝试使用dcip3ColorSpace而不是deviceRGB,结果是一样的。
创建这个vImageConverter需要什么?