關 閉

        新聞中心

        EEPW首頁 > 安全與國防 > 設計應用 > 基于異構多核全高清H264解碼系統設計

        基于異構多核全高清H264解碼系統設計

        作者: 時間:2015-03-31 來源:網絡 收藏

          2系統設計

        本文引用地址:http://www.104case.com/article/271885.htm

          全高清解碼任務由主處理器Cortex-A9和協助處理器Cortex-M3共同完成,Cortex-A9主要負責從多媒體文件中或網絡數據流中進行數據的讀取、多媒體數據包過濾分離視頻流和音頻流、構建RPMsg控制消息進過virtio緩存封裝發送給協處理核Cortex-M3以設置IVA-HD加速引擎的控制參數、向協處理器發送多媒體數據包進行解碼、在協處理器完成解碼任務后接收圖像并通過DRM API及KMS模塊繪制到屏幕上。

          平臺上有兩個Cortex-M3處理核,分為Sys M3和App M3,都運行TI BIOS實時操作系統,其中Sys M3主要負責創建與Cortex-A9通信的virtio緩存隊列,對程序執行流程和CPU負載情況進行記錄,接收A9發過來的緩存數據并進行參數解析,同時根據緩存中dst參數分派緩存到App M3的相應消息鏈表中。而App M3協處理器則完成實際的解碼工作,App M3將通過運用于嵌入式平臺的Codec Engine來完成對IVA-HD加速引擎的操作。App M3將提取消息鏈表中消息請求相應設置IVA-HD加速引擎的狀態和初始化參數,在進行實際解碼時會通過Codec Engine來調用IVA-HD加速引擎來完成解碼任務并將解碼結果通過緩存隊列發送回Cortex-A9處理器。整個系統解碼的框架圖如圖4所示:

          

         

          圖4 解碼器工作框架圖

          3系統實現

          3.1 Cortex-A9軟件實現

          Cortex-A9運行Linux操作系統,包括內核模塊omapdce.ko和virtio緩存、RPMsg總線驅動程序設計和ffmpeg多媒體庫及DRM顯示接口調用。

          3.1.1 virtio緩存隊列實現

          Virtio緩存隊列以共享散列表的方式和協處理器進行數據通信,通過中斷方式通知對方散列表的添加,包括以下幾個方面:

          1)Irq_require()注冊中斷函數,Register_bus_type(“virtio”)向系統注冊virtio總線

          2)Regsiter_virtio_driver(

          3)系統在發現協處理器后將通過register_virtio_device(

          4)virtio_bus->match(

          3.1.2 RPMsg消息框架實現

          RPMsg總線將掛載許多rpmsg_driver和rpmsg_device,和rpmsg_driver都有本地端口src和目的端口dst屬性,每次發送消息時會調用rpmsg_send((void*)data,src,dst)將消息添加到virtio的緩存隊列中,而當消息msg達到RPMsg總線時,總線把msg分配給dst屬性和msg->dst相同的rpmsg_driver,并調用rpmsg_driver->callback()進行消息處理。

          3.1.3 omapdce.ko驅動模塊的實現

          Omapdce.ko模塊將作為一個RPMsg driver,其實現了應用程序引擎相關API的內核實現,主要包括ioctl_engine_open()、ioctl_viddec_create(),ioctl_viddec_control()、ioctl_viddec_process(),他們提供了應用API engine_open、viddec_create()、viddec_control()、viddec_process()的驅動實現,這些驅動函數將調用RPMsg總線rpmsg_send()、rpmsg_recv()與協處理器進行消息通信以完成工作任務。

          3.1.4解碼應用viddectest實現

          H264解碼應用程序viddectest的工作主要分為以下幾個方面

          1)Linux顯示接口DRM初始化,通過Drmopen()函數打開/dev/dri/card0設備文件,獲取設備資源drmModeGetResources(),創建幀緩存drmModeAddFB2()及設置輸出分辨率及模式drmModeSetCrtc()

          2)FFmpeg媒體庫的調用,通過AVOpenStreamFile()打開多媒體文件,AVFindStream()分離出音頻流和視流,然后依次通過AVGetPacket()讀取視頻流數據包送去解碼器進行解碼。

          3)加速引擎初始化和利用消息總線進行解碼數據通信,通過Engine_open()打開H264解碼引擎,Viddec3_create()創建一個解碼實例對象,Viddec3_control()設置解碼所需的參數,Viddec3_process()將用RPMsg消息總線送出解碼數據流并接收解碼后的圖像緩存數據,其流程圖如圖5所示:

          

         

          圖5&6 應用viddectest流程圖&M3運行流程圖



        關鍵詞: H264 DaVinci

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 桃园市| 海丰县| 泸州市| 呈贡县| 定南县| 日土县| 朔州市| 永康市| 平顶山市| 武冈市| 策勒县| 聂拉木县| 玉树县| 威宁| 盐池县| 师宗县| 莆田市| 上虞市| 吐鲁番市| 泸州市| 克东县| 新宾| 团风县| 张家港市| 加查县| 石家庄市| 米易县| 西和县| 鞍山市| 百色市| 肃宁县| 金坛市| 浦城县| 淮滨县| 县级市| 高陵县| 宜宾县| 汕尾市| 江都市| 屏边| 榆中县|