调试经验--图像
調試經驗--圖像
??? 隨著芯片技術的發展,嵌入式設備也擁有較強的圖像處理能力了。而當中的佼佼者,davinci平臺提供了非常強的圖像處理功能。
??? 在davinci平臺的使用過程中。我們遇到幾個圖像相關的問題:
1,圖像質量差;
2。上位機顯示圖像色度不對;
3,顏色分量;
4。yuv傳輸數據時的裁切。
一、圖像質量差
背景:
??? 在描寫敘述問題前,說明一下我們嵌入式設備的開發工作流程,應該有助于說明問題。
主板是硬件開發者參考dm6446開發板的原理圖設計的,軟件是以dvsdk1.3為開發工具進行的,視頻輸入是標清的模擬視頻,在視頻輸出端接顯示器能夠查看圖像。
arm接收到輸入圖像后,傳送給dsp,dsp分析圖像之后,將結果返回給arm,arm將部分結果,以osd的方式疊加在輸出圖像上。
??? 關于圖像的buffer,簡單說明一下:
dm6446的圖像輸入buffer。與圖像輸出buffer。是在兩個不同的內存區域,我們疊加的osd信息,是在輸出buffer中實現的。
??? 另外有PC上的配置軟件,能夠進行設備的配置,當中有一個抓圖功能,是使用PC上的配置軟件下發捕獲圖像命令,嵌入式程序運行捕獲,即從輸入的圖像buffer中取出一幅yuv來,然后上傳給PC。
問題現象:
??? 在dm6446平臺上,接入標清的模擬視頻輸入,在視頻輸出端接顯示器查看圖像,發現圖像質量不好,現象例如以下:
?有模糊的彩色短條移動,在短條所在行附件。運動物體通過時抖動非常厲害(彩色短條的形狀比較類似于我們疊加的字符信息OSD);
?不但OSD會造成畫面影像移動,其它醒目物體也有類似模糊影像移動。
?進行單張抓圖,圖像上也有彩條。
?圖像底部是黑條。沒有圖像。
?
進一步的測試:
??? ?採用對照法,正常的程序執行。是既有視頻輸入也有視頻輸出。而且還有較多其他功能。我們對系統功能進行簡化,進行相同硬件環境下的對照執行測試。
?視頻環路程序:同一時候有輸入輸出,將輸入的圖像直接送至輸出。輸出畫面有OSD疊加。此時,捕獲的圖像中還是有OSD的影像。圖像底部無圖像。
?視頻解碼顯示程序:這是dvsdk中自帶的例程,進行視頻解碼。然后視頻輸出。
此時,圖像清晰、完整。
分析:?
??? 圖像有影子移動,是模擬信號的干擾。當僅僅進行視頻輸出時圖像清晰。說明視頻輸出部分的線路沒有問題,則視頻輸入部分線路有問題。
??? 單張抓圖的圖像上也有彩條,說明了視頻輸出對視頻輸入有影響:OSD僅僅用于輸出。而抓圖抓的僅僅是輸入圖像。可見輸出干擾了輸入。
??? 圖像底部無圖像,是嵌入式軟件對圖像的設置有問題。
原因:?
??? 問題分兩部分,一個是圖像上有影子移動。一個是圖像底部無圖像。
圖像上有影子移動:
??? 板卡的視頻輸出線反向走過整塊板卡,當中有一段與輸入線非常接近。干擾了輸入信號。
對于這個問題,后來還知道,另一條分離輸入輸出問題的測試方法:VPBE能夠設置為彩條輸出,能夠區分輸出圖像顯示問題的來源是圖像還是驅動?。
圖像底部無圖像:
??? 是設置圖像參數時出了問題,因為osd層是使用半字節表示一個像素,又須要osd層的寬度是32字節對齊的。帶來一個問題:720/2=360不是32的倍數,所以,須要使用一個比360大的又最接近的32的倍數。本系統中使用的是384:
OSD屬性層:384×576
在設置透明度時。原來設置的是720×576/2 的區域,改為768×576/2 ,恢復varInfo.yres=576,圖像及OSD都能全屏顯示。
下表簡單描寫敘述了視頻輸出的buffer:
設備名????????? 數據內容?????? 緩沖區大小? ?? 每像素占字節數
/dev/fb/0 --> OSD內容???? 1440×576??????? 2 (RGB565)
/dev/fb/2 --> OSD透明度? 384×576? ??????? 0.5?(行寬384,有效使用360)
/dev/fb/3 --> 視頻圖像????? 1440×576??????? 2 (UYVY)
二、上位機顯示圖像色度不對?????
現象:
??? 在嵌入式設備輸出端連接的顯示屏上。圖像顯示正常。在用PC上的配置軟件抓圖。顯示的圖像不正常。
分析:
??? 圖像顯示不正常的地方,往往是畫面中最亮的地方。可能是某些值在轉換中越界。
原因:
??? 分析代碼,是在dm6446系統中,使用的是yuv,而在PC上顯示,是使用的RGB,在進行格式轉換時,某些值越界了。比如。在RGB色彩系統中,3個255就是白色,若當中一個越界,造成兩個255與一個0。就成了黃色。
三、顏色分量
??? 高清圖像輸出,採用3個顏色分量Y、Cb、Cr,輸出,使用色差分量線外接顯示器。
分量???????????????? Y、? Cb、 Cr
用顏色線表示? 綠、 藍、 紅
與我們通常說得RGB有較大的差異。RGB的全0為黑色,全255為白色。
而YCbCr的幾種典型顏色,我們有必要知道一下:
0。??? 0,?? 0???????? 綠色
255。255,255?? 粉紅色
255,0,255????? 黃色
255,255,0????? 亮籃色
四、yuv傳輸數據時的裁切
??? bt656、bt1120都禁止使用0與255。
當遇到0時。應當轉換為1;當遇到255時,應該轉換為254。
??? dm6467的vport in與out口都沒有進行數據裁減。真正實現數據裁剪的,是內核驅動。
??? 比如,在dvsdk1.4中。使用vport傳輸yuv數據。就沒有裁切;而在dvsdk3.10中,就實現了0與255的裁切。
??? 當遇到數據裁切時。有時會導致新的問題。比如,我想覆蓋yuv的第一行來傳輸某些信息,若被裁切了,數據就不是原來的意義了。
??? 此時。我們能夠使用數據轉換法,即讓0與255不出現就是了。比較簡單的方法,我使用兩字節來表示一個字節:0-253。我用高字節置1。低字節使用1-254來表示;而254-255,我使用高字節置2,低字節為1-2就可以。
總結
- 上一篇: macbook双网卡路由
- 下一篇: exchange系列(四)如何保护exc