相关疑难解决方法(0)

如何将MTLTexture转换为CVpixelBuffer以写入AVAssetWriter?

我要求在实时视频上应用过滤器,我正在尝试在Metal中进行过滤.

但是在将过滤器编码为目标过滤器之后,我遇到了将MTLTexture转换为CVPixelBuffer的问题.参考(https://github.com/oklyc/MetalCameraSample-master-2)

这是我的代码.

if let pixelBuffer = pixelBuffer {
                CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.init(rawValue: 0))             
                let region = MTLRegionMake2D(0, 0, Int(currentDrawable.layer.drawableSize.width), Int(currentDrawable.layer.drawableSize.height))                    
                let bytesPerPixel = 4;
                let bytesPerRow = CGFloat(bytesPerPixel) * currentDrawable.layer.drawableSize.width

                let tempBuffer = CVPixelBufferGetBaseAddress(pixelBuffer)
                destinationTexture.getBytes(tempBuffer!, bytesPerRow: Int(bytesPerRow), from: region1, mipmapLevel: 0)

                let image = self.imageFromCVPixelBuffer(buffer: pixelBuffer)
                CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags.init(rawValue: 0))

            }
Run Code Online (Sandbox Code Playgroud)

imageFromCVPixelBuffer方法看起来像这样.

func imageFromCVPixelBuffer(buffer: CVPixelBuffer) -> UIImage {

    let ciimage = CIImage(cvPixelBuffer: buffer)
    let context = CIContext(options: nil)
    let cgimgage = context.createCGImage(ciimage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(buffer), height: …
Run Code Online (Sandbox Code Playgroud)

ios swift metal metalkit metal-performance-shaders

3
推荐指数
1
解决办法
2756
查看次数

标签 统计

ios ×1

metal ×1

metal-performance-shaders ×1

metalkit ×1

swift ×1