Как использовать vImageMatrixMultiply для преобразования данных планировщика YUV в 32 бит на пиксель, 8 бит на канал RGBX?

У меня есть планарные данные YUV (420YpCbCr8BiPlanarFullRange), и я хотел бы преобразовать их в RBGX (RBGA, но с 255 в альфа-канале).

void * const luminescencePlaneBytes = ...;
void * const cbChrominancePlaneBytes = ...;
void * const crChrominancePlaneBytes = ...;

// ... Convert YUV planar -> RBGX 32bpp, 8bpc.
void *convertedBytes = ... 

документы vImage и этот ответ утверждает, что это возможно с помощью функции умножения матрицы:

vImageMatrixMultiply_Planar8

Однако мне не удалось найти какой-либо пример кода, который делает это.


person Robert    schedule 27.05.2014    source источник
comment
возможный дубликат самого быстрого преобразования YUV420P в RGBA на iOS с использованием ЦП   -  person David Berry    schedule 28.05.2014
comment
@ Дэвид - Да! Я не видел этого, спасибо. к сожалению, ответ на этот вопрос состоит в том, чтобы использовать vImageMatrixMultiply, на котором я застрял. Я перефразирую вопрос, чтобы конкретно спросить об использовании этой функции.   -  person Robert    schedule 28.05.2014


Ответы (1)


420->RGBA888 предполагает некоторую апсемплинг, а это значит, что vImageMatrixMultiply_Planar8 не сделает этого в одиночку. Вам нужно будет удвоить размер каналов цветности. После этого вы сможете сделать это с соответствующей матрицей.

Если у вас есть доступ к исходному коду разработчика iOS 8, я рекомендую вам взглянуть на vImageConvert_420Yp8_CbCr8ToARGB8888.

person Ian Ollmann    schedule 04.06.2014