NEONコンパイラ組み込み関数を頭に入れようとしていて、例題から始めていくつかの質問をすることができました。ARMネオンコンパイラ組み込み関数を使用した深度変換
この実験では、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ビットを見ています。私はシフトが必要であることを知っている。うーん。