介绍:
我是李铁山,ffplay是基于ffmpeg的播放器,B站大名鼎鼎的ijkplayer也是基于此二次开发,因此很有学习价值。
这篇文章是我深入解析ffplay的首篇,将会从main函数,自顶向下地剖析源码。
如果您对于源码感兴趣,可以查看ffplay的github地址https://github.com/FFmpeg/FFmpeg/blob/master/fftools/ffplay.c
解读源码
我们继续讲解 ffplay 源码,接着上次的,我们看到代码如下:
if (SDL_Init (flags)) { av_log(NULL, AV_LOG_FATAL, "Could not initialize SDL - %s\n", SDL_GetError()); av_log(NULL, AV_LOG_FATAL, "(Did you set the DISPLAY variable?)\n"); exit(1); } SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE); SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
讯享网
总体上看,这段代码主要处理 SDL 时间相关的逻辑。
首先,我们看到 SDL_Init 这个函数,接受一个参数进行初始化,比如传入的参数为 SDL_INIT_VIDEO,则意思为初始化视频子系统。承接我们上次讲的 flags 参数,在audio_disable和 video_disable 都为 false 的情况下,则 flags 为 SDL_INIT_TIMER,SDL_INIT_AUDIO,SDL_INIT_VIDEO三个共同“或”运算的值,这个函数就可以初始化计时器,音频子系统,视频子系统这三个。如果您想稍微深入地理解,请参考我上次的博文ffplay深入解析——main函数解析篇(三)
如果初始化失败了,就打印相关错误信息和结束程序。但在这里我有疑问,返回错误和正确的值分别是 -1 和 0,按照源码的写法都要退出程序,是源码写错了吗,哪位高手能在评论区解释一下。
接着我们可以看到有 SDL_EventState 两个函数。这个函数是用来管理和处理事件的,第一个参数是查询事件的类型,第二个参数是标志开启/关闭等状态。这里我们不做深究,这两个函数的意思是说忽略改变窗口的行为或者用户的某种行为,应该是避免用户给程序带来的干扰。
好了,下一段代码要解析的比较多,今天先不讲了,早点休息,拜拜。
欲知后事如何,请听下回分解。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/128899.html