用NEON做RGB565转RGBA
做GBA模拟器,因为后端要用glTexImage2D加载视频buffer的内容,
不幸的是opengles库做格式转换奇慢。如果让glTexImage2D加载RGB565格式的视频,
游戏帧数一下掉到只有10来帧。用NEON加速后,上升到45帧左右。
void neon_convert (uint8_t * dest, uint8_t * src, int n)
{
n/=8;
int i;
for(i=0;i<n;i++) {
uint16x8_t rgb=vld1q_u16((uint16_t*)src);
uint16x8_t gb, b;
uint8x8x4_t res;
res.val[3] = vdup_n_u8 (255);
gb = vshrq_n_u16 (rgb, 5);
b = vshrq_n_u16 (rgb, 5 + 6);
res.val[2] = vmovn_u16 (rgb); /* get low 5 bits */
res.val[1] = vmovn_u16 (gb); /* get mid 6 bits */
res.val[0] = vmovn_u16 (b); /* get top 5 bits */
res.val[0] = vshl_n_u8 (res.val[0], 3); /* shift to top */
res.val[1] = vshl_n_u8 (res.val[1], 2); /* shift to top */
res.val[2] = vshl_n_u8 (res.val[2], 3); /* shift to top */
res.val[0] = vsri_n_u8 (res.val[0], res.val[0], 5);
res.val[1] = vsri_n_u8 (res.val[1], res.val[1], 6);
res.val[2] = vsri_n_u8 (res.val[2], res.val[2], 5);
vst4_u8 (dest, res);
src += 8*2;
dest += 8*4;
}
}
i8320 用NEON做RGB565转RGBA
最新推荐文章于 2024-06-02 20:07:26 发布