2021-05-12 14:32:11
LCD介面和RGB介紹
1. 介紹
Video的顯示離不開LCD, 所以這裡簡單介紹一下LCD的介面和RGB
LCD的全稱是Liquid Crystal Display的簡稱, 即液晶顯示器; 目前已經取代CRT, 成為TV、PC等的標配
2. 介面
首先我們以傳遞的信號型別來區分主要有兩大類:
- 模擬信號: - VGA: Video Graphics Array - 數位信號 - TTL: Transistor Transisor Logic - LVDS: Low Voltage Differential Signaling - TMDS: Transition Minimized Differential Signal
連線方式範例如下圖所示
2.1 TTL
LCD TTL介面中一般包含
資料信號: 指RGB資料信號, 如R0~R5、G0~G5、B0~B5
時鐘信號: 畫素時鐘信號(DCLK), 是傳輸資料和對資料信號進行讀取的基準
控制信號: 包括資料有效信號(DE), 行同步信號(HSYNC)、場同步信號(VSYNC)
2.2 LVDS
LVDS是一種低壓差分信號技術掊, 它是美國國家半導體公司為了克服以TTL電平方式傳輸寬頻高位元速率資料時功耗大、電磁干擾大等缺點而研製的一種數位影片信號傳輸方式;傳遞的信號與TTL型別, 不累敘
2.3 TMDS
TMDS, 即過渡調變差分信號, 也被稱為最小化傳輸差分信號
是一種微分信號機制, 執行先進的編碼演算法, 把8bit資料(R、G、B中每路基色信號)通過最小轉換編碼為10bit資料
這10bit資料包含行場同步信號資訊、時鐘資訊、資料DE、糾錯等, 經過DC平衡後, 採用差分信號傳輸資料
它和LVDS、TTL相比有較好的電磁相容效能, 可以用低成本的專用電纜實現長距離、高品質的資料信號傳輸
3. RGB
從上面的介面可以發現, 從LCD傳遞的是RGB資料
這也是本人比較關注的東西
RGB一般是指RGB色彩模型(RGB color model), 是工業界的一種顏色標準
通過對紅(Red)、綠(Green)、藍(Blue)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的
RGB即是代表紅、綠、藍三個通道的顏色, 這個標準幾乎包括了人類視力所能感知的所有顏色
通常一個顏色通道由8bit表示, 即每個顏色通道值得範圍是0~255, 通常稱RGB888/RGB24
三個顏色通道總共能組合出約1678(256×256×256)萬種色彩, 通常也被簡稱為1600萬色或千萬色, 也稱為24位元色(2^24)
在實際的使用中, 除了RGB24, 還有RGB555,、RGB565、RGB32(另8bit用作alpha通道或者不用)
顏色名稱 |
Red |
Green |
Blue |
黑色 | 0 | 0 | 0 |
藍色 | 0 | 0 | 255 |
綠色 | 0 | 255 | 0 |
青色 | 0 | 255 | 255 |
紅色 | 255 | 0 | 0 |
洋紅色 | 255 | 0 | 255 |
黃色 | 255 | 255 | 0 |
白色 | 255 | 255 | 255 |
4. YUV
顏色模型除了RGB, 還有CIE, YUV
其中YUV又包括YUV(PAL), Y'CbCr(是YUV壓縮和偏移的版本)
通常YUV(PAL)用於彩色電視機, Y'CbCr在計算機系統中應用非常廣泛, 我們一般說的YUV指的是Y'CbCr
歷史上, YUV被用於電視系統PAL (NTSC裡面使用YIQ, 是YUV color space的變種)的顏色信號的模擬編碼
Y'PbPr/Y'CbCr 則被用於視訊和靜態影象處理系統中的顏色編碼(例如MPEG/JPEG)
Y′是亮度(luma)分量, Cb指藍色色度(chroma)分量,而Cr指紅色色度(chroma)分量
Y′是區別於Y(亮度, luminance), 是光強(light)基於Gamma校正的RGB三原色的非線性編碼
當只有Y′時, 顯示出來的是黑白影象, 詳細可參看下圖
根據取樣格式的不同 Y'CbCr又可分為Y′CbCr 4:2:0、Y′CbCr 4:2:2、Y′CbCr 4:1:1和Y′CbCr 4:4:4
以Y′CbCr 4:1:1為例, 其含義為: 每個點儲存一個8bit 的亮度值(也就是Y′值), 每 2x2 個點儲存一個Cr 和Cb 值, 影象在肉眼中的感覺不會起太大的變化
用RGB24模型, 每個點需要8x3=24 bits, 而Y′CbCr 4:1:1僅需要 8+(8/4)+(8/4)=12bits, 平均每個點占12bits
這樣就把影象的資料壓縮了一半
5. FOURCC
我們知道RGB/YUV按照不同取樣格式有不同的型別, 在實際的使用中該如何簡單快速地區分它們呢, 這裡就得提到FOURCC了
FOURCC(four-character code)是一個4bit序列, 用來唯一標識一個資料格式(主要用於視訊編解碼);同時也包括了RGB和YUV的格式, 當然FOURCC所定義遠不止它們
在Linux中, 可以通過v4l2_fourcc宏來定義該值(include/linux/Videodev2.h);比較常用的RGB和YCbCr格式有
/* RGB formats */ #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') /* 32 RGB-8-8-8-8 */ /* two planes -- one Y, one Cr + Cb interleaved */ #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ #define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6') /* 16 Y/CbCr 4:2:2 */
相關文章