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_HIGHDPISDL_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_TARGETTEXTURESDL_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