我有一个MTLTexture,它的大小与它所在的MTLView相同。但是,为了录制需要标准视频大小(即1280x720),我将纹理写入AVAssetWriterInputPixelBufferAdaptor。
目前,我正在使用MTLRegionMake2D来指定要提取的纹理区域。在宽度较长的手机上,裁剪的效果不太明显。但在更加方形和大的iPad上,裁剪很明显。理想情况下,我希望先调整纹理的大小,使其与视频宽度或高度相同,然后再裁剪其余部分(而不仅仅是裁剪)。
调整MTLTexture大小的适当方法是什么?
示例代码:
guard let pixelBufferPool = assetWriterPixelBufferInput.pixelBufferPool else { return }
var maybePixelBuffer: CVPixelBuffer? = nil
let status = CVPixelBufferPoolCreatePixelBuffer(nil, pixelBufferPool, &maybePixelBuffer)
if status != kCVReturnSuccess { return }
guard let pixelBuffer = maybePixelBuffer else { return }
CVPixelBufferLockBaseAddress(pixelBuffer, [])
let pixelBufferBytes = CVPixelBufferGetBaseAddress(pixelBuffer)!
let bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer)
let region = MTLRegionMake2D(0, 0, Int(videoSize.width), Int(videoSize.height))
texture.getBytes(pixelBufferBytes, bytesPerRow: bytesPerRow, from: region, mipmapLevel: 0)
let frameTime = CACurrentMediaTime()
let presentationTime = CMTimeMakeWithSeconds(frameTime, 240)
assetWriterPixelBufferInput.append(pixelBuffer, withPresentationTime: presentationTime)
CVPixelBufferUnlockBaseAddress(pixelBuffer, [])