Неожиданный результат преобразования CVPixelBuffer в MTLTexture

Я извлекаю SampleBuffers из AVAsset с помощью AVAssetReader. Я конвертирую каждый CMSampleBuffer в MTLTexture на каждой итерации, используя приведенный ниже фрагмент кода. однако я получаю ожидаемый CVPixelBuffer, но когда я пытаюсь преобразовать его, я получил неожиданный вывод. ожидаемый результат: 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
    }

person Abhishek Dave    schedule 13.06.2019    source источник
comment
Какой формат пикселей у вашего CMSampleBuffers? (Мое предположение: YCbCr)   -  person Matthijs Hollemans    schedule 13.06.2019
comment
Вы можете найти рабочий пример кода для этого типа проблемы здесь: stackoverflow.com/questions/53911662/   -  person MoDJ    schedule 13.06.2019