swift metal HDR video цветопередача

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

все работает за исключением цветопередачи на видео которые были записаны с поддержкой HDR

введите сюда описание изображения

в зеленом квадрате верная цветопередача, слой ниже это рендер из Metal

я написал тестовый проект в котором можно воспроизвести проблему - https://github.com/easyproger/testHDRcolor

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

пример контекста:

context = CIContext(mtlDevice: device, options: [
      .workingFormat: CIFormat.RGBAh,
      .workingColorSpace: colorSpace
])
context.render(image, to: texture, commandBuffer: nil, bounds: image.extent, colorSpace: colorSpace)

пример через CVMetalTextureCacheCreateTextureFromImage

func createTexture(fromPixelBuffer pixelBuffer: CVPixelBuffer, pixelFormat: MTLPixelFormat, planeIndex: Int) -> MTLTexture? {
    var mtlTexture: MTLTexture? = nil
    let width = CVPixelBufferGetWidthOfPlane(pixelBuffer, planeIndex)
    let height = CVPixelBufferGetHeightOfPlane(pixelBuffer, planeIndex)
        
    var texture: CVMetalTexture? = nil
    let status = CVMetalTextureCacheCreateTextureFromImage(nil, textureCache!, pixelBuffer, nil, pixelFormat, width, height, planeIndex, &texture)
    if status == kCVReturnSuccess {
        mtlTexture = CVMetalTextureGetTexture(texture!)
    }
        
    return mtlTexture
}

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


Ответы (1 шт):

Автор решения: VAndrJ

К сожалению, пока не получится так как Вы хотите на iOS.

Metal поддерживает рендеринг с использованием формата MTLPixelFormatBGR10_XR_sRGB, но на iOS пока не выходит за пределы цветового пространства P3

Как выглядит работа Metal с HDR:

введите сюда описание изображения

Для последнего шага необходим wantsExtendedDynamicRangeContent, который доступен только на macOS.

→ Ссылка