iOS:在附加到AVAssetWriterInput之前裁剪CMSampleBufferRef

Gri*_*neh 7 core-graphics avfoundation core-video ios avassetwriter

我目前正在尝试使用CoreImage,学习如何将CIFilters应用于相机Feed.目前我已经成功地拍摄了相机,应用过滤器并以视频的形式将Feed写入AVAssetWriter,但我遇到的一个问题是,在过滤过程中,我实际裁剪了图像数据所以它总是有方形尺寸(项目的其他方面需要)

我的流程如下:

  1. 使用AVCaptureSession捕获Feed
  2. 从捕获输出中获取CMSampleBufferRef并获取CVPixelBufferRef
  3. 获取CVPixelBufferRef的基地址,并使用基地址作为其数据创建CGBitmapContext(因此我们可以覆盖它)
  4. 将CVPixelBufferRef转换为CIImage(使用其中一个CIImage构造函数)
  5. 将过滤器应用于CIImage
  6. 将CIImage转换为CGImageRef
  7. 将CGImageRef绘制到CGBitmapContext(导致样本缓冲区内容被覆盖)
  8. 将CMSampleBufferRef附加到AVAssetWriterInput.

没有将CGImageRef绘制到上下文中,这就是我得到的:

在此输入图像描述

在将CGImageRef绘制到上下文之后,这就是我得到的:

在此输入图像描述

理想情况下,我只想告诉CMSampleBufferRef它有新的维度,以便省略附加信息.但我想知道我是否必须完全创建一个新的CMSampleBufferRef.

任何帮助将不胜感激!