<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 如何通過(guò)開(kāi)源API在DSP上進(jìn)行視頻處理

如何通過(guò)開(kāi)源API在DSP上進(jìn)行視頻處理

作者: 時(shí)間:2009-07-09 來(lái)源:網(wǎng)絡(luò ) 收藏

虛擬到物理地址的轉換由編解碼引擎。復用(指針指向)某些由驅動(dòng)器分配的緩沖器,可獲得物理上連續的存儲器,這里使用了Linux中的一些技術(shù),比如dma_alloc_coherent(),來(lái)在內核空間中分配這類(lèi)存儲器。由TI開(kāi)發(fā)的庫/內核模塊CMEM,允許從用戶(hù)空間應用來(lái)分配物理上連續的存儲器。

例如,我們利用前面提到的CMEM驅動(dòng)器來(lái)分配物理上連續的“輸出”緩沖器。編解碼引擎對幀解碼,并把解碼后的幀放在輸出緩沖器中。

接下來(lái),指向輸出緩沖器的指針被傳遞給fbvideosink( GstBuffer)。這個(gè)videosink必須把解碼后的數據memcpy(復制)到幀緩存中,然后才能顯示。由于memcpy操作是一種成本很高的GPP使用,這種方法使得ARM 和DDR接口的負載很重,因而增加了功耗,且效率極低。

這種技術(shù)對非常小的緩沖器是可行的,但在開(kāi)發(fā)人員使用D1(和更高)大小的緩沖器時(shí),將開(kāi)始降低系統性能。一種更有效的方案是復用已經(jīng)驅動(dòng)器分配了的物理連續緩沖器,并在編解碼器引擎和videosink插件之間把指向這些緩沖器的指針來(lái)回傳遞。幸運的是,GStreamer提供了一個(gè)便于這類(lèi)交互作用的。

這個(gè)替代方案利用gst_buffer_new()來(lái)創(chuàng )建新的緩沖器。當元件獲知它將在哪一個(gè)源襯墊上推動(dòng)數據時(shí),就對gst_pad_alloc_buffer()函數調用。這允許對應的元件為調用元件的工作提供特殊的“硬件”緩沖器,故而減少了系統所需的memcpys數量。

解碼器插件(變換過(guò)濾器,編解碼器引擎能夠充分利用的優(yōu)勢)將把從呈現過(guò)濾器獲得的緩沖器用作解碼器和執行解碼的輸出緩沖器。一旦解碼完成,這個(gè)輸出緩沖器將被推動(dòng)(即指針被傳遞)給視頻呈現過(guò)濾器插件。由于解碼后的圖像已經(jīng)存在于視頻驅動(dòng)存儲器中,就不再需要memcpy了,在幀被顯示時(shí),視頻呈現過(guò)濾器將只需把目前的顯示緩沖器轉換為這種特定的緩沖器就可以了。

AV同步

播放期間的音頻/視頻(AV)同步一般需要三類(lèi)決策:一是重復幀的決策。一般在媒體流的幀的顯示時(shí)間比幀間隔時(shí)間更大時(shí)采用。二是顯示幀的決策。一般在媒體流的幀的顯示時(shí)間在最小和最大閾值之間時(shí)采用。三是跳幀決策。一般在幀的顯示時(shí)間落后顯示時(shí)間至少兩個(gè)幀時(shí)采用。這樣,跳過(guò)當前幀,處理下一個(gè)幀,以期彌補下一個(gè)幀間隔。持續這樣做直到下一個(gè)幀被顯示或不再剩有幀可供比較。

另外,管道中的所有元件都使用共同的時(shí)鐘,以便于這些活動(dòng)的。幸運的是,所有這些決策都由GStreamer內核庫中的音頻視頻sink基類(lèi)來(lái)完成。這樣一來(lái),AV同步的復雜性大部分都在用戶(hù)那里被轉移了。

以插件形式開(kāi)發(fā)的接口

TI開(kāi)發(fā)了一種GStreamer變換過(guò)濾器插件,它利用來(lái)進(jìn)行視頻解碼,運行于A(yíng)RM上,使用Linux操作系統。TI還提供有Linux外設驅動(dòng)器,在驅動(dòng)器接口和編解碼引擎API方面符合標準機構的要求,后者注意了編程的相當大部分的復雜性。由硬件制造商提供的API,事先已針對硬件實(shí)現做了優(yōu)化。如果改用新的硬件,無(wú)需改變應用代碼就可直接替以新的驅動(dòng)器。這種方案大幅度降低了視頻開(kāi)發(fā)的成本和交付周期。

硬件的計算資源以一種最優(yōu)方式被執行,無(wú)需任何匯編編程。其中包括很多復雜的操作,比如DSP資源的最佳利用,和基于硬件的加速引擎;鏈接模式(chained mode)下增強型直接存儲器訪(fǎng)問(wèn)(Enhanced Direct Memory Access)外設的使用,以提高數據傳輸效率;以及中斷模式和tasklet模式的數據包處理,以靈活滿(mǎn)足不同應用的要求。

由于GStreamer是一種非常流行、廣為人知的架構,它已成為數字視頻開(kāi)發(fā)的一種標準,在這種環(huán)境中充分利用 DSP優(yōu)勢的能力使得編程人員不再需要學(xué)習專(zhuān)用DSP編程語(yǔ)言。

該方案還易于把DSP的功能和GPP內核上運行的典型應用的一些其他要求集成在一起。利用其他GStreamer插件,可以把解碼編碼與數字視頻應用所需的其他操作相結合。這種多媒體架構通過(guò)把各種本來(lái)需要手工編碼的操作整合在一起來(lái)實(shí)現集成。

總而言之,這一新接口能夠利用GStreamer Linux多媒體構架來(lái)充分發(fā)揮TI的DaVinci處理器平臺的軟件基礎架構的優(yōu)勢。這種整合型的基礎架構提供了靈活的構架,能夠適應新一代多媒體編解碼器的要求。

該軟件架構可以實(shí)現各式廣泛的視頻產(chǎn)品的設計。利用這種結構,能為視頻設備設計人員提供社群支持、穩健的基礎架構,從而縮短上市時(shí)間。


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>