dm8148 HDVPSS 知識簡介

smilestone322發表於2015-08-05

說明:部分內容摘自ti官網論壇

 

1)hdvpss貌似提供了一些介面API用來配置DM816x的暫存器,但是又把各種板卡型別至於其中,甚至連視訊解碼晶片驅動都放在裡邊了,感覺限制非常大,使用者要怎麼根據自己的板卡使用這些東西,如果是增加新的晶片驅動,會涉及很多更改,遇到這種情況,使用者該怎麼開放呢?

回答:關於問題1這裡有歷史的原因在裡面,最早的時候AD的驅動都是在M3上執行的就是你現在在hdvpss驅動中看到的AD的驅動,這樣架構的問題就是修改需要了解M3的程式碼,對於大家來說難度增加了.為了解決這個問題DVR RDK後續將AD的驅動移到A8,這樣就可以不需要了解M3就可以進行開發了,對於capturelink可以直接定義相應的格式,保證與AD介面對等即可.

2)hdvpss 編譯出來的檔案到底是什麼東西,怎麼在應用程式中怎麼使用呢?應為在Makefile沒有看到,或許有,但是沒有找到,makefile裡確實有編譯hdvpss的,但是應為不清楚軟體架構,不明白編譯hdvpss有什麼用?
回答:
HDVPSS是視訊處理子系統(Video Process Sub-System),針對晶片中整合的VPSS硬體協處理器,編譯出來的是VPSS的驅動庫,供RDK層呼叫其介面以實現視訊資料在VPSS協處理器中的處理,比如採集、縮放、顯示。所以可以理解為RDK和硬體協處理器之間的驅動層。


3)看了下dvr_rdk\mcfw\src_bios6\links_m3vpss程式碼,好像也是使用hdvpss 介面(FVID2_)是不是說這部分就是在hdvpss執行的驅動呢?使用者如果對Vport配置需要修改,只需要修改這部分程式碼,而無需去更改ti_tools\hdvpss\hdvpss_01_00_01_37_patched\packages下的程式碼呢?
答覆:可以這麼理解,呼叫了FVID2介面的部分就是在HDVPSS執行的。不建議客戶自己修改hdvpss目錄下的任何檔案,可以向TI技術支援提出你們具體的需求,大部分應該可以通過RDK配置實現。如果是HDVPSS驅動中還不支援的功能,TI會在後續版本中新增。


4)關於dvr_rdk\mcfw\src_bios6\links_m3vpss編譯後出來的是什麼檔案呢,最後也是通過fw_load.out載入麼?
答覆:編譯出來的是在HDVPSS媒體控制器(m3)中執行的firmware,是通過fw_load.out載入的,可以看load.sh指令碼獲得更詳細資訊。


5)dvr_rdk_fw_m3vpss.xem3 是怎麼生成的呢,裡面大體實現了一些什麼功能?
答覆: 裡面主要包含了RDK中vpss link 層的程式碼以及HDVPSS驅動,在RDK中可以看到在links_m3vpss目錄下的功能都是在這裡實現的。

 

6)基於hdvpss 介面(FVID2_)編寫的程式碼怎麼除錯呢?
答覆:Rules.make裡面把dvr_rdk_fw_m3vpss.xem3編譯成debug模式,通過模擬器可以除錯。

7)HDVCIP2是什麼? IVAHD 是什麼?
hdvcip:high definition video and image coProcessor;

8)iss和hdvpss (High Definition Video Processing Subsystem)區別?
答覆:用cameralink的話,就是呼叫iss的東西,cameralink是和ISS相關的,capturelink是和VPSS相關的,這是我的理解;
iss是直接接攝像頭,vpss需要轉換晶片像TVP5158等才能和攝像頭相連;
iss:imaging sub-system
hdvpss: high definition video processing subsystem;


TVP5158是什麼?視訊解碼晶片;


9)FVID2 是什麼?
FVID2 are the set of APIs or framework specifically designed for the video class of devices.


10)FVID2 API
10.1)FVID2_init
Int32 FVID2_init(Ptr args);
Int32 FVID2_deInit(Ptr args);

10.2)FVID2_create
FVID2_Handle FVID2_create(UInt32 drvId,UInt32 instanceId,Ptr createArgs,Ptr createStatusArgs,const FVID2_CbParams *cbParams);

10.3) FVID2_start
Int32 FVID2_start(FVID2_Handle handle, Ptr cmdArgs)

10.4) FVID2_stop
Int32 FVID2_stop(FVID2_Handle handle, Ptr cmdArgs)

10.5) FVID2_dequeue
Int32 FVID2_dequeue(FVID2_Handle handle,FVID2_FrameList *frameList,UInt32 streamId,UInt32 timeout);

10.6) FVID2_queue
Int32 FVID2_queue(FVID2_Handle handle,FVID2_FrameList *frameList,UInt32 streamId);

10.7) FVID2_control
Int32 FVID2_control(FVID2_Handle handle,UInt32 cmd,Ptr cmdArgs,Ptr cmdStatusArgs);

10.8) FVID2_delete
Int32 FVID2_delete  ( FVID2_Handle  handle,  Ptr  deleteArgs)

10.9) FVID2_setFormat
Int32 FVID2_setFormat(FVID2_Handle handle, FVID2_Format *fmt)

10.10)FVID2_getFormat
Int32 FVID2_getFormat(FVID2_Handle handle, FVID2_Format *fmt)

10.11)FVID2 ProcessFrames
Int32 FVID2_processFrames  ( FVID2_Handle  handle,  FVID2_ProcessList *  processList)

10.12)FVID2_getProcessedFrames
Int32 FVID2_getProcessedFrames(FVID2_Handle handle,FVID2_ProcessList *processList,UInt32 timeout)

10.13)FVID2_getStandardInfo
Int32 FVID2_getStandardInfo(FVID2_StandardInfo *stdInfo)


callback:
A user callback can be registered during driver create which is then called by the driver whenever data is available at
any of the channels, streams associated with the driver. User would typicall set a semaphore to wake up a task. The
woken up task will then call dequeue API to get the newly captured frames. Dequeue should be called for every
stream associated with the driver to get the captured frames, since the callback just indicates there is data but the data
could be in any of the streams that are valid for the driver instance.

FVID2_CbParams
FVID2_Format
FVID2_SliceInfo
FVID2_Frame
FVID2 FrameList
FVID2_ProcessList

 

相關文章