SDL实现overlay方式双屏显示的应用流程分析(thinkvd开发日志)

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

由于在参与开发 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.也就是用户(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值