我正试图围绕 NEON 内在函数展开思考,并认为我可以从一个示例开始并提出一些问题。
在这个实验中,我想将 32 位 RGB 转换为 16 位 BGR。将以下代码转换为使用 NEON 内在函数是一个好的开始?我在这里遇到的问题是 16 位与我能看到的任何内在内容都不匹配。有 16x4 16x8 等。但我只是没有运气围绕我需要如何处理这个问题。有小费吗?
这是我要转换的代码。
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 位。我意识到我需要轮班。唔。