ffmpeg  命令引起的崩溃问题

会写程序的摄影师 2016-08-31 03:19:38
这是我的C代码,在大部分机型上没有什么问题,就是一个ffmpeg修改main方法在android上执行命令。
在乐视手机上会引起native的崩溃,下面是崩溃的log,感觉可能是跟fork进程的代码有什么问题,看有没有人愿意指点一下

JNIEXPORT jstring JNICALL Java_com_p1_mobile_android_media_VideoKit_run(
JNIEnv* env, jobject thiz, jobjectArray strArray)
{

int ret, i, pid;
int pipeFD[2];
char retBuffer[2];
char resultString[4096];

int argc = (*env)->GetArrayLength(env, strArray);

char ** argv = (char **)malloc(sizeof(char*)*argc);

for (i = 0; i < argc; i++) {
argv[i] = (*env)->GetStringUTFChars(env,
(jstring)(*env)->GetObjectArrayElement(env, strArray, i), NULL);
}

// reset to FAIL
ret = 1;
memset(retBuffer, 0, sizeof(retBuffer));
memset(resultString, 0, sizeof(resultString));

pipe(pipeFD);

pid = fork();

if (pid < 0) {
goto done;
} else if (pid == 0) {
// in child process, do command work

close(pipeFD[0]);

init();

av_log_set_callback(log_callback);

ret = run_ffempeg_command(argc, argv);


s_task_completed = 1;

sprintf(retBuffer, "%d", ret);
write(pipeFD[1], retBuffer, sizeof(retBuffer));

char * result_record = get_record_result();
if (result_record != NULL && strlen(result_record) > 0) {
sprintf(resultString, "%s", result_record);
} else {
if (ret == 0 && s_task_completed == 1) {
sprintf(resultString, "%s", "SUCCESS");
} else {
sprintf(resultString, "%s", "FAIL");
}
}

write(pipeFD[1], resultString, sizeof(resultString));

exit(0);
} else {
close(pipeFD[1]);

read(pipeFD[0], retBuffer, sizeof(retBuffer));

ret = (retBuffer[0] == '1') ? 1 : 0;
memset(resultString, 0, sizeof(resultString));
read(pipeFD[0], resultString, sizeof(resultString));
}

done:
for (i=0; i<argc; i++) {
(*env)->ReleaseStringUTFChars(env,
(jstring)(*env)->GetObjectArrayElement(env, strArray, i), argv[i]);
}

free(argv);

//close();

if (strlen(resultString) > 0) {
// workaround for UTF-8 issue
jbyteArray array = (*env)->NewByteArray(env, sizeof(resultString));
(*env)->SetByteArrayRegion(env, array, 0, sizeof(resultString), resultString);
jstring strEncode = (*env)->NewStringUTF(env, "UTF-8");
jclass cls = (*env)->FindClass(env, "java/lang/String");
jmethodID ctor = (*env)->GetMethodID(env, cls, "<init>", "([BLjava/lang/String;)V");

jstring object = (jstring) (*env)->NewObject(env, cls, ctor, array, strEncode);

return object;
} else {
return (*env)->NewStringUTF(env, "FAIL");
}
}





08-31 14:59:23.580 279-279/? D/AEE/AED: $===AEE===AEE===AEE===$
08-31 14:59:23.580 279-279/? D/AEE/AED: p 0 poll events 1 revents 0
08-31 14:59:23.580 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:23.580 279-279/? D/AEE/AED: p 1 poll events 1 revents 0
08-31 14:59:23.580 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:23.580 279-279/? D/AEE/AED: p 2 poll events 1 revents 1
08-31 14:59:23.580 279-279/? D/AEE/AED: aed_main_fork_worker: generator 0xf7017148, worker 0xffbe76d8, recv_fd 0
08-31 14:59:23.580 279-279/? D/AEE/AED: p 3 poll events 1 revents 0
08-31 14:59:23.580 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:23.580 279-279/? D/AEE/AED: p 4 poll events 1 revents 0
08-31 14:59:23.580 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:23.580 279-279/? D/AEE/AED: p 5 poll events 0 revents 0
08-31 14:59:23.580 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:23.580 8546-8546/? I/AEE/AED: handle_request(0)
08-31 14:59:23.581 8546-8546/? I/AEE/AED: check process 29910 name:1.mobile.putong
08-31 14:59:23.581 8546-8546/? I/AEE/AED: tid 29961 abort msg address is:0x83b09000, si_code is:-6 (request from 29910:10152)
08-31 14:59:23.581 8546-8546/? I/AEE/AED: BOOM: pid=29910 uid=10152 gid=10152 tid=29961
08-31 14:59:23.582 8546-8546/? I/AEE/AED: [OnPurpose Redunant in void preset_info(aed_report_record*, int, int)] pid: 29910, tid: 29961, name: RenderThread >>> com.p1.mobile.putong <<<
08-31 14:59:23.634 8546-8546/? I/AEE/AED: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-31 14:59:23.634 8546-8546/? I/AEE/AED: Build fingerprint: 'Letv/Le1s_CN/X3:5.0.2/DBXCNOP5501304201S/66:user/release-keys'
08-31 14:59:23.634 8546-8546/? I/AEE/AED: Revision: '0'
08-31 14:59:23.634 8546-8546/? I/AEE/AED: ABI: 'arm'
08-31 14:59:23.635 8546-8546/? I/AEE/AED: pid: 29910, tid: 29961, name: RenderThread >>> com.p1.mobile.putong <<<
08-31 14:59:23.635 8546-8546/? I/AEE/AED: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
08-31 14:59:23.662 8546-8546/? I/AEE/AED: Abort message: 'Failed to make current on surface 0x8c8b6e40, error=EGL_BAD_NATIVE_WINDOW'
08-31 14:59:23.662 8546-8546/? I/AEE/AED: r0 00000000 r1 00007509 r2 00000006 r3 00000000
08-31 14:59:23.662 8546-8546/? I/AEE/AED: r4 863fddc8 r5 00000006 r6 0000000b r7 0000010c
08-31 14:59:23.662 8546-8546/? I/AEE/AED: r8 675bdb6c r9 863fdd30 sl 863fdd28 fp 675bdba8
08-31 14:59:23.662 8546-8546/? I/AEE/AED: ip 00007509 sp 863fd838 lr 4002ee43 pc 4005206c cpsr 600f0010
08-31 14:59:23.662 8546-8546/? I/AEE/AED: backtrace:
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #00 pc 0003a06c /system/lib/libc.so (tgkill+12)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #01 pc 00016e3f /system/lib/libc.so (pthread_kill+66)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #02 pc 00017a0b /system/lib/libc.so (raise+10)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #03 pc 00014317 /system/lib/libc.so (__libc_android_abort+34)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #04 pc 00012a4c /system/lib/libc.so (abort+4)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #05 pc 000083c1 /system/lib/libcutils.so (__android_log_assert+88)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #06 pc 0003f07b /system/lib/libhwui.so
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #07 pc 0003d9e1 /system/lib/libhwui.so
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #08 pc 0003ec23 /system/lib/libhwui.so
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #09 pc 0003ed1b /system/lib/libhwui.so
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #10 pc 00040257 /system/lib/libhwui.so
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #11 pc 00040eab /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+66)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #12 pc 00010973 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+110)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #13 pc 000609dd /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+72)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #14 pc 000165bf /system/lib/libc.so (__pthread_start(void*)+30)
08-31 14:59:23.662 8546-8546/? I/AEE/AED: #15 pc 0001466b /system/lib/libc.so (__start_thread+6)
08-31 14:59:33.720 8546-8546/? E/AEE/AED: timed out waiting for tid=29910 to stop
08-31 14:59:36.912 8546-8546/? E/AEE/AED: timed out waiting for tid=8434 to stop
08-31 14:59:36.915 8546-8546/? I/AEE/AED: Tombstone written to: /data/tombstones/tombstone_03
08-31 14:59:36.915 8546-8546/? V/AEE/AED: dashboard_record_update() : rec->module = com.p1.mobile.putong
08-31 14:59:36.915 8546-8546/? D/AEE/AED: Duplicated exception, cnt = 56
08-31 14:59:36.915 8546-8546/? D/AEE/AED: Last exception time: 1472620828
08-31 14:59:36.915 8546-8546/? D/AEE/AED: cur time: 1472626776
08-31 14:59:36.915 8546-8546/? D/AEE/AED: Skip for Exp level'0'
08-31 14:59:36.918 279-279/? D/AEE/AED: $===AEE===AEE===AEE===$
08-31 14:59:36.918 279-279/? D/AEE/AED: p 0 poll events 1 revents 0
08-31 14:59:36.918 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:36.918 279-279/? D/AEE/AED: p 1 poll events 1 revents 0
08-31 14:59:36.918 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:36.918 279-279/? D/AEE/AED: p 2 poll events 1 revents 0
08-31 14:59:36.918 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:36.918 279-279/? D/AEE/AED: p 3 poll events 1 revents 0
08-31 14:59:36.918 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:36.918 279-279/? D/AEE/AED: p 4 poll events 1 revents 0
08-31 14:59:36.918 279-279/? D/AEE/AED: not know revents:0
08-31 14:59:36.918 279-279/? D/AEE/AED: p 5 poll events 0 revents 0
08-31 14:59:36.918 279-279/? D/AEE/AED: not know revents:0
...全文
812 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
adfldk 2016-09-01
  • 打赏
  • 举报
回复
手机不一样 第三方库支持的库不一样 会导致这种差别

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧