Неожиданный вывод, конвертирующий CVPixelBuffer в MTLTexture - PullRequest
1 голос
/ 13 июня 2019

Я извлекаю SampleBuffers из AVAsset, используя AVAssetReader.Я конвертирую каждый CMSampleBuffer в MTLTexture на каждой итерации, используя фрагмент кода ниже.Тем не менее, я получаю ожидаемый CVPixelBuffer, но когда я пытаюсь конвертировать его, я получаю unexpected output.ожидаемый результат - this ..

Я уже пробовал отлаживать ширину и высоту, что точно, я пытаюсь использовать другое видео, возникла та же проблема, пытался создать другой textureCache.та же проблема.

    func convertToMTLTexture(sampleBuffer: CMSampleBuffer?) -> MTLTexture? {


        if let textureCache = textureCache,
            let sampleBuffer = sampleBuffer,
            let imageBuffer:CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {

            let width = CVPixelBufferGetWidth(imageBuffer)
            let height = CVPixelBufferGetHeight(imageBuffer)

            var texture: CVMetalTexture?
            CVMetalTextureCacheCreateTextureFromImage(kCFAllocatorDefault, textureCache,
                                                      imageBuffer, nil, .bgra8Unorm, width, height, 0, &texture)

            if let texture = texture {
                return CVMetalTextureGetTexture(texture)
            }

        }
        return nil
    }
...