windwos下SDL2+QT+FFMPEG的简易播放器
主要验证SDL2嵌入QT控件播放的功能!完整工程下载。
嵌入QT控件的关键代码:
SDL_Window *screen = SDL_CreateWindowFrom((void*)ui->frame->winId());
建议SDL2的初始化和渲染放在主线程,子线程只负责解码
防止鼠标点击其他地方导致播放的图像闪烁,需要重载void paintEvent(QPaintEvent *e);
void MainWindow::paintEvent(QPaintEvent *e)
{
ui->frame->setUpdatesEnabled(false);
}
防止全屏后黑屏需要添加:(黑屏是因为winId是变化的导致的)
SDL_ShowWindow(screen);
播放速度使用SDL2自定义事件+SDL2线程控制。
//Refresh Event
#define SFM_REFRESH_EVENT (SDL_USEREVENT + 1)
#define SFM_BREAK_EVENT (SDL_USEREVENT + 2)
int thread_exit=0;
int thread_pause=0;
int sfp_refresh_thread(void *opaque){
thread_exit=0;
thread_pause=0;
while (!thread_exit) {
if(!thread_pause){
SDL_Event event;
event.type = SFM_REFRESH_EVENT;
SDL_PushEvent(&event);
}
SDL_Delay(40);
}
thread_exit=0;
thread_pause=0;
//Break
SDL_Event event;
event.type = SFM_BREAK_EVENT;
SDL_PushEvent(&event);
return 0;
}