마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

카메라 소스에서 에러가 납니다

0 추천
카메라에서 색상축출어플을 만드는데 아래와 같은 오류가 발생합니다

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하고 스카이폰에서 위와같은 에러가 발생합니다

     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; <--- 에러

여기에서 에러가 발생합니다

왜 그럴까요?

미쳐버리겟습니다
헨씀히포 (3,660 포인트) 님이 2014년 2월 20일 질문
헨씀히포님이 2014년 2월 20일 수정

1개의 답변

0 추천
 
채택된 답변

로그에 java.lang.ArrayIndexOutOfBoundsException 이라고 나오네요

byte[] yuv420sp 의 크기가 1843200이나. 입력된 width *  height 값이 이 값보다 더 큰 듯 합니다.

단말마다 해상도가 다르다보니 갤럭시 s3의 경우 에러가 없지만 다른 단말은 문제가  발생한 듯 합니다.

아마 1280x720 x 2(YUV420sp 데이터 사이즈) 여서 1843200가 나온 듯 한데..

다른 단말은 해상도가 이보다 큰 듯 합니다. 해당 값을  1280, 720 로 변경 해 넣어보세요

아니면 byte[] yuv420sp 데이터를 단말 해상도에  맞춰 더 많이 구해지게 수정하시던지요.

 

사악미소 (65,330 포인트) 님이 2014년 2월 21일 답변
헨씀히포님이 2014년 2월 22일 채택됨
...