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