Я пытаюсь обернуть голову вокруг сущности NEON и решил, что могу начать с примера и задать несколько вопросов.
В этом эксперименте я хочу преобразовать 32-битный RGB в 16-битный BGR.Что было бы хорошим началом для преобразования следующего кода для использования встроенных функций NEON?Проблема, с которой я столкнулся здесь, заключается в том, что 16-битная система не соответствует какой-либо внутренней характеристике, которую я вижу.Есть 16х4, 16х8 и т. Д., Но мне просто не везет, когда я обдумываю, как мне к этому подойти.Любые советы?
Вот код, который я пытаюсь преобразовать.
typedef struct {
uint16_t b:5, g:6, r:5;
} _color16;
static int depth_transform_32_to_16_c (VisVideo *dest, VisVideo *src)
{
int x, y;
int w;
int h;
_color16 *dbuf = visual_video_get_pixels (dest);
uint8_t *sbuf = visual_video_get_pixels (src);
uint16x8
int ddiff;
int sdiff;
depth_transform_get_smallest (dest, src, &w, &h);
ddiff = (dest->pitch / dest->bpp) - w;
sdiff = src->pitch - (w * src->bpp);
for (y = 0; y < h; y++) {
for (x = 0; x < w; x++) {
dbuf->b = *(sbuf++) >> 3;
dbuf->g = *(sbuf++) >> 2;
dbuf->r = *(sbuf++) >> 3;
dbuf++;
sbuf++;
}
dbuf += ddiff;
sbuf += sdiff;
}
return VISUAL_OK;
}
Редактировать: о, почему-то я смотрел на это с учетом 16x3 бит, но мы смотрим на5,6,5 = 16 бит.Я понимаю, что мне нужны смены.Хм.