Я знаю, что следующая формула может использоваться для преобразования изображений RGB к изображениям YUV. В следующей формуле R, G, B, Y, U, V - все 8-битовые целые числа без знака, а промежуточные значения - 16-разрядные целые числа без знака.
Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16
U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128
V = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128
Но когда формула используется в OpenCL, дело обстоит иначе.
1. Доступ для записи в 8-битную память является необязательным расширением, что означает, что некоторые реализации OpenCL могут не поддерживать его.
2. Даже указанное выше расширение поддерживается, оно смертельно медленное по сравнению с 32-битным доступом для записи.
Для повышения производительности каждые 4 пикселя будут обрабатываться одновременно, поэтому на входе будет 12 8-битных целых чисел. а на выходе - 3 32-битных целых числа без знака (первое соответствует 4 отсчетам Y, второе - 4 отсчетам U, последнее - 4 отсчетам В).
Мой вопрос - как получить эти 3 32-битные целые числа прямо из 12 8-битных целых чисел? Есть ли формула для получения этих 3 32-битных целых чисел, или мне просто нужно использовать старую формулу, чтобы получить 12 8-битных целочисленных результатов (4 Y, 4 U, 4 V) и построить 3 32-битных целых числа с битом -wise операция?