本文詳細介紹了title="DM368" target="_blank">DM368 視頻前端支持的輸入數(shù)字信號格式。并以MT9D131 和PC VGA 信號為例,將兩者的時序和 DM368 視頻前端配置參數(shù)一一匹配。同時介紹了如何合理配置和使用 VD 中斷,為 DM368 用戶正確采集數(shù)據(jù)提供了參考。本文內容也可以給 DM8127、DM385 芯片的用戶在使用視頻攝像并行輸入口采集時提供幫助。
1 前言
DM368 是TI 達芬奇系列芯片中的一顆,被廣泛的使用在IPNC(IP net camera 網(wǎng)絡攝像機)的應用領域里。對于IPNC 應用,首先就需要將視頻信號送入DM368 里面,這就需要使用到DM368 的視頻前端(VPFE - Video Processing Front End)。DM368 的視頻前端主要包含了IPIPEIF(Image Pipe Interface 圖像管道接口),ISIF(Image Signal Interface 圖像信號接口),IPIPE (Image Pipe 圖像管道),Resizer(縮放器)四個部分。IPIPEIF 功能是數(shù)據(jù)通路連接,以及把數(shù)據(jù)整合成后端模塊接口可以接入的格式/大小。ISIF 是視頻信號的輸入口,可以支持Bayer 格式的RAW 數(shù)據(jù)(原始數(shù)據(jù))或者是YUV 的數(shù)據(jù)的輸入。IPIPE 主要是做ISP 的處理。Resizer 起到了對圖像縮放和圖像存儲格式轉換的作用。本文是基于IPIPEIF 將外部并口輸入數(shù)據(jù)送入ISIF 處理的基礎上展開討論。
圖 1. 視頻處理前端[1]
如何將輸入信號和DM368 視頻前端參數(shù)一一對應?如何獲取外部的RAW 數(shù)據(jù)以及RAW 轉換成的對應的YUV 數(shù)據(jù)?如何只采集或者處理圖像中的一部分區(qū)域?如何配置VD 中斷觸發(fā)的時機?在VD 中斷里面我們應該處理什么?希望在閱讀完本文后,你可以找到相應的答案。
2 DM368 的前端信號輸入
如果用戶外接傳感器(sensor)輸出RAW 數(shù)據(jù)或者YUV 數(shù)據(jù)到DM368,為了采集到正確的數(shù)據(jù),我們需要了解DM368 的視頻前端是如何解讀信號,以獲得正確的數(shù)據(jù)。如果用戶使用的是FPGA 輸出信號到DM368,那就更需要了解DM368 視頻前端支持的信號格式,正確輸出DM368可以接收的信號。
2.1 輸入信號的物理連接
DM368 視頻前端支持并口的信號輸入,包括PCLK(像素時鐘),8 到16 位數(shù)據(jù)線,HD(行同步)信號,VD(場同步)信號??梢灾С肿疃?6 位的Bayer 格式的RAW 數(shù)據(jù)輸入。也可以支持內嵌同步或者外部信號同步的8 位或者16 位的YUV422 信號輸入。如果是內嵌同步,則不需要接入HD 信號和VD 信號。對于輸入內嵌同步的信號,DM368 硬件可以自動解析出數(shù)據(jù)上嵌入的同步信息給芯片內部使用。DM368 的PCLK 最高可支持120MHz,可以支持720p60、 1080p30 等分辨率的輸入,也可以支持較大分辨率,例如五百萬、八百萬等分辨率,但幀率是非實時(小于30 幀)的。
DM368 的視頻前端ISIF 可以支持master(主) 模式或者slave (從)模式。所謂master 模式就是PCLK、VD 和HD 由DM368 向外發(fā)出。而slave 模式是外部設備提供PCLK、VD 和HD 信號給DM368。在實際的應用里面絕大部分的情況都使用采slave 模式。
IPIPE 和Resizer 對信號的解析和處理
如果ISIF 直接通過IPIPEIF 連接到IPIPE,那所有的圖像數(shù)據(jù),也就是圖2 里的global frame 都會傳輸?shù)絀PIPE。在IPIPE 里面 用戶需要配置SRC_HPS (Horizontal Start Position ),SRC_VPS(Vertical Start Position),SRC_HSZ( Horizontal Processing Size)和SRC_VSZ( Vertical Processing Size),來確認global frame 里面的哪一部分需要IPIPE 來處理。
在resizer 的模塊里面,也有SRC_HPS,SRC_VPS,SRC_HSZ 和SRC_VSZ 可以配置resizer處理的圖像的區(qū)域。如果IPIPE 的輸出到resizer 已經(jīng)是需要處理的區(qū)域,那SRC_HPS,SRC_VPS 就可以配置為0,而resizer 的SRC_HSZ,SRC_VSZ 等于IPIPE 的SRC_HSZ,SRC_VSZ。如果ISIF 的輸出是通過IPIPEIF 直接到resizer(沒有經(jīng)過IPIPE),resizer 的SRC_HPS,SRC_VPS 就不能配置為0 了,需要用戶根據(jù)需要處理的圖像合理的配置resizer 的SRC_HPS,SRC_VPS 寄存器。
RAW 數(shù)據(jù)和YUV 數(shù)據(jù)的匹配
在連續(xù)模式下,用戶同時獲得resizer 輸出的YUV 和ISIF 輸出的RAW,時常有用戶發(fā)現(xiàn)自己保存的RAW 數(shù)據(jù)和Resizer 輸出的YUV 數(shù)據(jù)不匹配,有一定的偏移。這種問題的原因是IPIPE,Resizer 里面的SRC_HPS,SRC_VPS,SRC_HSZ 和SRC_VSZ 和ISIF 里面的寫入DDR 時候配置的偏移和大小不匹配。IPIPE/Resizer 和ISIF 的寄存器本身是沒有直接關系的,這就需要用戶將它們一一對應,匹配起來。例如ISIF 輸出的數(shù)據(jù)輸入給IPIPE,為了讓RAW 和YUV 匹配,需要ISIF 的SPH 等于IPIPE 的SRC_HPS,ISIF 的SLV0/1 等于IPIPE 的SRC_VPS,ISIF 的LNH 等于IPIPE 的SRC_ HSZ,ISIF 的LNV 等于IPIPE 的SRC_ VSZ。而Resizer 的SRC_HPS,SRC_VPS 需要配置為0,而resizer 的SRC_HSZ,SRC_VSZ 要等于IPIPE 的SRC_HSZ,SRC_VSZ。
在單次模式下,也就是數(shù)據(jù)通路ISIF->DDR->IPIPEIF->IPIPE(Resizer),由于IPIPE 的輸入是DDR 上的RAW 數(shù)據(jù),有效數(shù)據(jù)的獲取已經(jīng)在ISIF 輸出到DDR 配置里面實現(xiàn)了,IPIPE 里面的處理數(shù)據(jù)的起始位置就可以是(0,0)了。
這樣無論是在連續(xù)模式還是在單次模式下,RAW 數(shù)據(jù)和RAW 輸出轉換出的YUV 數(shù)據(jù)就可以完全匹配了。