首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIImage返回到CMSampleBuffer

CIImage返回到CMSampleBuffer
EN

Stack Overflow用户
提问于 2018-03-01 23:51:14
回答 1查看 2.1K关注 0票数 3

我记录视频(.mp4文件)使用AVAssetWriterCMSampleBuffer数据(从视频,音频输入)。

当我想要处理帧时,我将CMSampleBuffer转换为CIImage并对其进行处理。

但是如何使用我从CIImage新处理的图像缓冲区更新CMSampleBuffer

代码语言:javascript
复制
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    if output == videoOutput {
       let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
       let ciimage: CIImage = CIImage(cvPixelBuffer: imageBuffer)
       ... // my code to process CIImage (for example add augmented reality)
       // but how to convert it back to CMSampleBuffer?
       // because AVAssetWriterInput to encode video/audio in file needs CMSampleBuffer
       ...
    } 
    ...
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-02 20:28:06

您需要使用CIContext的render(_:to:bounds:colorSpace:)方法将CIImage呈现为CVPixelBuffer。

然后,您可以使用例如CMSampleBufferCreateReadyWithImageBuffer(_:_:_:_:_:)从CVPixelBuffer创建CMSampleBuffer

出于效率的原因,您可能需要使用CVPixelBuffer池,苹果的AVCamPhotoFilter示例代码中显示了一个这样的示例。具体来说,请参阅RosyCIRenderer class

另请参阅此答案,它可能对您的Applying a CIFilter to a Video File and Saving it有所帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49053547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档