Я пытаюсь сделать i420 (YCbCr планировщик) с помощью MetalKitCVMetalTextureCacheCreateTextureFromImage всегда возвращают нуль
большинство примеров использования CMSampleBuffer, которые из камеры,
, но моя цель с помощью данной i420 байт.
я сделать что-то вроде этого:
let data = NSMutableData(contentsOfURL: NSBundle.mainBundle().URLForResource("yuv_640_360", withExtension: "yuv")!)
// Cache for Y
CVMetalTextureCacheCreate(kCFAllocatorDefault, nil, self.device!, nil, &videoTextureCache)
var pixelBuffer: CVPixelBuffer?
CVPixelBufferCreateWithBytes(kCFAllocatorDefault, Int(size.width), Int(size.height), kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, data.mutableBytes, Int(size.width), nil, nil, [
"kCVPixelBufferMetalCompatibilityKey": true,
"kCVPixelBufferOpenGLCompatibilityKey": true,
"kCVPixelBufferIOSurfacePropertiesKey": []
]
, &pixelBuffer)
// Y texture
var yTextureRef : Unmanaged<CVMetalTexture>?
let yWidth = CVPixelBufferGetWidthOfPlane(pixelBuffer, 0)
let yHeight = CVPixelBufferGetHeightOfPlane(pixelBuffer, 0)
let result = CVMetalTextureCacheCreateTextureFromImage(kCFAllocatorDefault, (videoTextureCache?.takeUnretainedValue())!, pixelBuffer, nil, MTLPixelFormat.R8Unorm, yWidth, yHeight, 0, &yTextureRef);
в основном код почти так же, как и другие примеры, но я создаю свое собственное CVPixelBuffer самого.
я не получил ошибку, когда я создания CVPixelBuffer и CVMetalTexture,
но всегда возвращают нуль для yTexture.
Как создать правильный CVPixelBuffer и использовать его для рендеринга?
Ты спас меня там. Благодаря! – Hexagons