SDL播放视频流程
初始化:
SDL_Init(): 初始化SDL。
SDL_CreateWindow(): 创建窗口(Window)。
SDL_CreateRenderer(): 基于窗口创建渲染器(Render)。
SDL_CreateTexture(): 创建纹理(Texture)。
循环渲染数据:
SDL_UpdateTexture(): 设置纹理的数据。
SDL_RenderCopy(): 纹理复制给渲染器。
SDL_RenderPresent(): 显示。
函数调用流程图:
int SDLCALL SDL_Init(Uint32 flags) //初始化SDL子系统
flags:
SDL_INIT_TIMER:定时器
SDL_INIT_AUDIO:音频
SDL_INIT_VIDEO:视频
SDL_INIT_JOYSTICK:摇杆
SDL_INIT_HAPTIC:触摸屏
SDL_INIT_GAMECONTROLLER:游戏控制器
SDL_INIT_EVENTS:事件
SDL_INIT_NOPARACHUTE:不捕获信号
SDL_INIT_EVERYTHING:包含上述所有选项
SDL_CreateWindow(Uint32 flags)
创建播放窗口,返回创建完成的窗口的ID,如果创建失败则返回0
SDL_Window * SDLCALL SDL_CreateWindow(const char *title,/*窗口标题*/
int x, /*窗口位置x坐标*/
int y, /*窗口位置y坐标*/
int w, /*窗口的宽度*/
int h, /*窗口的高度*/
Uint32 flags);
flags :支持下列标识,包括了窗口的是否最大化、最小化,全屏等
SDL_WINDOW_FULLSCREEN //全屏
SDL_WINDOW_HIDDEN //隐藏
SDL_WINDOW_BORDERLESS //无边界
SDL_WINDOW_RESIZABLE //可调整大小
SDL_WINDOW_MAXIMIZED//最大化
SDL_WINDOW_MINIMIZED //最小化
SDL_WINDOW_OPENGL
SDL_WINDOW_INPUT_GRABBED
SDL_WINDOW_ALLOW_HIGHDPI
SDL_CreateRenderer()
创建渲染器,返回创建完成的渲染器的ID,如果创建失败则返回NULL。
SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, /*渲染的目标窗口*/
int index, /*渲染设备的索引,-1 则初始化默认的渲染设备。*/
Uint32 flags)
flags :
SDL_RENDERER_SOFTWARE :使用软件渲染
SDL_RENDERER_ACCELERATED :使用硬件加速
SDL_RENDERER_PRESENTVSYNC:和显示器的刷新率同步
SDL_RENDERER_TARGETTEXTURE
SDL_CreateTexture
创建纹理,创建成功则返回纹理的ID,失败返回0。
SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer,/*目标渲染器*/
Uint32 format, /*纹理的格式:SDL_PIXELFORMAT_IYUV、SDL_PIXELFORMAT_RGB444*/
int access, //
int w, /*纹理的宽,一般和渲染器的宽、高一样*/
int h ); /*纹理的高*/
access取值
SDL_TEXTUREACCESS_STATIC :变化极少
SDL_TEXTUREACCESS_STREAMING :变化频繁
SDL_TEXTUREACCESS_TARGET
关于纹理格式format的取值可查看: http://wiki.libsdl.org/SDL_PixelFormatEnum
SDL_UpdateTexture()
更新纹理,成功的话返回0,失败的话返回-1。
int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, /*目标纹理*/
const SDL_Rect * rect, /*更新像素的矩形区域,NULL表示整个区域*/
const void *pixels, /*像素数据*/
int pitch); /*一行像素数据的字节数*/
SDL_RenderCopy()
将纹理复制给渲染器。
int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer,/*目标渲染器*/
SDL_Texture * texture, /*输入纹理*/
const SDL_Rect * srcrect,/*选择输入纹理的矩形区域作为输入。设置为NULL的时候整个纹理作为输入*/
const SDL_Rect * dstrect);/*选择渲染器的矩形区域作为输出。设置为NULL的时候整个渲染器作为输出*/
void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer);
显示渲染器数据
可以通过SDL_Rect创建矩形框,作为播放视频的窗口,合理设置大小,将设置的SDL_Rect作为SDL_RenderCopy的输出窗口实现一个SDL_Window 窗口播放好几个视频
SDL_Rect sdlRect; //设置播放窗口的起始位置和大小
sdlRect.x
sdlRect.h
sdlRect.w
sdlRect.h