카메라에서 색상축출어플을 만드는데 아래와 같은 오류가 발생합니다
public int[] decodeYUV420SP(byte[] yuv420sp, int width, int height) {
final int frameSize = width * height;
int[] rgb = new int[frameSize];
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
int y = (0xff & ((int) yuv420sp[yp])) - 16;
if (y < 0) y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
}
v = (0xff & yuv420sp[uvp++]) - 128; <--- 에러
02-20 17:18:26.945: E/AndroidRuntime(1515): FATAL EXCEPTION: main
02-20 17:18:26.945: E/AndroidRuntime(1515): Process: com.toright, PID: 1515
02-20 17:18:26.945: E/AndroidRuntime(1515): java.lang.ArrayIndexOutOfBoundsException: length=1843200; index=1843200
02-20 17:18:26.945: E/AndroidRuntime(1515): at com.toright.CameraActivity$Preview.decodeYUV420SP(CameraActivity.java:412)
02-20 17:18:26.945: E/AndroidRuntime(1515): at com.toright.CameraActivity$Preview.colorRGB(CameraActivity.java:375)
02-20 17:18:26.945: E/AndroidRuntime(1515): at com.toright.CameraActivity$Preview.access$0(CameraActivity.java:373)
02-20 17:18:26.945: E/AndroidRuntime(1515): at com.toright.CameraActivity$Preview$1.onPreviewFrame(CameraActivity.java:368)
02-20 17:18:26.945: E/AndroidRuntime(1515): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:981)
02-20 17:18:26.945: E/AndroidRuntime(1515): at android.os.Handler.dispatchMessage(Handler.java:102)
02-20 17:18:26.945: E/AndroidRuntime(1515): at android.os.Looper.loop(Looper.java:136)
02-20 17:18:26.945: E/AndroidRuntime(1515): at android.app.ActivityThread.main(ActivityThread.java:5105)
02-20 17:18:26.945: E/AndroidRuntime(1515): at java.lang.reflect.Method.invokeNative(Native Method)
02-20 17:18:26.945: E/AndroidRuntime(1515): at java.lang.reflect.Method.invoke(Method.java:515)
02-20 17:18:26.945: E/AndroidRuntime(1515): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-20 17:18:26.945: E/AndroidRuntime(1515): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
02-20 17:18:26.945: E/AndroidRuntime(1515): at dalvik.system.NativeStart.main(Native Method)
====================================================
위와같은 에러가 갤럭시3에서는 안나고요 LG G2하고 스카이폰에서 위와같은 에러가 발생합니다
v = (0xff & yuv420sp[uvp++]) - 128; <--- 에러
여기에서 에러가 발생합니다
왜 그럴까요?
미쳐버리겟습니다
우어... 이런데서 ArrayIndexOutOfBoundsException 요게 떠버리면 정말 멘붕 오시겠네여 ㄷㄷ;
그것도 특정 디바이스라.... 캬... 대박입니다. ;;
디버깅 돌려보시면 아마 -128을 할시 -1 이하로 떨어지기 때문에 그런 에러가 발생하긴 하겠는데...
그렇다고 예외처리하고 넘어가면 뭔가 로직이 안될테구....
^^; 소스를 직접 보지못하면 이건 답변드리기 힘들어 보이네요.