开发环境:vs2008 + xp或mingw + gcc
这个问题在开发视频软件thinkvd的对比效果前也一直困惑着我,在网上找了些资料,也没有结果, 现在把实现的过程简单记录下来,供大家参考。当时是以为sdl代码比较复杂,所有在这以前从来没有去看过SDL的源代码,尽管我下了它的1.26, 1.3源代码。
先说要实现的目标:在QT的一个window中放两个视频播放画面,一个是原始视频,一个是效果视频。如图:
思路:
1。跳过由sdl直接创建弹出窗口,那么它的窗口应该是QT指定的窗口。
2。给SDL传递窗口Handle,由SDL_getenv("SDL_WINDOWID")来实现
3。在SDL调用系统函数CreateWindow前把它Filter下来,否则会生成一个独立的窗口。
4。更改当前窗口的消息循环.
印象中当时是参考1.26版本源代码来实现的,由于1.26与1.3相差比较大,因此走了一些弯路。
当时花了很多时间在处理消息循环上, 最终才形成下面的代码。
下面是SDL中需要更改的地方:
sdl1.3/src/video/win32/SDL_win32window.h:
extern void WIN_DestroyWindow(_THIS, SDL_Window * window);
extern SDL_bool WIN_GetWindowWMInfo(_THIS, SDL_Window * window,
struct SDL_SysWMinfo *info);
&#