今、私は改善したいコードを持っています。srcデータのデータ型はbyteです。floatを使用して計算し、結果をバイトに格納したいと思います。しかし、BYTEとfloatの間でデータのデータ型を変換する方法がわかりません。私はAndroidNDKで開発しています。私が改善したい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;
}
と私のネオンアセンブリコード:
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 asmcode」にリストされている「code:convert byte tofloat」と「code:convertfloattobyte」のコーディング方法です。