jni된 다음 소스를 돌리는데 아래와 같은 에러메시지가 뜹니다.
소스 아래에
rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
이부분만 주석을 달고 실행시키면 잘돌아가더라고요..
근데 이 함수는 자바에서 잘 돌아가는 소스였거든요? 제가메모리가 부족해서 jni로 만들었는데...
실행시키면 잠깐 실행 되다가 아래로그와 같이 뻑이 나네요...
도대체 저 아래의 로그 메시지는 무엇을 뜻하는 것인지요..
보통 에뮬돌릴때는 나오지 안던 메시지 이던데...
고수님들의 도움을 부탁드립니다...
jint* Java_com_camerapreview08_decodeYUV_decode(JNIEnv *env,jobject thiz,jint* rgb,unsigned char* yuv420sp,jint width,jint height)
{
int frameSize = 25344;
int i=0,j=0,u=0,v=0,yp=0;
int uvp =0;
int y=0;
int y1192=0,r=0,g=0,b=0;
for (j = 0, yp = 0; j < height; j++) {
uvp = (frameSize + (j >> 1) * width);
u = 0;
v = 0;
for (i = 0; i < width; i++, yp++) {
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;
}
y1192 = 1192 * y;
r = (y1192 + 1634 * v);
g = (y1192 - 833 * v - 400 * u);
b = (y1192 + 2066 * u);
if (r < 0) r = 0; else if (r > 262143) r = 262143;
if (g < 0) g = 0; else if (g > 262143) g = 262143;
if (b < 0) b = 0; else if (b > 262143) b = 262143;
rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff); //<== 이부분이 문제
}
}
return rgb;
}
이하 오류로그
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
D/camera ( 1363): rgb = -6029105
D/camera ( 1363): rgb = -6029105
D/camera ( 1363): rgb = -6029105
D/camera ( 1363): rgb = -6029312
D/camera ( 1363): rgb = -16742912
D/camera ( 1363): rgb = -16742912
D/camera ( 1363): rgb = -16742912
I/DEBUG ( 873): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *
**
I/DEBUG ( 873): Build fingerprint: 'generic/sdk/generic/:1.5/CUPCAKE/150240:e
ng/test-keys'
I/DEBUG ( 873): pid: 1363, tid: 1368 >>> com.camerapreview08 <<<
I/DEBUG ( 873): signal 11 (SIGSEGV), fault addr ff00ed20
I/DEBUG ( 873): r0 00000000 r1 00000328 r2 ff00ed00 r3 4562e568
I/DEBUG ( 873): r4 00000003 r5 40008238 r6 45635000 r7 ad084a98
I/DEBUG ( 873): r8 ad083e10 r9 4359f2e0 10 40008238 fp ad083e10
I/DEBUG ( 873): ip 400081e8 sp 44742af8 lr 00000003 pc ad016160 cpsr 600
00010
I/DEBUG ( 873): #00 pc 00016160 /system/lib/libdvm.so
I/DEBUG ( 873): #01 pc 00016be8 /system/lib/libdvm.so
I/DEBUG ( 873): #02 pc 0001535c /system/lib/libdvm.so
I/DEBUG ( 873): #03 pc 00015770 /system/lib/libdvm.so
I/DEBUG ( 873): #04 pc 000158d8 /system/lib/libdvm.so
I/DEBUG ( 873): #05 pc 0005a120 /system/lib/libdvm.so
I/DEBUG ( 873): #06 pc 0005a240 /system/lib/libdvm.so
I/DEBUG ( 873): #07 pc 0003ed26 /system/lib/libdvm.so
I/DEBUG ( 873): #08 pc 0002e814 /system/lib/libdvm.so
I/DEBUG ( 873): #09 pc 00045b80 /system/lib/libandroid_runtime.so
I/DEBUG ( 873): #10 pc 000186d4 /system/lib/libui.so
I/DEBUG ( 873): #11 pc 0001f1ee /system/lib/libui.so
I/DEBUG ( 873): #12 pc 0002acc4 /system/lib/libutils.so
I/DEBUG ( 873): #13 pc 0002e76c /system/lib/libutils.so
I/DEBUG ( 873): #14 pc 0002e942 /system/lib/libutils.so
I/DEBUG ( 873): #15 pc 00033600 /system/lib/libutils.so
I/DEBUG ( 873): #16 pc 000287f4 /system/lib/libutils.so
I/DEBUG ( 873): #17 pc 000280e6 /system/lib/libandroid_runtime.so
I/DEBUG ( 873): #18 pc 000285d4 /system/lib/libutils.so
I/DEBUG ( 873): #19 pc 0000f880 /system/lib/libc.so
I/DEBUG ( 873): #20 pc 0000f3f4 /system/lib/libc.so
I/DEBUG ( 873): stack:
I/DEBUG ( 873): 44742ab8 4358d000
I/DEBUG ( 873): 44742abc 4358cfff
I/DEBUG ( 873): 44742ac0 454f7000
I/DEBUG ( 873): 44742ac4 00000002
I/DEBUG ( 873): 44742ac8 44742ad0
I/DEBUG ( 873): 44742acc ad0148b0 /system/lib/libdvm.so
I/DEBUG ( 873): 44742ad0 00000002
I/DEBUG ( 873): 44742ad4 00000001
I/DEBUG ( 873): 44742ad8 00000000
I/DEBUG ( 873): 44742adc 00010ea0 [heap]
I/DEBUG ( 873): 44742ae0 00000000
I/DEBUG ( 873): 44742ae4 ad038505 /system/lib/libdvm.so
I/DEBUG ( 873): 44742ae8 00000338
I/DEBUG ( 873): 44742aec 44742ae8
I/DEBUG ( 873): 44742af0 df002777
I/DEBUG ( 873): 44742af4 e3a070ad
I/DEBUG ( 873): #00 44742af8 00000328
I/DEBUG ( 873): 44742afc ff00ed00
I/DEBUG ( 873): 44742b00 40008238
I/DEBUG ( 873): 44742b04 400081e8
I/DEBUG ( 873): 44742b08 40008238
I/DEBUG ( 873): 44742b0c 45635000
I/DEBUG ( 873): 44742b10 ad084a98
I/DEBUG ( 873): 44742b14 ad083e10
I/DEBUG ( 873): 44742b18 00000328
I/DEBUG ( 873): 44742b1c 00002710
I/DEBUG ( 873): 44742b20 00000000
I/DEBUG ( 873): 44742b24 ad016bec /system/lib/libdvm.so
I/DEBUG ( 873): #01 44742b28 00000000
I/DEBUG ( 873): 44742b2c 00000000
I/DEBUG ( 873): 44742b30 400081e8
I/DEBUG ( 873): 44742b34 ad015360 /system/lib/libdvm.so
D/CameraService( 542): Client (0x1af08) E destructor
I/ActivityManager( 567): Process com.camerapreview08 (pid 1363) has died.
I/WindowManager( 567): WIN DEATH: Window{437376d8 com.camerapreview08/com.camer
apreview08.CameraPreview08 paused=false}
D/CameraService( 542): Client (0x1af08) E disconnect from (542)
W/CameraService( 542): can't get a strong reference on mClient!
I/WindowManager( 567): WIN DEATH: Window{436addc8 SurfaceView paused=false}
D/CameraService( 542): Client X disconnect
D/CameraService( 542): Client X destructor
D/Zygote ( 541): Process 1363 terminated by signal (11)
W/InputManagerService( 567): Got RemoteException sending setActive(false) notif
ication to pid 1363 uid 10037
D/dalvikvm( 608): GC freed 9285 objects / 524096 bytes in 130ms
리눅스에 있는 디바이스 드라이버(모듈)을 통해 하드웨어에 접근하시는것 같은데.
I/DEBUG ( 873): signal 11 (SIGSEGV), fault addr ff00ed20
이부분이 널포인트라든 메모리가 제대로 세팅되지 않았다던지 오버플로 났다던지 하는 세그먼트 폴트 오류로 보시면 될듯 싶습니다.
rgb를 가져오셨는데 이 값이 계속 업데이트 되는값인가요? 초기화가 필요 하지 않을까요?
rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff); //<== 이부분이 문제
이부분은 마스크를 씌워서 해당값만 파싱하는 부분같은데 이 부분이 없다면 정확한 값이 나올수가 없을것 같네요.