无论播放视频是在主线程做,还是子线程做都会有这个问题。
解决这个问题的办法在于将每播放一帧后Sleep(40)的机制,
(假设25f/s),改为通过SDL的event机制,每隔40ms,
push一个event从而通知线程绘图。
下面是伪代码:
#define SDL_START_VIDEO_DECANDSHOW (SDL_USEREVENT+1)
sdl_thread()
{
SDL_Event event;
event.type = SDL_START_VIDEO_DECANDSHOW;
SDL_PushEvent(&event);
}
decoderthread()
{
SDL_Event sdlevent;
while(1)
{
SDL_WaitEvent(&sdlevent);
//check event type
//decode and show
}
}
备注:关闭播放窗口会触发SDL_QUIT event。