<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è) > 嵌入式系統 > 設計應用 > 基于TMS320C64x 的MPEG-4實(shí)時(shí)編碼器設計與實(shí)現

基于TMS320C64x 的MPEG-4實(shí)時(shí)編碼器設計與實(shí)現

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


  首先主機通過(guò)PCI初始化DSP并對其加載程序;DSP開(kāi)始運行編碼程序,從視頻端口獲取實(shí)時(shí)采集的視頻,如圖1所示。SAA7113輸出BT.656格式的數字視頻,作為DM642 VPORT的輸入,VPORT輸出YUV(4:2:0)格式的圖像,作為編碼程序的輸入;DSP完成一幀圖像的編碼,通過(guò)PCI向主機發(fā)出中斷;主機響應中斷,從DSP的存儲空間讀取原始圖像數據和壓縮后的碼流。主機程序在VC++環(huán)境下編寫(xiě),提供與用戶(hù)交互的界面,可對數據進(jìn)行各種處理,包括原始視頻的實(shí)時(shí)播放、保存,壓縮碼流的實(shí)時(shí)解壓播放、保存、回放、網(wǎng)絡(luò )傳輸,從網(wǎng)絡(luò )接收壓縮碼流實(shí)時(shí)解壓回放等。

  需要注意的是原始圖像和壓縮碼流在DSP中的存儲。視頻端口、編碼程序和主機都要訪(fǎng)問(wèn)原始圖像,例如在某一時(shí)刻,編碼程序訪(fǎng)問(wèn)當前幀圖像,主機讀取上一幀圖像,而視頻端口正在輸入下一幀圖像,為了避免訪(fǎng)問(wèn)沖突,原始圖像在DSP中采用三緩沖區進(jìn)行管理。壓縮碼流由編碼程序寫(xiě)入,主機讀取,所以采用乒乓制進(jìn)行存儲。

1.3 內存分配

  DM642片內只有256KB的存儲空間,因此當前幀、參考幀和當前幀的重建幀都必須放至片外存儲器,壓縮碼流若被主機讀取,也放至片外。其它數據如程序代碼、全局變量、VLC碼表、各編碼模塊產(chǎn)生的中間數據等均可放至片內。

  由于CPU訪(fǎng)問(wèn)片外的速度通常要比訪(fǎng)問(wèn)片內慢幾十倍,片外數據的傳輸通常成為程序運行時(shí)的瓶頸,即使代碼效率很高,流水線(xiàn)也會(huì )因為等待數據而被嚴重阻塞。解決這一問(wèn)題的有效方法是用EDMA傳送數據。程序是逐個(gè)宏塊進(jìn)行編碼的,在編碼當前宏塊的同時(shí),EDMA將下一個(gè)宏塊的數據、用到的參考幀數據由片外傳送至片內;當前宏塊做完運動(dòng)補償后,EDMA將重建后的宏塊由片內傳送至片外。這樣CPU只對片內數據進(jìn)行操作,使得流水線(xiàn)可以順利進(jìn)行,而壓縮碼流按逐個(gè)碼字有時(shí)間間隔地寫(xiě)入,可由CPU直接寫(xiě)至片外。

2 采用預測技術(shù)的運動(dòng)估計算法

  運動(dòng)估計是編碼中計算量最大的一部分,占據整個(gè)編碼時(shí)間的50%以上。各種快速運動(dòng)估計算法也成為近年來(lái)研究的熱點(diǎn)。本文通過(guò)實(shí)驗證明,采用預測技術(shù)的運動(dòng)估計不但可以大大縮短計算時(shí)間,而且也有助于提高圖像的質(zhì)量。

  宏塊(Macro Block)的運動(dòng)矢量(Motion Vector)在時(shí)間和空間都具有相關(guān)性,預測的原理就是利用當前幀和參考幀內相鄰位置宏塊的MV來(lái)預測當前宏塊的MV。下面詳述本文所采用的預測算法。

  (1)確定當前宏塊MV的7個(gè)候選值PreMV1~7。
  如圖3所示。PreMV1=(0,0);PreMV4取當前宏塊左邊相鄰宏塊的MV值;PreMV5取上邊相鄰宏塊的MV值;PreMV6取右上方相鄰宏塊的MV值;PreMV2=mid{PreMV4, PreMV5, PreMV6},即取三者的中值;PreMV3取參考幀相同位置宏塊的MV值;PreMV7取參考幀右下方相鄰宏塊的MV值。

圖3 預測運動(dòng)矢量示意圖

  (2)確定篩選候選值的依據——SAD(絕對誤差和)的門(mén)限值ThreshSAD。

  SAD是確定最佳匹配塊的準則。門(mén)限值ThreshSAD是指這樣一個(gè)值:如果參考幀內某一宏塊和當前宏塊的SAD小于ThreshSAD,則當前宏塊的MV值就可取作二者之間的位移。因此,ThreshSAD就可作為篩選7個(gè)候選值的依據。
  由于SAD在空間上的相關(guān)性,ThreshSAD由相鄰宏塊的SAD值來(lái)確定:
   ThreshSAD=Min{SADleft,SADtop,SADtop_left}
  其中,SADleft、SADtop、SADtop-right分別為MBleft、MBtop、MBtop-right和其對應匹配塊的SAD值,ThreshSAD取三者的最小值。
  (3)從7個(gè)候選值中選出當前宏塊的MV值。

  按照PreMV1~7的順序,依次計算當前宏塊和7個(gè)匹配塊的SAD值。如果有SAD值小于ThreshSAD,即停止計算,選用對應的PreMV作為當前宏塊的MV值;如果7個(gè)SAD值均大于ThreshSAD,則采用運動(dòng)搜索來(lái)確定當前宏塊的MV值。該運動(dòng)搜索并不以MV=(0,0)為中心,而是以對應SAD值最小的PreMV為中心,搜索采用簡(jiǎn)化的菱形算法。

  對標準視頻序列foreman.cif(352×288)進(jìn)行編碼(碼率300kbps),測得表1所示數據。采用預測的運動(dòng)估計算法利用視頻序列在時(shí)間和空間上的相關(guān)性,無(wú)需對每個(gè)宏塊都進(jìn)行運動(dòng)搜索,而且其搜索中心點(diǎn)也同樣利用了相關(guān)信息,搜索算法也可進(jìn)一步簡(jiǎn)化,因此大大減少了運動(dòng)估計的計算量;同時(shí),預測有助于提高圖像質(zhì)量,直接進(jìn)行快速運動(dòng)搜索通常會(huì )帶來(lái)局部最小的問(wèn)題,從而影響圖像質(zhì)量,而PreMV1~7取自位于當前宏塊周?chē)鱾€(gè)方向的宏塊的MV值,避免陷入局部最小。

霍爾傳感器相關(guān)文章:霍爾傳感器工作原理


霍爾傳感器相關(guān)文章:霍爾傳感器原理


評論


相關(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>