CIFilter filterWithCVPixelBuffer 在 iOS 中返回 nil

CIFilter filterWithCVPixelBuffer returning nil in iOS

我正在尝试使用 filterWithCVPixelBuffer 创建一个 CIFilter,但它返回 nil。 这就是我想要做的:

CFDictionaryRef options = CMCopyDictionaryOfAttachments(nil, photo.pixelBuffer, kCMAttachmentMode_ShouldPropagate);
CIFilter * ciFilter = [CIFilter filterWithCVPixelBuffer:photo.pixelBuffer properties:(__bridge NSDictionary*)options options:nil];

photo 是给委托的 AVCapturePhoto 实例。 我正在使用 iOS 12 和 运行 iPhone7 上的代码。

认为我在头文件中的文档中找到了答案:

Returns a CIFilter that will in turn return a properly processed CIImage as "outputImage".

Note that when using this initializer, you should pass in a CVPixelBufferRef with one of the following Raw pixel format types kCVPixelFormatType_14Bayer_GRBG, kCVPixelFormatType_14Bayer_RGGB, kCVPixelFormatType_14Bayer_BGGR, kCVPixelFormatType_14Bayer_GBRG as well as the root properties attachment from the CMSampleBufferRef.

所以我想当你有 CMSampleBuffer 时应该使用这种方法,而当来自 AVCapturePhoto 时不可行。

问题出在属性 NSDictionary 中。我应该简单地通过 photo.metadata。 所以函数调用看起来像:

CIFilter * ciFilter = [CIFilter filterWithCVPixelBuffer:photo.pixelBuffer properties:photo.metedata options:nil];

当然,您可以传递包含所需 CIRAWFilterOption(s)NSDictionary