一種對顯示數(shù)據(jù)進行壓縮和解壓縮的方法
【技術領域】
[0001] 本發(fā)明設及一種圖像壓縮技術,尤其是一種對顯示數(shù)據(jù)進行壓縮和解壓縮的方 法。
【背景技術】
[0002] 顯示設備的一般顯示原理是顯示控制器按照一定的屏幕刷新率從顯示緩沖區(qū)中 讀取顯示數(shù)據(jù),進行處理后,依次輸出到顯示接口進行顯示。隨著顯示設備不斷向高色階、 高分辨率、高色深發(fā)展,在圖像顯示過程中顯示控制器對數(shù)據(jù)的讀取會占用巨大的總線帶 寬,嚴重影響系統(tǒng)性能。如果顯示緩沖區(qū)中的數(shù)據(jù)可W被壓縮,且壓縮后的數(shù)據(jù)量只有未壓 縮數(shù)據(jù)量的A%,那么讀取數(shù)據(jù)過程中對總線帶寬的占用和對內存的訪存次數(shù)都將減少到 原先的A%。但其代價是每當顯存數(shù)據(jù)被更新時,都需要對顯存數(shù)據(jù)進行壓縮。
[0003] 壓縮算法按照壓縮、解壓縮后是否造成圖像質量的下降,可分為有損壓縮和無損 壓縮兩類。有損壓縮算法的壓縮效率較高、但卻W犧牲圖像質量為代價。而無損壓縮算法 雖效率較低,但算法較為簡單,對計算資源占用小、且不會造成圖像質量的下降。為了在節(jié) 省帶寬的同時保證圖像質量,顯存壓縮技術多采用無損壓縮算法。
[0004] 根據(jù)壓縮時如何利用圖像中像素間的相關性,無損壓縮算法可W分為行壓縮和塊 壓縮。行壓縮是W行為單位進行壓縮,利用了左右相鄰像素的相關性;塊壓縮是W塊為單位 進行壓縮,利用了一個塊中像素的相關性。相比于塊壓縮,行壓縮地址計算較為簡單,更適 用于左右相鄰像素相關性較大的典型應用場景;而塊壓縮需要相應的地址查找表,更適用 于較為復雜的圖像、視頻處理。
【發(fā)明內容】
[0005] 本發(fā)明要解決的技術問題是:提出一種對顯示數(shù)據(jù)進行壓縮和解壓縮的方法,能 夠通過對顯存數(shù)據(jù)進行壓縮和解壓縮,降低在對高分辨率顯示過程中對總線帶寬的占用, W提高系統(tǒng)性能。
[0006] 本發(fā)明所采用的技術方案為;一種對顯示數(shù)據(jù)進行壓縮和解壓縮的方法,包括W 下步驟,
[0007]A、維護兩個顯示存儲區(qū)域,分別是存儲未壓縮圖像數(shù)據(jù)的原始顯存和存儲壓縮數(shù) 據(jù)的壓縮顯存;
[0008]B、當未壓縮顯存中的圖像數(shù)據(jù)被更新后,由CPU計算出被更新數(shù)據(jù)在未壓縮顯存 中所處的行地址,從未壓縮顯存中取出該行數(shù)據(jù)進行壓縮,并存儲到壓縮顯存中該行對應 的存儲地址中;
[0009]C、當顯存數(shù)據(jù)更新速率較快時,CPU停止對原始顯存中更新數(shù)據(jù)的壓縮,并通過對 顯示控制器寄存器的配置使顯示控制器在下一帖開始從未壓縮顯存中讀取數(shù)據(jù);當原始顯 存中寫入的顯示數(shù)據(jù)相鄰像素間的相關性較低,使得壓縮后的顯示數(shù)據(jù)量比未壓縮的顯示 數(shù)據(jù)量更大時,CPU停止對原始顯存中的更新數(shù)據(jù)進行壓縮,并通過對顯示控制器寄存器的 配置使顯示控制器在下一帖開始從未壓縮顯存中讀取數(shù)據(jù);
[0010] D、顯示控制器根據(jù)寄存器的配置命令,從相應顯存中讀取圖像數(shù)據(jù);
[0011] E、若從壓縮顯存中讀取數(shù)據(jù),顯示控制器對壓縮后的圖像數(shù)據(jù)進行解壓縮,并依 次輸出到顯示接口進行顯示;
[0012] F、若從未壓縮顯存中讀取數(shù)據(jù),顯示控制器不用進行解壓縮處理,直接進行其他 相關處理后將顯示數(shù)據(jù)依次輸出到顯示接口進行顯示。
[0013] 進一步的說,本發(fā)明所述的步驟A包括:
[0014] A1、壓縮顯存中數(shù)據(jù)的存儲方式是由未壓縮顯存中存儲數(shù)據(jù)的分辨率決定的,未 壓縮顯存中數(shù)據(jù)的分辨率可通過配置寄存器設置,該顯示配置在一帖有效顯示過程中不允 許改變,W防止出現(xiàn)畫面錯誤;
[0015] A2、若未壓縮顯存中存儲的圖像數(shù)據(jù)的橫向分辨率為X_SIZE,縱向分辨率為Y_ SIZE,圖形緩存區(qū)的行存儲跨度為Stride,則壓縮顯存中每行的有效數(shù)據(jù)量為壓縮后的行 數(shù)據(jù)量,行數(shù)仍未Y_SIZE,壓縮顯存的行存儲跨度為未壓縮顯存的橫向分辨率X_SIZE乘W 色深再乘W1.5倍。
[0016] 再進一步的說,本發(fā)明所述的步驟B包括:
[0017] B1、W行為單位讀入未壓縮的行數(shù)據(jù);使用壓縮后行數(shù)據(jù)中的前兩個字節(jié)存儲該 行壓縮后的總數(shù)據(jù)量;
[0018] B2、依次處理未壓縮行中的像素值,每次讀入的像素值稱為當前像素值,在當前像 素值之前讀入的像素值稱為之前像素值;讓當前像素值與之前像素值進行比較,利用左右 相鄰像素的相關性對比較結果進行編碼;
[0019] B3、圖形層數(shù)據(jù)的更新一般為局部更新,而非整帖更新,CPU每次向顯存中傳入數(shù) 據(jù)塊、數(shù)據(jù)塊的長寬、數(shù)據(jù)塊起始像素點在顯存中的地址信息;每當發(fā)生顯存更新時,并非 將整帖圖像重新壓縮,而是對發(fā)生更新的像素點所在的行進行壓縮,并將壓縮后的行數(shù)據(jù) 存放在壓縮顯存中對應的位置;視頻數(shù)據(jù)為整帖更新,在該種情況下,對視頻數(shù)據(jù)進行整帖 壓縮,再配置寄存器令顯示控制器從壓縮顯存中讀取數(shù)據(jù)進行顯示。
[0020] 再進一步的說,本發(fā)明所述的步驟C包括:
[0021] C1、進行顯存壓縮后,帶寬消耗比沒有進行顯存壓縮前帶寬的消耗??;若顯示控制 器從未壓縮顯存中讀取數(shù)據(jù)占用的帶寬是B,未壓縮的顯存數(shù)據(jù)大小是F,顯示器的屏幕刷 新率是化,則B=FXfr;
[0022] C2、若壓縮比是n,經(jīng)過顯存壓縮后,顯示控制器從壓縮顯存中讀取數(shù)據(jù)占用的帶 寬是B',則B' =nXB;
[0023] C3、因為未壓縮顯存的更新,每秒鐘CPU需要從未壓縮顯存中讀取W的未壓縮數(shù)據(jù) 進行壓縮,經(jīng)過壓縮后,該數(shù)據(jù)量變?yōu)閚XW,CPU將nXW的數(shù)據(jù)量存放到壓縮顯存中,該 壓縮過程中占用的帶寬量為(i+n)xw;
[0024] C4、進行顯存壓縮后,帶寬消耗比沒有進行顯存壓縮前的帶寬消耗?。患碆> nXB+(i+n)XW;
[0025] C5、每秒鐘從未壓縮顯存中讀取的未壓縮數(shù)據(jù)量滿足W< ^XB,根據(jù)評測數(shù) 據(jù),壓縮比大于0. 5,顯存更新頻率為每秒60帖,則當W< 20XF時,采用顯存壓縮技術即可 取得效果;其中F等于顯示圖像的分辨率和色深的乘積;
[0026]C6、記錄1秒鐘內從未壓縮顯存中讀取的未壓縮數(shù)據(jù)量W,每秒鐘結束時按照巧 所述對W進行一次檢驗,若符合要求則繼續(xù)操作;若不符合要求,則停止對顯存數(shù)據(jù)進行壓 縮,通過寄存器配置,令顯示控制器從未壓縮顯存中讀取數(shù)據(jù)進行顯示;
[0027]C7、若壓縮后的數(shù)據(jù)量比未壓縮的數(shù)據(jù)量大,則需停止壓縮,記錄1秒鐘內讀取的 未壓縮顯存的數(shù)據(jù)量W和壓縮后寫入壓縮顯存的數(shù)據(jù)量W',每秒結束時對比W和W'的大 小,若W'〉W,則停止顯存壓縮,配置寄存器,令顯示控制器從未壓縮顯存中讀取數(shù)據(jù)。
[0028] 再進一步的說,本發(fā)明所述的步驟D包括:
[0029]D1、顯示控制器根據(jù)內部寄存器的配置進行工作,顯示控制器內部寄存器的更新 并非是實時的,而是需要等待寄存器更新窗口時間并進行異步握手處理;窗口時間是指在 兩帖顯示之間的一個特定時間點,即一帖顯示結束、下一帖顯示還未開始之前的場效應時 間;
[0030] D2、顯示控制器寄存器的更新方式是;配置寄存器后將負責標志是否更新的寄存 器相應位置"1";顯示控制器反復讀取負責標志是否更新的寄存器,查看相應的更新位;當 更新位被清"0"時,寄存器就完成更新;在等待過程中,不能對該部分的寄存器進行修改;
[0031] D3、顯示控制器根據(jù)寄存器的配置決定是否開啟解壓縮功能,當顯示控制器開啟 解壓縮功能時,先對讀取的顯示數(shù)據(jù)進行解壓縮,再依次送入顯示接口進行顯示;當顯示 控制器不開啟解壓縮功能時,對讀入的顯示數(shù)據(jù)進行相關處理后直接送入顯示接口進行顯 /J、- 〇
[0032] 本發(fā)明的有益效果是:能夠通過對顯存數(shù)據(jù)進行壓縮和解壓縮,降低在對高分辨 率顯示過程中對總線帶寬的占用