我有一个MTLTexture,它是它出现在其中的MTLView的大小。但是,我正在将纹理写入AVAssetWriterInputPixelBufferAdaptor
,目的是记录需要纹理为标准视频大小(即1280x720)的视频。
目前,我正在使用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, [])
尝试CryptoTab-世界上第一个具有挖掘功能的浏览器。全球已有超过1000万用户使用CryptoTab Browser赚钱!