2008年3月5日 星期三

Video Input Processer工作紀錄

設定影像輸入格式:
將影像輸入格式設定為CVBS,也就是ㄧ般的AV端子

設定影像輸出格式:
由於chip有support ITU-R BT656 Embedded Syncs 與 YCbCr 4:2:2 Discreate sync
Embedded Syncs:即表示將hsync與vsync訊號的資料包在data封包裡面傳送
Discreate sync:是指hsync與vsync訊號是個別傳送的,沒有包在資料裡面
由於cpu只支援hsync與vsync訊號個別傳送,所以必須將Video Output的輸出格式設為Discreate sync。


設定符合Chip端輸出的data順序:
由於我們選擇的chip輸出format是YCbCr 4:2:2,其中Y代表亮度、Cb代表藍色色度、Cr代表紅色
色度,而CHIP所設定的data傳送順序如下圖所示:





所以在CPU端也必須設定CbYCrY順序的動作,色彩才會與chip輸出data相符合


在Chip Init加入Chip Reset:
// VEDIO_RESET Pull Low //p13
PIO_OUTPUT_ZERO (GPIO, GPIO_GROUP(3), GPIO_INDEX(11)); PIO_OUTPUT_ENABLE (GPIO, GPIO_GROUP(3), GPIO_INDEX(11));

msWait(100);

// VEDIO_RESET Pull High //p13
IOW_REG_OR(ULONG, &(v_pGpioRegs->gpio[3].paden), GPIO11);
PIO_OUTPUT_ONE (GPIO, GPIO_GROUP(3), GPIO_INDEX(11));
PIO_OUTPUT_ENABLE (GPIO, GPIO_GROUP(3), GPIO_INDEX(11));

將16bit強制轉換成8bit:
由於driver的架構是以16bit為設計基準,然而VIP chip只有Support到8bit,故必須將將16bit強制轉換成8bit

Scale:
由於實際影像大小為720*240,但是我們實際要輸出的LCD panel只有320X240,故需做影像壓縮大小的動作,這樣的動作會透過LookUpTable來實現,也就是將實際影像大小建構在LookUpTable中,再依我們要壓縮的比例大小至table表裡,等比例的每隔幾個pixel取ㄧ次,取出實際輸出的影像大小。

16bit與8bit處理上的差異:
由於ㄧ個pixel大小為2 bytes所組成,所以以16bit的driver架構,pixel CLK為13.5MHZ,所以ㄧ次可以傳送ㄧ個Pixel。所以如果以8bit的架構,pixel CLK就必須變成27MHZ

影像重疊的處理:
由於倒車影像需要倒車警示線,所以需要在倒車影像上再新增一圖層用來顯示倒車警示線,
在LCD driver有三個圖層可供使用,ㄧ個是最底層SCN,在這邊將這層拿來顯示我們的倒車影像
而第一層OSD1,則是拿來顯示警示線,另ㄧ層OSD2則尚未使用到,如下圖所示
在最後LCD display輸出時就會將三的圖層mix在一起在輸出



在driver還需要將SCN層與OSD層的framebuffer作個別指定的動作,以免發生影像與警示線顯示在同ㄧ圖層的情況,由於OSD圖層式堆疊在SCN層上面,所以會將SCN圖層的影像蓋過去,導致只能看到OSD圖層,在這種情況下,就必須將OSD圖層作透明化的處理,再OSD圖層可指定對特定顏色作透明化以及加強或減弱透明度的效果,經過透明化後,就可以看到SCN層的影像及OSD層的警示線了

設定特定顏色透明化:
dwColorKeyHigh =0x13effe;//設定白色透明化
dwColorKeyLow = 0x13effe;//設定白色透明化

設定OSD層透明化的程度:
WriteLcdRegisterValue(OSDALPHA, 0x002f003a);//set Alpha Value

OSD影像偏移校正問題:
在ㄧ開始時,我們曾經發生在OSD層顯示影像時,會發生整個影像向右偏移的請況,所以影像左邊會跑出黑色的色塊,而且影像也無法全部顯示,影像右邊ㄧ塊也會不見,原因是因為要去設定OSD圖層的起始與結束位置,在platform.reg裡作設定,當設定的位置跟底層SCN層的位置是ㄧ致時,就不會有偏移的情形產生了

"regOSD_HSTART"=dword:22
"regOSD_VSTART"=dword:11
"regOSD_HEND"=dword:161
"regOSD_VEND"=dword:100

OSD層資料搬移(16bits轉32bits)
由於為了減少系統負荷量,原本資料搬移的型別是用WORD,也就是每次搬移16bits,現在改用int,一次搬移32bits,搬移時寬度必須每次都加2,因為寬度是320高度240,而原本每次是搬移1個pixel,所以總共要搬移320x240次,現在變成每次搬移2個pixel,所以現在總共只要搬移320x160次即可

1 則留言:

匿名 提到...

Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Smartphone, I hope you enjoy. The address is http://smartphone-brasil.blogspot.com. A hug.