ffmpeg移植到c++时exit_program的改法

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);

 
  1. void register_exit(void (*cb)(int ret))

  2. {

  3. program_exit = cb;

  4. }

然后,在其他的地方调用,exit_program方法。

 
  1. void exit_program(int ret)

  2. {

  3. if (program_exit)

  4. program_exit(ret);

  5.  
  6. exit(ret);

  7. }

exit_program

如果是c,我们可以把对应的位置都改成返回值。因为android都是支持c++的,所以我们可以注册自己的退出方法,然后给调用层抛一个异常。实现方法:

 
  1. void on_exit(int ret) {

  2. ffmpeg_cleanup(ret);

  3.  
  4. #ifdef DEBUG

  5. logd("ffmpeg exit: %d", ret);

  6. #endif

  7.  
  8. throw ret;

  9. }

调用方式:

register_exit(on_exit);

2.cleanup的歧义:

这个函数是容易产生歧义的,根据一般的语法习惯,cleanup是清内存操作。可是ffmpeg的demo工程里面有个

term_exit();

这个函数的实现是:

 
  1. static void term_exit_sigsafe(void)

  2. {

  3. #if HAVE_TERMIOS_H

  4. if(restore_tty)

  5. tcsetattr (0, TCSANOW, &oldtty);

  6. #endif

  7. }

  8.  
  9. void term_exit(void)

  10. {

  11. av_log(NULL, AV_LOG_QUIET, "%s", "");

  12. term_exit_sigsafe();

  13. }

这是个清空输出终端的函数,个人感觉和cleanup分开比较好。

而且当我移植到android上时,是没有终端操作到。所以,全部去掉就好。

3.term相关调用,很简单,所有相关的都删掉。

猜你喜欢

转载自blog.csdn.net/u010029439/article/details/82379657
今日推荐