【发布时间】:2013-01-24 10:14:13
【问题描述】:
现在我有一个想要改进的代码。 src 数据的数据类型是字节。我想用浮点数计算并将结果存储到字节。但我不知道如何转换数据 bwtween BYTE 和 float 的数据类型。我在 Android NDK 上开发。我想改进的 C++ 代码如下:
void DoEffect(BYTE *pSrc, float rat){
//image data:BGRA
float red, green, blue;
red = pSrc[RED_CHANNEL] * rat;
green = pSrc[GREEN_CHANNEL] * rat;
blue = pSrc[BLUE_CHANNEL] * rat;
// some step to calculate the result;
// red = ...
// ...
//
pSrc[RED_CHANNEL] = (BYTE)red;
pSrc[GREEN_CHANNEL] = (BYTE)green;
pSrc[BLUE_CHANNEL] = (BYTE)blue;
}
还有我的霓虹 asm 代码:
void DoEffect_neon_asm(BYTE *pSrc, float rat){
__asm__ __volatile__(
"vld4.8 {d0-d3},[%[src]] \n"
"vdupq.32 {d4, d5}, [%[rat]] \n"
"# convert src data to float? \n"
"code: convert byte to float \n"
"# calculate result \n"
".. \n"
"# convert result to byte \n"
"code: convert float to byte \n"
:[src]"r"(pSrc), [rat]"r"(rat)
);
}
我的问题是如何编写“neon asm code”中列出的“code: convert byte to float”和“code: convert float to byte”。
【问题讨论】:
-
您需要分两个阶段执行此操作 - 首先将字节解压缩为 32 位整数,然后将 32 位整数转换为浮点数。请注意,使用内部函数而不是原始的内联 asm 会更容易。