SDL播放视频及相关API

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值