1. 로직의 최적화
a. 255-src2_channel[3] 는 한번만 계산해도 되는데 한 루프에서 3번을 계산하는 듯 합니다.한번만 계산하게 바꿔보세요.
b. 사용하는 공식이 어떻게 되는지 모르겠지만 255 로 나누게 되어 있는듯 한데.. 256 로 하면 안되나요?
256로 해도 된다면 /256 대신 >> 8 로 변경해보세요. 나누기보다 이론상 시프트 연산이 빠릅니다.
2. 사용언어 변경
연산속도의 경우 java -> C -> Neon 순입니다.
RGBA8888 -> YUV420P로 변환로직을 NEON으로 만들어 봤는데, C 코드보다 약 10배 정도 향상이 되었습니다.
NEON코드를 공부하셔야 하는 이슈가 있긴 하지만
java로 로직으로 만드신것을 Neon에서 변경해주시면
원하시는대로 10배이상의 속도 향상이 될 것으로 보입니다.
3. 연산을 미리 해둔 table 작성
제 생각이 맞다면, src2_channel[0] ~ src2_channel[3] 의 범위가 각각 0~255 일겁니다.
그렇다면 256*256 행렬로 곱한 결과를 가진 행렬을 미리 만들어 두세요,
src2_channel[0]*src2_channel[3]; 대신에
maxtix[src2_channel[0], src2_channel[3]]; 를 하면, 미리 계산해둔 값이 나오는 방식이죠..
뒤에 더하기까지 하려면 256*256*256행렬을 미리 만들어, 가져오는 방식으로 하셔도 되구요.
그러면 연상량이 상당이 줄테니 속도가 빨라 질겁니다.