由于在参与开发 thinkvd video converter 遇到释放SDL内存的问题,应用中需要在预览、全屏、双屏及CLIP之间来回切换,再次看了SDL相关的源代码,把SDL实现的过程简单说一下。
SDL开发包中自带的样例:testsprite2.c中就是一个实现多屏显示的例子。
简化它来说大概这几步:
1。SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) //初始化
2. windows[i]=SDL_CreateWindow(wm_title, window_x, window_y, width, height, window_flags);
3. SDL_CreateRenderer(windows[i], -1, SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTDISCARD) < 0)
4. SDL_SelectRenderer(windows[i]); //选择哪个窗口在绑定数据
5. texture[i] = SDL_CreateTexture(desired_format, SDL_TEXTUREACCESS_STREAMING, width, height);
6. COPY(texture[i]) //要显示的数据.
7. while(1){ SDL_DisplayYUVOverlay(overlay, &overlayrect); }
8. SDL_Quit.
也许有人有疑问,它怎么没有显示要用的SDL_Surface,事实上个人参与thinkvd 视频开发时是这样用的,这些SDL流程代码完全是从SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags)中COPY出来的(除了COPY data之后的),也就是说SDL_SetVideoMode把SDL实现应用的环境造就好了只需要COPY数据到texture显示出来即可,而testsprite2实现与它类似。
在overlay方式下,SDL的simple到window, overlay.也就是用户(

这篇博客介绍了在thinkvd video converter开发中遇到的SDL内存管理问题,以及如何使用SDL进行双屏显示。主要步骤包括初始化、创建窗口、创建渲染器、创建纹理、复制数据、显示及退出。SDL_Overlay和SDL_Surface用于数据存储,SDL_Window负责消息控制,SDL_Renderer处理显示。文章探讨了这些组件之间的关系,并指出SDL在窗口和渲染器分离方面的局限性。

3727

被折叠的 条评论
为什么被折叠?



