https://blog.csdn.net/u010029439/article/details/79882521
ffmpeg移植到android,异常退出机制的移植
2018年04月10日 16:38:20 阅读数:38
1.原生的ffmpeg退出机制与基础的退出处理方法:
ffmpeg的退出函数是:ffmpeg_cleanup。
ffmpeg首先会在main入口注册这个回调。
register_exit(ffmpeg_cleanup);
-
void register_exit(void (*cb)(int ret))
-
{
-
program_exit = cb;
-
}
然后,在其他的地方调用,exit_program方法。
-
void exit_program(int ret)
-
{
-
if (program_exit)
-
program_exit(ret);
-
exit(ret);
-
}
exit_program
如果是c,我们可以把对应的位置都改成返回值。因为android都是支持c++的,所以我们可以注册自己的退出方法,然后给调用层抛一个异常。实现方法:
-
void on_exit(int ret) {
-
ffmpeg_cleanup(ret);
-
#ifdef DEBUG
-
logd("ffmpeg exit: %d", ret);
-
#endif
-
throw ret;
-
}
调用方式:
register_exit(on_exit);
2.cleanup的歧义:
这个函数是容易产生歧义的,根据一般的语法习惯,cleanup是清内存操作。可是ffmpeg的demo工程里面有个
term_exit();
这个函数的实现是:
-
static void term_exit_sigsafe(void)
-
{
-
#if HAVE_TERMIOS_H
-
if(restore_tty)
-
tcsetattr (0, TCSANOW, &oldtty);
-
#endif
-
}
-
void term_exit(void)
-
{
-
av_log(NULL, AV_LOG_QUIET, "%s", "");
-
term_exit_sigsafe();
-
}
这是个清空输出终端的函数,个人感觉和cleanup分开比较好。
而且当我移植到android上时,是没有终端操作到。所以,全部去掉就好。
3.term相关调用,很简单,所有相关的都删掉。