私は 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 ビットを見ています。シフトが必要だと気づきました。うーん。