SDL2音視頻渲染入門

SDL, 「Simple DirectMedia Layer」,它是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。其主要用於遊戲開發中的多媒體處理,如視頻渲染,音頻播放,鼠標/鍵盤控制等操做。它對外接供了一套統一的接口,但在內部,它會根據不一樣平臺調用不一樣的底層 API庫。如在 Linux 系統下,它會使用 opengl 作渲染,而在 Window 下它會調用 D3D API進行渲染。php

SDL2安裝

SDL官網下載:www.libsdl.org/download-2.…bash

下載Source Code(之後去看源代碼也比較方便),而後進行編譯安裝:函數

configure --prefix=/usr/local
複製代碼
sudo make && make install
複製代碼

在/usr/local下就能夠找到編譯後的SDL2相關文件ui

SDL2使用

運行環境Windows + CLion,代碼通用,不一樣平臺只須要更改依賴的SDL庫便可spa

CMakeList

cmake_minimum_required(VERSION 3.12)
project(SimplePlayer C)

set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)

# 這裏我使用的是本身機器上安裝的SDL庫,根據本身的安裝路徑替換
set(INC_DIR_SDL C:/cygwin64/usr/local/include/SDL2/)
set(LINK_DIR_SDL C:/cygwin64/usr/local/lib/)

include_directories(${INC_DIR_SDL})
link_directories(${LINK_DIR_SDL})

add_executable(SimplePlayer ${SOURCE_FILES})
target_link_libraries(
        SimplePlayer
        SDL2
        SDL2main)
複製代碼

SDL的基本流程

一、初始化SDL開放源代碼

二、建立窗口3d

三、建立渲染器code

四、清空緩衝區cdn

五、繪製要顯示的內容視頻

六、最終將緩衝區內容渲染到window窗口上

七、銷燬渲染器

八、銷燬窗口

九、退出SDL

下面是一個最簡單的SDL程序,會顯示一個640*480的窗口,窗口內部爲紅色,顯示3秒後消失

#include <SDL2/SDL.h>

int WinMain() {
    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;

    SDL_Init(SDL_INIT_VIDEO);// 初始化函數,能夠肯定但願激活的子系統

    window = SDL_CreateWindow("My First Window",
                              SDL_WINDOWPOS_UNDEFINED,
                              SDL_WINDOWPOS_UNDEFINED,
                              640,
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 建立窗口

    if (!window) {
        return -1;
    }
    renderer = SDL_CreateRenderer(window, -1, 0);//基於窗口建立渲染器
    if (!renderer) {
        return -1;
    }
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //設置渲染器顏色 r、g、b、a
    SDL_RenderClear(renderer);//用指定的顏色清空緩衝區
    SDL_RenderPresent(renderer); //將緩衝區中的內容輸出到目標窗口上。
    SDL_Delay(3000); // 延時3秒
    SDL_DestroyRenderer(renderer); //銷燬渲染器
    SDL_DestroyWindow(window); //銷燬窗口
    SDL_Quit(); //退出SDL
    return 0;
}
複製代碼

SDL API簡介

  1. SDL_Init 初始化

    int SDL_Init(Uint32 flags) 複製代碼
    flages:
    SDL_INIT_TIMER 定時器子系統
    SDL_INIT_AUDIO 音頻子系統
    SDL_INIT_VIDEO 視頻子系統,同時會初始化事件子系統
    SDL_INIT_EVENTS 事件子系統
    SDL_INIT_EVERYTHING 初始化全部子系統=
    複製代碼
  2. SDL_CreateWindow 建立窗口

    SDL_Window* SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags);
    複製代碼
    title:窗口標題
    x,y,w,h:窗口座標
    flags:
     ::SDL_WINDOW_FULLSCREEN,//全屏         ::SDL_WINDOW_OPENGL,//使用OpenGL上下文
     ::SDL_WINDOW_HIDDEN, //窗口不可見       ::SDL_WINDOW_BORDERLESS, //無邊框
     ::SDL_WINDOW_RESIZABLE,//窗口大小可變    ::SDL_WINDOW_MAXIMIZED, //窗口最大化
     ::SDL_WINDOW_MINIMIZED,//窗口最小化      ::SDL_WINDOW_INPUT_GRABBED,//輸入捕獲
    複製代碼
  3. SDL_CreateRenderer 建立渲染器

    SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags) 複製代碼
    window: 指明在哪一個窗口裏進行渲染
    index: 指定渲染驅動的索引號。通常指定爲 -1.
    flags:
     SDL_RENDERER_SOFTWARE //The renderer is a software fallback 軟件備份
     SDL_RENDERER_ACCELERATED //The renderer uses hardware acceleration 硬件加速
     SDL_RENDERER_PRESENTVSYNC //Present is synchronized with the refresh rate 刷新率同步
     SDL_RENDERER_TARGETTEXTURE //The renderer supports rendering to texture 支持渲染紋理
    複製代碼
相關文章
相關標籤/搜索