1. 程式人生 > 其它 >菜鳥修煉筆記-音視訊開發基礎知識-drm簡介

菜鳥修煉筆記-音視訊開發基礎知識-drm簡介

技術標籤:音視訊linuxdrm視訊處理c#嵌入式

音視訊開發基礎知識-drm簡介

前言

最近工作上有些需求需要使用到drm中的plane,作為一名小菜鳥,在面對這個需求的時候,一堆問號又不由自主地從我的小腦瓜裡面冒了出來。drm是什麼?plane是什麼?它們有什麼用?它們有什麼關係?它們要怎麼用?所幸,萬能的網際網路存在各種知識,只需要我們花時間去尋找和學習,就能把各種各樣的問題解決。

本文將會結合網上的資料和我自己的理解,來嘗試回答以上的問題。

特別宣告

本文很大部分資訊來自其他博文,具體的博文網址見文末的參考資料。

一。DRM的基礎概念

1. DRM是什麼?

DRM是Linux目前主流的圖形顯示框架,相比FB架構,DRM更能適應當前日益更新的顯示硬體。比如FB原生不支援多層合成,不支援VSYNC,不支援DMA-BUF,不支援非同步更新,不支援fence機制等等,而這些功能DRM原生都支援。同時DRM可以統一管理GPU和Display驅動,使得軟體架構更為統一,方便管理和維護。

2. DRM的組成

DRM從模組上劃分,可以簡單分為3部分:libdrm、KMS、GEM。

其中KMS還包括:CRTC,ENCODER,CONNECTOR,PLANE,FB,VBLANK,property。
而GEM還包括:DUMB、PRIME、fence。

由於我目前需要了解的是plane屬於KMS模組,我們將著重瞭解的是KMS。

2.1 libdrm

libdrm對底層介面進行封裝,向上層提供通用的API介面,主要是對各種IOCTL介面進行封裝。應用層可以直接使用libdrm中的介面來達到影象顯示和影象處理等功能。

2.2 GEM

Graphic Execution Manager,主要負責顯示buffer的分配和釋放,也是GPU唯一用到DRM的地方。

屬於GEM模組的幾個專有名詞的意義如下:

元素說明
DUMB只支援連續實體記憶體,基於kernel中通用CMA API實現,多用於小解析度簡單場景
PRIME連續、非連續實體記憶體都支援,基於DMA-BUF機制,可以實現buffer共享,多用於大記憶體複雜場景
fencebuffer同步機制,基於核心dma_fence機制實現,用於防止顯示內容出現非同步問題

2.3 KMS

Kernel Mode Setting,所謂Mode setting,其實說白了就兩件事:更新畫面和設定顯示引數
更新畫面:顯示buffer的切換,多圖層的合成方式,以及每個圖層的顯示位置。
設定顯示引數:包括解析度、重新整理率、電源狀態(休眠喚醒)等。

屬於KMS的幾個專有名詞的意義如下:

元素說明
CRTC對顯示buffer進行掃描,併產生時序訊號的硬體模組,通常指Display Controller
ENCODER負責將CRTC輸出的timing時序轉換成外部裝置所需要的訊號的模組,如HDMI轉換器或DSI Controller
CONNECTOR連線物理顯示裝置的聯結器,如HDMI、DisplayPort、DSI匯流排,通常和Encoder驅動繫結在一起
PLANE硬體圖層,有的Display硬體支援多層合成顯示,但所有的Display Controller至少要有1個plane
FBFramebuffer,單個圖層的顯示內容,唯一一個和硬體無關的基本元素
VBLANK軟體和硬體的同步機制,RGB時序中的垂直消影區,軟體通常使用硬體VSYNC來實現
propertybuffer同步機制,基於核心dma_fence機制實現,用於防止顯示內容出現非同步問題

它們之間的關係和作用如下圖所示,值得注意的是與顯示屏連線的是connector,而plane可以存在多個也可以同時使用多個plane來進行影象顯示。
在這裡插入圖片描述(圖片來源:The DRM/KMS subsystem from a newbie’s point of view

二。KMS各個元素詳解

1. plane

1.1 定義:

Plane指的是Display Controller中用於多層合成的單個硬體圖層模組。
Plane是連線FB與CRTC的紐帶,是記憶體的搬運工。意思就是說,plane的作用是將幀快取搬到CRTC中。

1.2 注意:

(1)要與YUV/YCbCr圖形格式中的plane區分開來:

DRM中的Plane和我們常說的YUV/YCbCr圖形格式中的plane完全是兩個不同的概念。YUV圖形格式中的plane指的是影象資料在記憶體中的排列形式,一般Y通道佔一段連續的記憶體塊,UV通道佔另一段連續的記憶體塊,我們稱之為YUV-2plane
(也叫YUV 2平面),屬於軟體層面。而DRM中的Plane指的是Display
Controller中用於多層合成的單個硬體圖層模組,屬於硬體層面。二者概念上不要混淆。

(2)並不是所有的Display Controller都支援Plane,即使沒有plane_id,螢幕也能正常顯示。

1.3 未完待續

參考資料

  1. 特別推薦:DRM(Direct Rendering Manager)學習簡介