SDL开源图形图像库的简介
SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,它被广泛的用于游戏、演示软件、模拟器、MPEG播放器等应用软件,SDL可以设置8bpp或更高的任意色彩深度的视频模式,也可以直接写入线性的图像帧缓冲framebuffer。SDL支持各种事件如键盘输入、鼠标输入、用户推出等。除此之外,SDL还提供完整的CD音频控制API,以及线程、定时器等工具函数。
基于SDL的视频显示
本课题选用的SDL版本为1.2.13。
基于SDL显示模块主要分如下几步:
● SDL函数库的初始化,主要是设置SDL支持视频显示。
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER);
● 设置视频显示模式,SDL会尝试使用硬件加速,如果硬件加速失败,SDL会自动调整尽量使用与设置最为接近的模式。
screen = SDL_SetVideoMode (WIDTH, HEIGHT, 0, SDL_HWSURFACE
| SDL_DOUBLEBUF
| SDL_ANYFORMAT
| SDL_RESIZABLE);
● 设置窗口显示标题
SDL_WM_SetCaption ("USB Camera By Breeze", NULL);
● 创建YUV覆盖。多媒体领域中,尤其涉及到MPEG的播放时,通常使用YUV的颜色空间,如果MPEG的图片要在屏幕上显示则需要YUV到RGB的转化。某些显示芯片能够支持YUV到RGB的转换,免去软件转换的性能损失。这样,只要将YUV信息写到缓冲区,硬件就能自动完成YUV到RGB的转换并将图像显示到屏幕上。
overlay = SDL_CreateYUVOverlay(XDIM, YDIM, SDL_YV12_OVERLAY, screen);
● 将视频信息传送到显示设备上。SDL_LockSurface(screen);
SDL_LockYUVOverlay(overlay);
pict.data[0] = overlay->pixels[0];
pict.data[1] = overlay->pixels[2];
pict.data[2] = overlay->pixels[1];
pict.linesize[0] = overlay->pitches[0];
pict.linesize[1] = overlay->pitches[2];
pict.linesize[2] = overlay->pitches[1];