100m网站注册,电脑如何重新安装wordpress,商城网站源码免费,优化关键词技巧介绍 在本系列#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器#xff0c;在这个项目#xff0c;您可以学到音视频解封装#xff0c;解码#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话#xff0c;请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本… 介绍 在本系列我打算花大篇幅讲解我的 gitee 项目音视频播放器在这个项目您可以学到音视频解封装解码SDL渲染相关的知识。您对源代码感兴趣的话请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析二十 解析 我们继续解析 videooutput 的函数
RefreshLoopWaitEvent
#define REFRESH_RATE 0.01
void VideoOutput::RefreshLoopWaitEvent(SDL_Event* event){double remaining_time 0.0;SDL_PumpEvents();while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)){if(remaining_time 0.0){this_thread::sleep_for(chrono::milliseconds(int64_t(remaining_time * 1000.0)));}remaining_time REFRESH_RATE;videoRefresh(remaining_time);SDL_PumpEvents();}
}
SDL_PumpEvents用于更新事件队列并处理事件
SDL_PeepEvents用于从事件队列中获取特定类型的事件
如果 remaining_time 大于 0则等待一会
接着给 remaining_time 赋值 0.01
接着调用 videoRefresh更新 SDL MainLoop
int VideoOutput::MainLoop(){SDL_Event event;while (true){RefreshLoopWaitEvent(event);switch (event.type){case SDL_KEYDOWN:if(event.key.keysym.sym SDLK_ESCAPE){return 0;}break;case SDL_QUIT:return 0;default:break;}}return 0;
}
主循环函数
检测 SDL_Event 的类型
SDL_KEYDOWN检测到按键的按压如果是 escape则退出
SDL_QUIT如果类型为 QUIT停止则退出 好了videooutput 这个类解析完了我们最后可以看一下main 函数是如何运行的把总体运行起来。
欲知后事如何请听下回分解。