<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用ADSP-2181和MC68302實現(xiàn)MPEG-2傳送復(fù)用器

          用ADSP-2181和MC68302實現(xiàn)MPEG-2傳送復(fù)用器

          作者: 時間:2006-05-07 來源:網(wǎng)絡(luò) 收藏

          摘要:在概述MPEG-2傳送流(TS)語法規(guī)范的基礎(chǔ)上,給出了用ADSP-2181 器和MC68302微控制器實現(xiàn)傳送復(fù)用器的設(shè)計方案和實現(xiàn)技術(shù)。該方法是在MC68302的控制下,用DSP查詢復(fù)用器各輸入FIFO的狀態(tài),根據(jù)各FIFO的狀態(tài)讀入數(shù)據(jù),完成音頻、視頻的均勻打包。

          本文引用地址:http://www.ex-cimer.com/article/242399.htm

          關(guān)鍵詞:MPEG-2編碼傳輸系統(tǒng) 傳送復(fù)用器 TS流 打包

          當(dāng)今世界正在向數(shù)字化方向發(fā)展,電視信號的數(shù)字編碼、數(shù)字化存儲、數(shù)字化傳輸、數(shù)字化處理在我們的現(xiàn)實世界中已經(jīng)變得越來越廣泛。電視系統(tǒng)的全面數(shù)字化給節(jié)目制作和傳輸都帶來了革命性的變化。隨著碼率壓縮技術(shù)的突破和MPEG標(biāo)準(zhǔn)的建立,從演播室到發(fā)射整個系統(tǒng)的各個方面正處于全面數(shù)字化的進(jìn)程中。MPEG-2編解碼傳輸系統(tǒng)是目前解決演播室節(jié)目制作和傳輸?shù)闹髁鳟a(chǎn)品。

          MPEG-2編碼傳輸系統(tǒng)由音、視頻編碼器(包括音、視頻原始流的分組基本流打包)、傳輸流系統(tǒng)復(fù)用器、網(wǎng)絡(luò)適配器等組成,如圖1所示。

          復(fù)用器是整個系統(tǒng)的關(guān)鍵設(shè)備之一,它接收前端多套節(jié)目編碼器來的視頻、音頻壓縮數(shù)據(jù)流,按照一定的復(fù)用策略將其交織復(fù)用成符合MPEG-2系統(tǒng)層規(guī)范的單一的系統(tǒng)碼流(傳輸流)。為實現(xiàn)一套節(jié)目音頻、視頻的解碼同步,在碼流中需插入各種時間標(biāo)記、系統(tǒng)控制等信息。最后送到網(wǎng)絡(luò)適配器或者信道調(diào)制設(shè)備,得到與傳輸信道相匹配的標(biāo)準(zhǔn)輸出碼流后,送往信道。復(fù)用器還提供整個編碼系統(tǒng)的系統(tǒng)時鐘。

          本文復(fù)用器的設(shè)計是在MPEG-2音/視頻國際標(biāo)準(zhǔn)的第一部分ISO/IEC13818-1系統(tǒng)層語法規(guī)范的基礎(chǔ)上,采用ADSP-2181信號處理器芯片和MOTOROLA的微處理器MC68302實現(xiàn)的。

          1 復(fù)用器的設(shè)計

          1.1 ISO/IEC 13818-1傳送層語法結(jié)構(gòu)

          復(fù)用器以MPEG-2系統(tǒng)規(guī)范為基礎(chǔ),對于地面廣播方式,復(fù)用器按傳輸流(TS)格式打包。TS包的長度固定為188字節(jié),傳送層采用固定字長數(shù)據(jù)包的優(yōu)點在于為以后新業(yè)務(wù)的創(chuàng)立提供了靈活性,新增的比特流可以直接在傳送層處理而無需增加硬件。數(shù)據(jù)包字頭信息中采用數(shù)據(jù)包標(biāo)識(PID)作為比特流的識別工具,因此可以將視頻、音頻和其它數(shù)據(jù)混合在一起。經(jīng)網(wǎng)絡(luò)適配器后,得到具有G.703標(biāo)準(zhǔn)的碼流,以便在類似SDH多路復(fù)用的環(huán)境中進(jìn)行數(shù)據(jù)的發(fā)送;同時也有利于抗信道誤碼和誤碼后的恢復(fù)。

          傳送層的語法結(jié)構(gòu)如圖2所示。188字節(jié)長度的TS包由4字節(jié)的鏈接字頭、可變長字節(jié)的自適應(yīng)字頭以及有效數(shù)據(jù)負(fù)荷組成。每個TS包的字頭信息鑒別一種應(yīng)用比特流,它們構(gòu)成TS包的負(fù)荷,支持的應(yīng)用包括視頻、音頻、數(shù)據(jù)、節(jié)目流和系統(tǒng)控制信息等。

          1.2 多路復(fù)用流語意的限制

          (1)節(jié)目參考時鐘PCR的編碼頻率

          打包時,TS流的構(gòu)造應(yīng)使得含有每一節(jié)目的PCR-PID的TS流分組中連續(xù)出現(xiàn)program_clock_reference字段最后一位的字節(jié)間隔應(yīng)小于等于0.1s。

          (2)顯示時間標(biāo)簽的編碼頻率

          對每一個原始視頻或音頻流來說,傳送流的結(jié)構(gòu)應(yīng)使編碼的顯示時間標(biāo)簽的最大差值為0.7s,也就是

          │tPnk-tPnk’’│≤0.7s

          (3)在傳送流中,音頻采樣速率和系統(tǒng)目標(biāo)解碼器的系統(tǒng)時鐘頻率之間有特定的比例關(guān)系,而且視頻圖象速率和系統(tǒng)時鐘頻率之間也有特定的比例關(guān)系。

          2 ADSP-2181的性能

          器(DSP)具有速度快、運算能力強、花費低、可擴(kuò)展和集成度高等優(yōu)良特性,這就使得我們在選擇內(nèi)嵌環(huán)境下工作的信號協(xié)處理器時,能夠提供非常強大且靈活的系統(tǒng),并且價格非常合理。

          本文采用AD公司的ADSP-2181 器,它具有以下主要性能:

          ·25ns的單周期指令執(zhí)行時間

          ·片內(nèi)16K字程序存儲器PRAM;片內(nèi)16K字?jǐn)?shù)據(jù)存儲器DRAM

          ·三個獨立的計算單元ALU、乘法/累加器和桶形移位器

          ·兩個獨立的地址發(fā)生器

          ·強有力的程序定序器

          ·循環(huán)無額外時鐘開銷

          ·條件算術(shù)指令

          ·具有壓擴(kuò)硬件和自動數(shù)據(jù)緩沖的兩個雙緩沖串行口

          ·可編程的內(nèi)部定時器

          ·可編程的等待狀態(tài)發(fā)生器

          ·16比特內(nèi)部DMA口可快速訪問片內(nèi)存儲器

          ·具有2048個存儲單元的I/O口支持并行的外圍設(shè)備

          ·13個可編程的標(biāo)志管腳可提供靈活的系統(tǒng)信令

          ·EPROM的自動引導(dǎo)或通過內(nèi)部DMA口自動引導(dǎo)

          這些特點使得它只需最小的外部支持環(huán)境就可以工作。

          用ADSP-2181實現(xiàn)壓縮的音、視頻的傳輸流打包時,如果視頻編碼器以8Mbps的速率輸出壓縮的視頻流,存于視頻FIFO中,而16位操作的DSP每個指令讀兩個字節(jié),則需讀0.5M次,即每秒需要500 000次讀指令才能保證FIFO不發(fā)生溢出。與此同時,DSP還需對讀出的數(shù)據(jù)進(jìn)行一定的處理,才能從DSP串口發(fā)出。ADSP-2181的最高指令周期為40MIPS,按每秒從FIFO讀1MB計算,則平均1秒一個字節(jié)可有40條指令的處理時間。對于打包處理,ADSP-2181可以滿足一套節(jié)目的復(fù)用。

          3 ADSP-2181的IDMA接口與MC68302的連接

          為了使DSP實現(xiàn)最好的性能,有效的微處理器通信是最關(guān)鍵的。摩托羅拉MC68300系列微控制器能提供強大且靈活的總線接口,很適合DSP的要求。

          復(fù)用器設(shè)計時,整個過程的協(xié)調(diào)控制工作是用摩托羅拉的微處理器MC68302完成的。控制操作流程見圖3。圖中的標(biāo)號表示系統(tǒng)的整個初始化過程,其中,“(1)”表示MC68302對打包DSP進(jìn)行RESET(復(fù)位),DSP開始初始化;“(2)”表示MC68302給編碼器加載程序;“(3)”表示打包DSP通知MC68302已初始化完畢;“(4)”表示MC68302通知編碼器開始工作。

          MC68302對整個系統(tǒng)初始化完畢后,ADSP-2181便開始從FIFO中讀取分組的視頻原始流和音頻原始流,并對所讀數(shù)據(jù)進(jìn)行判斷,加相應(yīng)的包頭,然后在外加串口時鐘的控制下,以固定速率從ADSP-2181串口把打包的TS流數(shù)據(jù)送往信道。

          下面介紹ADSP-2181芯片的IDMA接口同MC68302微控制器之間的硬件界面和軟件接口的設(shè)計方案。

          3.1 IDMA操作

          外部器件能通過DSP的IDMA接口訪問ADSP-2181的內(nèi)存。微處理器MC68302能夠通過IDMA接口與ADSP-2181的內(nèi)存通信,把此DSP芯片當(dāng)作是隸屬自身的以存儲區(qū)劃分的外圍設(shè)備,并且可以訪問ADSP-2181的所有數(shù)據(jù)存儲器(DM)和程序存儲器(PM)。

          ADSP-2181的IDMA接口由以下幾部分組成:一條16比特的地址/數(shù)據(jù)復(fù)用總線(IAD16:0),一條選擇線(IS),地址鎖存有效信號(ALE),讀信號(IAD),寫信號(IWR),通知信號(IACK)。MC68302負(fù)責(zé)所有數(shù)據(jù)傳輸?shù)某跏蓟ぷ鳌?br>ADSP-2181的存儲器地址裝載在IDMA地址寄存器中,IDMA地址寄存器包括14比特的內(nèi)存地址和1比特限定傳輸類型的標(biāo)志位。該標(biāo)志位用于區(qū)分所傳輸?shù)氖牵玻幢忍氐某绦虼鎯ζ鞔a,還是16比特的數(shù)據(jù)存儲器數(shù)據(jù)。IDMA地址寄存器的初始化工作既可以由DSP完成,也可以由微處理器完成。微處理器可以通過運行一個地址鎖存周期來初始化此寄存器。一個地址鎖存周期的過程如下:先由微處理器發(fā)ALE信號,然后在IAD上傳輸15比特位(14位地址信號和位目的存儲類型信號)。為了更有效地傳送大段的操作代碼或數(shù)據(jù),并不是IDMA存取都需要一個地址鎖存周期。相反,一旦鎖定,每個IDMA字傳輸之后地址就會自動增加。

          3.2 硬件界面設(shè)計

          占用微控制器外圍空間的ADSP-2181芯片的IDMA端口需要劃分成兩個部分:一部分由微控制器使用,用來設(shè)置它想訪問的DSP存儲器地址;另一部分則用于傳輸數(shù)據(jù)和指令信息。
          對于基于DSP的協(xié)處理系統(tǒng)的設(shè)計而言,微控制器和DSP之間的硬件接口設(shè)計僅僅是驅(qū)動工作的一部分。系統(tǒng)的啟動問題及微處理器和DSP之間的通信問題在系統(tǒng)設(shè)計中是很重要的部分。

          3.3 加載DSP芯片

          在加電情況下,DSP上的IDMA接口可用來加載程序。這樣DSP就無需再用單獨的EPROM芯片。對于芯片ADSP-2181,加載過程由管腳MMAP和BMODE來控制。保持管腳MMAP低電位、管腳BMODE高電位,就可以通過IDMA接口進(jìn)行程序加載了。在此狀態(tài)下,當(dāng)有復(fù)位信號時,DSP并不激活它的外部地址總線去訪問EPROM芯片,而是等待微處理器開始IDMA傳輸來填充其內(nèi)部數(shù)據(jù)存儲器和程序存儲器,并且利用IDMA接口的地址自動增加特性來加速以升地址順序進(jìn)行的代碼段的傳輸。當(dāng)所有初始化工作結(jié)束時,微處理器初始化DSP的重啟動向量PM(0x0000),至此,程序加載結(jié)束,DSP 程序開始執(zhí)行。此過程的流程如圖4所示。

          3.4 產(chǎn)生加載代碼

          ASDP-21xx系列的指令操作代碼位有24位,而IDMA接口只能接收16位的值。為了通過IDMA接口傳輸指令操作代碼,需要先傳輸16位,然后再傳輸另外8位 并進(jìn)行適當(dāng)?shù)恼{(diào)整。

          DSP的可執(zhí)行文件是由ADSP_21XX鏈接器生成的。鏈接器接收由匯編器生成的目標(biāo)文件,把它們放置在由系統(tǒng)結(jié)構(gòu)文件定義的存儲結(jié)構(gòu)中,產(chǎn)生DSP可執(zhí)行文件。

          4 ADSP-2181完成傳輸流打包

          傳輸流的打包需要在ADSP-2181的數(shù)據(jù)存儲區(qū)DM中開辟兩個緩沖區(qū),一個是TS頭固定長度部分的BUFFER,其中包含是否需要PCR字段的PCR-flag標(biāo)志;另一個是可調(diào)字段的BUFFER,其中包括標(biāo)識PCR編碼的相關(guān)字段。根據(jù)輸入修改TS的兩個緩沖,判斷是否需要可調(diào)字段、是否需加PCR字段、是否有填充字節(jié)以及填充字節(jié)的數(shù)目等。然后以恒定速率(在此是8.448Mbps)發(fā)出。

          從編碼器來的視頻、音頻原始流分組(PES)在ADSP-2181中被分割成一個個長度為188字節(jié)的小包,并插入相應(yīng)的TS字頭。由于視頻流的輸入速率遠(yuǎn)大于音頻的輸入速率,在同一時間內(nèi)的視頻TS包遠(yuǎn)遠(yuǎn)多于音頻的TS包,因此必須采取一定的措施使得視頻、音頻數(shù)據(jù)TS包能夠均勻地交織復(fù)用到最終的傳送碼流中,以保證解碼端的視頻、音頻解碼器的BUFFER不會產(chǎn)生上溢和下溢。PCR時間標(biāo)記在傳送復(fù)用器中規(guī)定的視頻TS包頭中傳輸,但要說明的是,按照MPEG-2的系統(tǒng)層規(guī)范,PCR采樣的時刻必須是當(dāng)PCR字段串行輸出離開復(fù)用器那一刻的時間,也就是說PCR的插入邏輯是復(fù)用器的最后一步操作。此外,一個PES包的包頭必須包含在一個新的TS傳送包中,同時PES包數(shù)據(jù)要充滿TS傳送包的負(fù)荷,若PES包數(shù)據(jù)的結(jié)尾無法與TS包結(jié)尾對齊,則需要在TS的調(diào)整字段中插入相應(yīng)數(shù)量的填充字節(jié),使得兩者的結(jié)尾對齊。解碼時填充字節(jié)則直接被丟棄。

          復(fù)用器啟動后,由MC68302首先向前級視頻、音頻編碼器發(fā)出系統(tǒng)編碼開始信號,同時發(fā)送27MHz系統(tǒng)時鐘。ADSP-2181被動地接收前級編碼數(shù)據(jù)。視頻、音頻分別在各自的FIFO中緩存,各FIFO設(shè)有各自的雙向計數(shù)器,動態(tài)地反映各FIFO中緩存的視頻、音頻字節(jié)數(shù)。采用DSP輪詢技術(shù)控制復(fù)用比特流中各種TS包的交織策略。由于視頻PES數(shù)據(jù)流的輸入速率是可變的,而音頻的速率則是恒定的,若采用其他固定比例的復(fù)用策略,無法保證輸出碼流各種TS包的均勻性,采用輪詢技術(shù)除了能夠均勻打包輸出變速率的視頻數(shù)據(jù)流外,同時對多節(jié)目數(shù)據(jù)流的復(fù)用具有很好的靈活性,只需在軟件中增加輪詢的數(shù)目并合理安排其輪詢的優(yōu)先級即可,可用圖5來描述。

          ADSP-2181按視頻、音頻的次序?qū)σ曨lFIFOV FIFO、音頻FIFOA FIFO進(jìn)行輪詢,即讀取反映FIFO狀態(tài)的雙向計數(shù)器,若大于預(yù)先確定的門限數(shù)值,則從相應(yīng)的FIFO中讀?。保福醋止?jié),送入第二級公共FIFO中。

          ADSP-2181在對視頻、音頻184字節(jié)的讀取過程中,同時檢測是否碰到PES包起始碼,若未碰到PES字頭,則由ADSP-2181向傳輸緩存器寫入相應(yīng)的TS包頭4字節(jié),無可調(diào)字段,再將公共FIFO中的184字節(jié)送入傳輸緩存器;若碰到PES字頭則立即停止從第一級視頻或音頻FIFO中讀取數(shù)據(jù),同時向ADSP-2181發(fā)出中斷,ADSP-2181的中斷服務(wù)讀取公共FIFO中的字節(jié)數(shù)目,設(shè)其為N,由于在這N字節(jié)數(shù)據(jù)中包含4字節(jié)的PES字頭,為了使TS包與PES包字頭對齊,公共FIFO中的數(shù)據(jù)要打成兩個TS包,由于第一個TS包有效負(fù)荷數(shù)據(jù)只有N-4個字節(jié),PES包的結(jié)尾未能和TS包的結(jié)尾對齊,因此在第一個TS包的自適應(yīng)域要插入182-N-4個填充字節(jié)0xFF,有效數(shù)據(jù)負(fù)荷為N-4,第二個TS包由于是一個新的PES數(shù)據(jù)包的開始,公共FIFO中還保留4字節(jié)的PES字頭,因此ADSP-2181還需從第一級FIFO中讀入相應(yīng)數(shù)目字節(jié)的視頻或音頻數(shù)據(jù)。對于音頻來說,不需插入PCR信息,只從音頻FIFO中讀入184-4個字節(jié)的數(shù)據(jù)。在向輸出緩存器寫入TS字頭后,再將公共FIFO中的數(shù)據(jù)送入輸出緩存器。對視頻來說,在不考慮PCR信息插入時其操作同音頻一樣。

          由于兩PCR之間的時間間隔在MPEG-2視頻編碼器傳送流中要求為100 ms,因此,在DSP軟件中設(shè)計了一個計數(shù)器,用于對所有已生成的TS包進(jìn)行計數(shù)。由于ADSP-2181串口的輸出速率是恒定的(在此是靠外加8.448MHz串口時鐘實現(xiàn)的),因而單位時間內(nèi)的總的TS包的數(shù)目也是一定的。要使PCR之間的時間間隔保持恒定,只需將計數(shù)器的預(yù)置數(shù)目設(shè)定為“總的TS包數(shù)目/每秒÷25”,復(fù)用器每生成一個TS包,計數(shù)器減1,當(dāng)計數(shù)器計到零時將時間間隔標(biāo)記置位。ADSP-2181在每次輪詢打包TS數(shù)據(jù)之前,先檢測時間間隔標(biāo)記是否置位,若未置位則按前述方法處理,若置位則在打包的下一個視頻TS包中插入PCR時間標(biāo)記,當(dāng)然這里只是在TS包頭中插入相應(yīng)的可調(diào)字段,而沒有插入真正的PCR時間標(biāo)記,只是將6字節(jié)的PCR位置預(yù)留出來。因此,如果下一個復(fù)用的TS包為視頻數(shù)據(jù)并且恰好需插入PCR時間標(biāo)記,則DSP從視頻FIFO中讀的數(shù)據(jù)是176字節(jié)而不是184字節(jié),因為可調(diào)字段已占用了8字節(jié)。如果該TS包為含有PES字頭的視頻TS包,則讀入的數(shù)據(jù)字節(jié)為172字節(jié)。在ADSP-2181的最后輸出單元中最重要的是完成PCR時間標(biāo)記的插入。MPEG-2系統(tǒng)規(guī)范要求PCR時間必須為PCR域最后一字節(jié)離開復(fù)用器的時間,因此,PCR只能在串出的時刻鎖存系統(tǒng)時鐘。PCR信息只包含在特定的視頻TS包中,ADSP-2181在寫入該TS字頭時可調(diào)字段已預(yù)先保留6字節(jié)的PCR位置,因此,在數(shù)據(jù)串出的同時要進(jìn)行字頭檢測。當(dāng)滿足PCR插入條件時,即在檢測到TS包的同步字節(jié)以及可調(diào)字段標(biāo)志位后,則在相應(yīng)時刻啟動PCR鎖存及串出邏輯。

          需要說明的是:對于多節(jié)目輸入復(fù)用的情況,除了可以采用以上所設(shè)計的DSP輪詢策略外,還應(yīng)注意優(yōu)先級的排隊問題,以防視頻緩沖區(qū)有上溢問題出現(xiàn)。對于VBR視頻的多節(jié)目復(fù)用問題,尤其要慎重考慮。不僅要設(shè)置雙向計數(shù)器,動態(tài)地反映各FIFO中緩存的視頻、音頻字節(jié)數(shù),還要采用相應(yīng)的預(yù)測機(jī)制來即時獲取各路視頻速率的變化趨勢,同時采用相應(yīng)的返回控制機(jī)制來調(diào)整輸入端的速率,保證各路信號均勻交織,使輸入FIFO不溢出也是很有必要的。另外,節(jié)目特殊信息PSI的插入要滿足PAT之間和PMT之間的時間間隔恒定為40ms,設(shè)計時是在TS包計數(shù)器置零后緊接著的兩個TS包中放入PAT和PMT表格。解碼時選擇感興趣的節(jié)目就是根據(jù)PAT中標(biāo)明的節(jié)目號在PMT中尋找該節(jié)目對應(yīng)的音頻、視頻信息,進(jìn)而實現(xiàn)該套節(jié)目的同步解碼。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();