• 视频播放器—纹理-渲染-窗口


    简介

    • SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成;其封装了复杂的视音频底层交互工作,简化了视音频处理的难度;多用于开发游戏、模拟器、媒体播放器等多媒体应用领域;

    OpenGL(Open Graphics Library - 开放图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API),这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。

    大致渲染流程

    初始化阶段:

    • 创建一个可与OpenGL一起使用的窗口

    • 基于该窗口,创建一个2D渲染器

    • 为渲染器创建纹理

    渲染显示阶段:

    • 接收原始图像信息,保存图像信息的描述至纹理中

    • 将纹理的指定区域复制到渲染器中,进行渲染操作

    • 将渲染出来的图像显示在屏幕上

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

    相关API

    • SDL_CreateWindow:在特定位置创建一个指定大小、名字和种类的窗口

    1. SDL_Window *SDL_CreateWindow(const char *title, int x, int y,
    2. int w, int h, Uint32 flags);
    • title:窗口的名字

    • x,y:位置

    • w,h:宽高

    • flags:描述窗口的种类,描述值为SDL_WindowFlags;如SDL_WINDOW_OPENGL,表示可用于OpenGL的窗口。

    • SDL_CreateRenderer:为窗口创建一个2D渲染器

    SDL_Renderer *SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags);
    

    indow:用于显示渲染的窗口

    index:要初始化的渲染驱动程序索引,-1则表示选取第一个支持该请求标志的驱动程序

    flags:渲染器标识,描述值为SDL_RendererFlags;如SDL_RENDERER_ACCELERATED,表示渲染器使用硬件加速

    SDL_CreateTexture:为渲染器创建一个纹理

    1. SDL_Texture * SDL_CreateTexture(SDL_Renderer *renderer, Uint32 format,
    2. int access, int w, int h);

    renderer:用于渲染纹理的渲染器

    format:纹理数据的格式

    access:纹理访问模式,描述值为SDL_TextureAccess;如SDL_TEXTUREACCESS_STREAMING,表示纹理更改频繁,可锁定

    w,h:纹理数据的宽高(以像素为单位)

    SDL_UpdateTexture:用新的像素数据更新指定纹理区域

    1. int SDL_UpdateTexture(SDL_Texture *texture, const SDL_Rect *rect,
    2. const void *pixels, int pitch);
    • texture:待更新的纹理

    • rect:表示要更新纹理的区域,NULL表示更新整个纹理区域

    • pixels:像素数据

    • pitch:一行像素数据中的字节数,包括行之间的填充

    SDL_RenderCopy:将纹理的指定区域复制到渲染器

    1. int SDL_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture,
    2. const SDL_Rect *srcrect, const SDL_Rect *dstrect);
    • renderer:目的渲染器

    • texture:源纹理

    • srcrect:纹理指定区域,NULL表示整个纹理区域

    • dstrect:渲染结果的目标大小,NULL为整个窗口大小

    SDL_RenderPresent:将渲染器的渲染结果显示在屏幕上

    void SDL_RenderPresent(SDL_Renderer * renderer);
    

    本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 相关阅读:
    APP中RN页面渲染流程-ReactNative源码分析
    Golang Channel 详细原理和使用技巧
    VirtualLab专题实验教程-3.二维分束超表面光栅
    Java+SSM+JSP实现高校学生健康档案管理系统
    Grab 基于 Apache Hudi 实现近乎实时的数据分析
    Kubernetes(k8s)进阶
    小熊听书项目的测试
    热门Java开发工具IDEA入门指南——IntelliJ IDEA概述(中)
    保姆级教程:个人深度学习工作站配置指南
    基于CNTK/C#实现逻辑回归【附源码】
  • 原文地址:https://blog.csdn.net/m0_60259116/article/details/126542237