我一直在关注苹果直播摄像机编辑器 https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/avcamfilter_applying_filters_to_a_capture_stream进行实时视频编辑的代码。
到目前为止一切顺利,但我需要一种方法将样本缓冲区裁剪成 4 部分,然后使用不同的 CIFilter 处理所有四个部分。例如,如果图像的大小为 1000x1000,我想将 CMSampleBuffer 裁剪为 4 个大小为 250x250 的图像,然后对每个图像应用唯一的滤镜,将其转换回 CMSampleBuffer 并显示在 Metal View 上。这是我可以在 CGContext 中裁剪 CMSampleBuffer 但无法将其转换回 CMSampleBuffer 的代码:
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
CVPixelBufferLockBaseAddress(imageBuffer, .readOnly)
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer)
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer)
let cropWidth = 640
let cropHeight = 640
let colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: baseAddress, width: cropWidth, height: cropHeight, bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue | CGBitmapInfo.byteOrder32Little.rawValue)
CVPixelBufferUnlockBaseAddress(imageBuffer, .readOnly)
// create image
let cgImage: CGImage = context!.makeImage()!
let image = UIImage(cgImage: cgImage)
我不需要 CGImage,我需要 CMSampleBuffer 或 CVImageBuffer,这样我就可以将它传递给这个函数func render(pixelBuffer: CVPixelBuffer) -> CVPixelBuffer?
of FilterRenderer
苹果此链接的示例代码中使用的类。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)