打开VC++
文件->新建->项目->Win32控制台应用程序
2).拷贝SDL开发文件
头文件(*.h)拷贝至项目文件夹的include子文件夹下
导入库文件(*.lib)拷贝至项目文件夹的lib子文件夹下
动态库文件(*.dll)拷贝至项目文件夹下
3).配置开发文件
打开属性面板
解决方案资源管理器->右键单击项目->属性
4).头文件配置
配置属性->C/C++->常规->附加包含目录,输入“include”(刚才拷贝文件的目录)
5).导入库配置
配置属性->链接器->常规->附加库目录,输入“lib” (刚才拷贝文件的目录)
配置属性->链接器->输入->附加依赖项,输入“SDL2.lib; SDL2main.lib”(导入库的文件名)
6).动态库不用配置
7).是否配置成功,调用sdl的初始化函数,查看其返回值即可确定:
创建源代码文件
在工程中创建一个包含main()函数的C/C++文件(如果已经有了可以跳过这一步),后续步骤在该文件中编写源代码 。
包含头文件
如果是C语言中使用SDL,则直接使用下面代码
#include "SDL2/SDL.h"如果是C++语言中使用SDL,则使用下面代码
extern "C" { #include "SDL2/SDL.h" }main()中调用一个SDL的接口函数
例如下面代码初始化了SDL
int main(int argc, char* argv[]){ if(SDL_Init(SDL_INIT_VIDEO)) { printf( "Could not initialize SDL - %sn", SDL_GetError()); } else{ printf("Success init SDL"); } return 0; }如果运行无误,则代表SDL已经配置完成 。
3.SDL视频显示的流程图见图5:

文章插图
其中特别要注意的是创建纹理数据时要传入渲染器,原因是,
纹理数据依赖于渲染器,只有通过渲染器创建才能得到该渲染器合法的纹理数据((数据格式)符合该渲染器的要求),
填充了像素数据且符合要求的纹理数据才可以拷贝给渲染器,并且渲染器才能正确显示出来 。
1).SDL视频显示函数简介
SDL_Init():初始化SDL系统
SDL_CreateWindow():创建窗口SDL_Window
SDL_CreateRenderer():创建渲染器SDL_Renderer
SDL_CreateTexture():创建纹理SDL_Texture
SDL_UpdateTexture():设置纹理的数据
SDL_RenderCopy():将纹理的数据拷贝给渲染器
SDL_RenderPresent():显示
SDL_Delay():工具函数,用于延时 。
SDL_Quit():退出SDL系统
其中SDL_Delay 延时函数,控制显示的速度,即控制帧率 。通常每秒25帧,所以通常延时也就是40ms
2).SDL视频显示的数据结构
I、SDL视频显示的数据结构如图6所示:

文章插图
II、SDL数据结构简介
SDL_Window
代表了一个“窗口”
SDL_Renderer
代表了一个“渲染器”
SDL_Texture
代表了一个“纹理”
SDL_Rect
一个简单的矩形结构
具体来说,
SDL_Window 窗口,类似弹出的窗口
SDL_Renderer 渲染器,把纹理数据画(渲染)到window上
一个window上不仅仅只有一副画面,类似多组监控画面,即一个window可对应多个yuv数据
SDL_Rect,正方形结构,存了矩形的坐标,长宽,以便确定纹理数据画在哪个位置,确定位置用,比如画在左上角就用这个来确定 。被渲染器调用
SDL_Rect中的x y值是左上角为圆点开始的坐标值,调整x y值以及w h值,就可以实现在窗口的指定位置显示,没有画面的地方为黑框 。
当x y等于0,w h等于窗口的宽高时即为全屏显示,此时调整宽高大小,只需调整窗口大小即可 。
4.进阶-SDL中事件和多线程
1).SDL多线程
函数
SDL_CreateThread():创建一个线程
数据结构
SDL_Thread:线程的句柄
SDL事件
函数
SDL_WaitEvent()等待一个事件
SDL_PushEvent()发送一个事件
数据结构
SDL_Event:代表一个事件
SDL中事件和多线程,可用于解决上个程序播放过程中鼠标不能动的问题,
使用事件,等待事件中,就会响应鼠标键盘等事件,就不会卡在那了
将延时操作放到一个子线程中,用事件通知主线程,这样主线程就不用延时了,就可以及时响应事件了
SDL_WINDOWENVENT sdl系统自带的事件,当拉伸窗口的时候会触发
SDL_QUIT 也是SDL自带的事件,当点击窗口的×时触发
三、FFmpeg+SDL视频播放器
1.FFmpeg+SDL整合之后实现:视频文件->YUV->屏幕
推荐阅读
- 忽必烈是怎么当上大汗的,忽必烈之前的蒙古大汗
- 汉武帝和汉景帝汉文帝之间的关系,汉文帝与汉景帝统治时期被称作什么
- 刘备离开袁绍之后投奔了谁,袁绍和刘备是什么关系
- 唐朝安史之乱后形成了怎样的局面,唐朝为什么会爆发安史之乱
- 元神忍冬之果,原神忍冬之果突破材料详解
- 台湾博物馆三大镇馆之宝是什么?
- 明宪宗之后,明宪宗知乎
- |和田玉市场,吃药是玩玉之常事,焉知非福?
- 曹操和其子谁和谁称之为三曹,三国时代,出现了一位的人物,他就是曹操
- 蜀汉之后是什么朝代,三国时期蜀汉
