基于FFmpeg + SDL 的视频播放器的在制作 - SDL显示

本文介绍SDL库的基础知识,包括其作用、特点及结构,并详细讲解如何在VC++环境下搭建SDL开发环境。此外,还提供了视频显示的具体实现方法,包括使用的函数、数据结构以及示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

  • 视频显示知识
  • SDL简介
  • VC下SDL开发环境的搭建
  • 示例程序运行
  • SDL视频显示的函数
  • SDL视频显示的数据结构
  • 进阶 - 示例程序运行
  • 进阶 - SDL中多线程和事件

视频显示知识

  • 视频显示的流程,就是将像素数据“画”在屏幕上的过程
  • 例如显示YUV,就是将YUV“画”在系统的窗口中

SDL简介

  • 作用:SDL(Simple DirecMedia Layer)库的作用说白了就是封装了复杂的视音频底层交互工作,简化了视音频处理的难度;
  • 特点:跨平台;开源

结构

  • SDL结构如下所示。可以看出它实际上还是调用了DirecX等底层的API完成了和硬件的交互

VC下SDL开发环境的搭建

  • 新建控制台工程
  1. 打开VC++
  2. 文件->新建->项目->Win32控制台应用程序
  • 拷贝SDL开发文件
  1. 头文件(*.h)拷贝至项目文件夹的include子文件夹下
  2. 导入库文件(*.lib)拷贝至项目文件夹的lib子文件夹下
  3. 动态库文件(*.dll)拷贝至项目文件夹下

配置开发文件

  • 打开属性面板:解决方案资源管理器->右键单击项目->属性
  • 头文件配置:配置属性 ->C/C++->常规->附加包含目录,输入“include”(刚才拷贝文件的目录)
  • 导入库配置:配置属性->链接器->常规->附加库目录,输入“lib”(刚才拷贝文件的目录);配置属性->链接器->输入->附加依赖项,输入“SDL2.lib; SDL2main.lib”(导入库的文件名)
  • 动态库不用配置

测试

  • 创建源代码:在工程中创建一个包含main()函数的C/C++文件(如果已经有了可以跳过这一步),后续在该文件中编写源代码
  • 包含头文件

        如果是C语言中使用SDL,则直接使用下面的代码

        #include "SDL2/SDL.h"

        如果是C++语言中使用SDL,则使用下面代码

        extern "C"

        {

        #include "SDL2/SDL.h"

        }

  • main()中调用一个SDL的接口函数

        例如下面代码初始化了SDL

        int main()

        {

        if (SDL_Init(SLD_INIT_SDL))

        {

             printf("could not initialize SDL - %s\n", SDL_GetError());

        }

        else

        {

            printf("success init SDL");

        }

        return 0;

        }

        如果运行无误,则代表SDL已经配置完成

SDL视频显示的函数

  • SDL视频显示的流程图如下所示

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视频显示的数据结构

  • SDL视频显示的数据结构如下所示

SDL数据结构简介

  • SDL_Window:代表了一个“窗口”
  • SDL_Renderer:代表了一个“渲染器”
  • SDL_Texture:代表了一个:“纹理”
  • SDL_Rect:一个简单的矩形结构

进阶 - SDL中事件和多线程

  • SDL多线程
  1. 函数:SDL_CreateThread():创建一个线程
  2. 数据结构:SDL_Thread:线程句柄
  • SDL事件
  1. 函数:SDL_WaitEvent()等待一个事件;SDL_PushEvent()发送一个事件
  2. 数据结构:SDL_Event:代表一个事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值