反初始化部分
反初始化部分比较简单 , 就是先通知avcodec进行flush数据 , 然后依次释放AVFilterGraph、AVPacket和AVFrame 。
video_thread讲解的比较粗糙 , 主要原因还是由于个人了解的知识有所欠缺 , 后续有机会会补上 。
主线程
主流程用于视频图像显示和刷新 , 实际上还主线程是一个事件驱动的 , 就是一个wait_event然后switch处理 , 然后继续for循环 。
refresh_loop_wait_event处理
该函数会从event队列中读取出event , SDL_PumpEvents、SDL_PeepEvents 。同时会调用video_refresh来进行视频刷新和显示 。此处会有大量和SDL API相关的操作 , 由于个人能力有限暂不分析 。
event的switch处理
该event的处理分为以下几类:
- SDL_KEYDOWN键盘按键事件
- SDL_VIDEOEXPOSE屏幕重画事件
- SDL_MOUSEBUTTONDOWN鼠标按下事件 , 如果启动ffplay时有exitonmousedown参数 , 会相应鼠标按下事件 , 然后退出播放;
- SDL_MOUSEMOTION鼠标移动事件 , 主要seek操作
- SDL_VIDEORESIZE视频大小变化事件 , 比如视频中间会出现大小变化 , 会触发该事件
- SDL_QUIT、FF_QUIT_EVENT退出事件 , 如read_thread中出现各种异常会发送该消息
- FF_ALLOC_EVENT事件比较特殊 , 如代码中的注释“ifthe queue is aborted, we have to pop the pending ALLOC event or wait for theallocation to complete” , 该消息是video_thread中的发出的消息
推荐阅读
- UNIX 平台 C 程序开发心得
- WebRTC记录音视频流
- HarmonyOS之手机应用开发体验
- 恶意软件开发者公布密钥并宣布退出江湖
- Android开发精通Framework是真的可以为所欲为
- MyBatis自动生成工具,开发编码好帮手
- HarmonyOS App开发之组件布局类
- 如何在开发中规避硬编码
- 家居装修类的在线接单APP定制开发案例赏析
- 开发者的瑞士军刀「GitHub 热点速览 v.22.04」