本發(fā)明涉及廣播電視與多媒體技術領域,特別是涉及一種基于FPGA嵌入式系統(tǒng)的多路音頻軟編碼機制。
背景技術:
在廣電與多媒體領域,人們對音頻質量的要求正在不斷地提高,從單聲道到立體聲,又在向多聲道發(fā)展,最廣泛采用的多聲道環(huán)繞聲配置是ITU-R建議的5.1聲道配置。而且同一視頻可以存在多個配音,比如多種語言。隨著工業(yè)技術的不斷提升,多媒體系統(tǒng)支持的視頻節(jié)目數(shù)也在不斷增加,與視頻對應的音頻的數(shù)目也會成比例增長。增加音頻編碼芯片的數(shù)量無疑會增加編碼系統(tǒng)的采購成本,各種音頻編碼芯片對編碼格式以及控制方式都有特殊的要求,這加大了設計的復雜程度延長了設計周期。
技術實現(xiàn)要素:
本發(fā)明的發(fā)明目的在于提供一種基于FPGA嵌入式系統(tǒng)的多路音頻軟編碼機制,采用本發(fā)明提供的技術方案能夠并行地接收與處理多路的原始數(shù)字音頻數(shù)據,對各通道PCM音頻幀產生與視頻同步的PTS值,并將此對應關系保持到編碼后的PES幀和PTS值,保證音視頻同步。
為了達到上述發(fā)明目的,本發(fā)明一方面提供一種多路音頻軟編碼方法,包括以下步驟:
將每個輸入通道的原始音頻數(shù)據由串行格式轉為并行格式,并提取所述原始音頻數(shù)據的有效PCM數(shù)據,利用乘法器對所述PCM數(shù)據進行音量放大操作,根據音頻編碼算法調整所述PCM數(shù)據的PCM數(shù)據位寬,將所述PCM數(shù)據編碼成ES幀,采用DDR對所述PCM數(shù)據完成編碼前PCM幀和編碼后ES幀的交互,多個ES幀組成一個PES幀,將與視頻同步的PTS值寫入與之對應的PES幀頭部,將PES幀分解為多個個TS包并勻速輸出。
本發(fā)明另一方面還提供一種多路音頻軟編碼裝置,包括PCM數(shù)據提取模塊、PCM音頻放大模塊、PCM數(shù)據緩沖器和DDR寫控制模塊;所述PCM數(shù)據提取模塊將原始數(shù)字音頻輸入格式由串行轉換為并行格式,并提取出所述原始數(shù)字音頻的有效PCM數(shù)據作為音頻編碼的原始輸入數(shù)據;所述PCM音頻放大模塊,內含有符號乘法器,用于放大所述PCM數(shù)據,并根據音頻編碼算法要求控制所述PCM數(shù)據的位寬;所述PCM數(shù)據緩沖器,內含有PCM數(shù)據緩存區(qū),用于緩存所述PCM數(shù)據,緩存大小為系統(tǒng)總線寫burst長度,當緩存滿burst長度的PCM數(shù)據后,由所述DDR寫控制模塊控制將PCM數(shù)據緩存區(qū)的PCM數(shù)據發(fā)送到系統(tǒng)總線;所述DDR寫控制模塊,用于將傳入系統(tǒng)總線的PCM數(shù)據通過DDR控制器寫入FPGA片外的DDR內;DDR內分配有PCM幀交互區(qū),用于將PCM數(shù)據以PCM幀的形式存放。
本發(fā)明還提供一種利用FPGA嵌入式系統(tǒng)進行編碼和輸出編碼數(shù)據的方法,包括以下步驟:嵌入式CPU讀取權利要求3中所述PCM幀交互區(qū)的PCM幀進行音頻編碼成ES幀;CPU將音頻編碼后的ES幀寫入DDR分配的編碼ES幀交互區(qū),并通知FPGA內部的發(fā)送模塊讀取所述ES幀;發(fā)送模塊通過系統(tǒng)總線讀出ES幀,并將N個ES幀組成一個PES幀,將與視頻同步的PTS值寫入與之對應的PES幀頭部,將PES幀分解為M個TS包,并將TS包勻速輸出。
本發(fā)明還提供一種與視頻顯示實時同步的PTS值的產生方法,采用本地PTS計數(shù)逼近的方法產生與視頻實時同步的PTS值,包括以下步驟:
實時提取視頻PCR;本地計數(shù)器PTS_counter在本地時鐘下進行計數(shù),計數(shù)初始值為首次提取的視頻PCR值;每當視頻PCR更新,比較PTS_counter值與視頻PCR值之間的差值;設置一個差值門限,PTS_counter與視頻PCR差值大于差值門限,則調整PTS_counter值;PTS_counter與視頻PCR差值連續(xù)超過差值門限值預設次數(shù)之后,則將PTS_counter值置為視頻PCR值。將PTS_counter值作為與視頻同步的PTS值。
本發(fā)明還提供一種產生與PES幀對應的PTS值的方法,在編碼系統(tǒng)時鐘下,第i(1~n)通道的PCM幀的第一個有效數(shù)據出現(xiàn)的時刻,鎖存計數(shù)器PTS_counter值作為與此PCM幀對應、且與視頻實時同步的PTS值;PCM幀編碼產生ES幀,ES幀對應的PTS值與此ES幀編碼輸入的PCM幀的PTS值相同;多個ES幀組成一個PES幀,將PES幀內的第一個ES幀對應的PTS值作為PES幀的PTS值并寫入PES幀頭。
由上可見,應用本發(fā)明實施例的技術方案,有如下有益效果:
(1)FPGA器件具有豐富的邏輯資源,可實現(xiàn)多路音頻編碼,其路數(shù)遠大于普通音頻編碼芯片的音頻編碼路數(shù),節(jié)省了音頻編碼芯片的采購成本。進一步地,F(xiàn)PGA芯片可以完成編碼后音視頻流的處理,因此對于多媒體系統(tǒng)搭建具有極小的成本。FPGA器件具有比普通編碼芯片更多的外設接口,提供充分的調試手段;
(2)基于FPGA嵌入式芯片的現(xiàn)場可編程特點,可以靈活的設置音頻編碼通道數(shù),音頻編碼算法,減少設計復雜度,縮短設計周期;
(3)基于FPGA高速處理能力,可以并行的接收多路原始音頻數(shù)據,在各路音頻幀的起始產生與視頻同步的PTS值,在編碼的過程中保持PTS與音頻幀的對應關系,具有較好的音視頻同步指標。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對本發(fā)明實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹。顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一部分實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為依照本發(fā)明的基于FPGA嵌入式系統(tǒng)進行多路音頻軟編碼的實現(xiàn)方法的系統(tǒng)框圖;
圖2為依照本發(fā)明的原始音頻PCM幀與對應的PTS值分別在DDR和寄存器存放的存放結構示意框圖;
圖3為依照本發(fā)明的PTS產生模塊結構圖。
圖4為依照本發(fā)明的第i通道的編碼后ES幀與對應的PTS值分別在DDR和寄存器存放結構示意框圖;
圖5為依照本發(fā)明的在編碼過程中音頻幀與PTS值對應關系示意圖;
圖6為依照本發(fā)明的PTS產生模塊采用的一種本地PTS計數(shù)逼近的實施例流程圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
在對多路音頻解碼過程中,增加音頻編碼芯片的數(shù)量無疑會增加編碼系統(tǒng)的采購成本,各種音頻編碼芯片對編碼格式以及控制方式都有特殊的要求,這加大了設計的復雜程度,延長了設計周期。
為了解決上述技術問題,本實施例公開了一種基于FPGA嵌入式系統(tǒng)的多路音頻軟編碼機制,本實施例提供的技術方案采用嵌入式FPGA芯片作為實現(xiàn)平臺,能靈活的設置音頻編碼路數(shù)與編碼算法,同時保證音視頻同步。
具體實現(xiàn)方法如下:
先采用圖1中所示的原始音頻接收模塊101對原始音頻數(shù)據進行初處理,其實現(xiàn)步驟如下:
1、將原始音頻數(shù)據由串行格式轉為并行格式,并提取有效PCM數(shù)據。
2、有符號乘法模塊放大音頻幅度值,放大因子可設。
3、根據算法需要調整原始PCM數(shù)據位寬。由于PCM數(shù)據是以二進制補碼的形式存在,增加位寬采取在低位補零的方式,減小位寬采取截取低位的方式。
4、將處理后的PCM數(shù)據放入FPGA片內存儲器緩存,緩存采用乒乓的讀寫方式,乒乓緩存深度為系統(tǒng)總線burst長度。
由上述原始音頻接收模塊101處理得到的PCM數(shù)據,傳遞給嵌入式處理器系統(tǒng)進行音頻編碼,PCM數(shù)據交互則在FPGA片外DDR進行。
請參見圖2,在片外DDR內設有PCM幀交互區(qū),該PCM幀交互區(qū)根據通道數(shù)目n劃分為n個區(qū)間,稱之為通道區(qū)間。每個通道區(qū)間分為大小相等的兩個子區(qū)間:乒區(qū)203和乓區(qū)204。乒區(qū)和乓區(qū)各存儲一個PCM幀。
請參見圖1,寫DDR控制模塊102用于將通道1到通道n的接收模塊101內緩存的PCM音頻數(shù)據通過系統(tǒng)總線寫入DDR內PCM幀交互區(qū).
PCM音頻數(shù)據寫入PCM幀交互區(qū)的操作過程具體如下:當通道i(1~n)的接收模塊101完成一個系統(tǒng)總線burst長度PCM數(shù)據的緩存后,寫DDR控制模塊向系統(tǒng)總線發(fā)起一次寫burst操作。先根據通道號i確定PCM幀交互區(qū)的通道區(qū)間,再確定該通道區(qū)間乒乓子區(qū)間,將總線burst數(shù)據寫入乒乓子區(qū)間。若已寫滿其中一個乒乓子區(qū)間后,轉向寫入另一個乒乓子區(qū)間。
當PCM幀交互區(qū)存在任意通道的一個完整的PCM幀之后,嵌入式系統(tǒng)將此PCM幀轉移到其他DDR區(qū)間進行音頻編碼,并釋放該PCM幀所在的通道子區(qū)間。
根據MPEG協(xié)議,PTS是音頻數(shù)據存儲單元的顯示時間。為了保證多路節(jié)目的音視頻同步,需要正確的對每一路音頻產生準確的與視頻同步的PTS信息,即保證音頻PTS與視頻PTS具有相同的系統(tǒng)時基。請參見圖2,PTS生成模塊205,用于產生PTS值,并存入相應的PTS寄存器202。
請參見圖3,PTS生成模塊由4個子模塊,PCR_analysis模塊301,PTS_counter模塊302,PTS_trans_ctrl模塊303,與PCM_counter模塊304組成。
由PCR_analysis模塊301,PTS_counter模塊302組合產生實時的與視頻同步的PTS值;PTS_trans_ctrl模塊303,與PCM_counter模塊304組合將實時的PTS值寫入各通道對應的PTS寄存器。
該PTS值與視頻顯示實時同步的屬性是采用本地PTS計數(shù)逼近的方法產生,包括以下步驟:實時提取視頻PCR;本地計數(shù)器PTS_counter在本地時鐘下進行計數(shù),計數(shù)初始值為首次提取的視頻PCR值;每當視頻PCR更新,比較PTS_counter值與視頻PCR值之間的差值;設置一個差值門限,PTS_counter與視頻PCR差值大于差值門限,則調整PTS_counter值;PTS_counter與視頻PCR差值連續(xù)超過差值門限值預設次數(shù)之后,則將PTS_counter值置為視頻PCR值,將PTS_counter值作為與視頻同步的PTS值。
請參見圖6,具體的,包括:
步驟600:PCR_analysis模塊301實時提取視頻編碼器傳來的PCR信息,PCR值的PCR_base與PCR_ext值。
步驟601:PTS_counter模塊302用于產生實時的PTS值,該PTS值在本地27Mhz時鐘的有效沿計數(shù)。
PTS_counter模塊302模塊包含PTS_base與PTS_ext兩個計數(shù)器,其中PTS_ext對本地27Mhz時鐘計數(shù),計數(shù)區(qū)間0到299.當PTS_ext計數(shù)滿300個27Mhz時鐘周期PTS_base值計數(shù)加1。
PTS_base與PTS_ext的計數(shù)初始值分別為為第一次從PCR_analysis模塊301獲取的PCR_base值與PCR_ext。
步驟602:當PCR_analysis模塊301獲取到新的視頻PCR_base時,計算PCR_base與PTS_base差值DIF_PTS即DIF_PTS=PCR_base-PTS_base,將DIF_PTS與預設閥值進行比較。
計數(shù)器correct_cnt用于統(tǒng)計DIF_PTS超過預設閥值的次數(shù)。
步驟603:若DIF_PTS小于預設閥值,則PTS_counter模塊302的PTS_base與PTS_ext不進行校正,將PTS_base作為實時的與視頻同步的PTS值輸出。并且計數(shù)器correct_cnt歸零。
步驟604:若DIF_PTS大于預設閥值,判斷correct_cnt是否達到預設最大值。
步驟605:若DIF_PTS大于預設閥值,且correct_cnt未達到預設最大值則將PTS_base計數(shù)器值置為PTS_base+DIF_PTS/2,并且correct_cnt計數(shù)加1。
步驟606:若correct_cnt達到預設最大值,則認為出現(xiàn)異常,調整PTS_base值將不起作用,則將本地PTS_base與PTS_ext計數(shù)器置為PCR_base與PCR_ext,并且correct_cnt歸零。
通過上述步驟得到的PTS值則具備與視頻顯示實時同步的屬性,此外,需要產生與各個通道PCM幀對應的PTS值,具體步驟如下:
每個通道對應存在一個PCM_counter計數(shù)器304。PCM_counter計數(shù)器304對圖1所述接收模塊101接收的PCM數(shù)據個數(shù)進行計數(shù),計數(shù)最大值為PCM幀的長度值。當PCM_counter計數(shù)值等于1,代表此時刻為PCM幀第一個PCM數(shù)據出現(xiàn)的時刻。每當某通道i對應的PCM_counter=1,則產生請求信號輸出給PTS_trans_ctrl模塊303,PTS_trans_ctrl模塊303接收到通道i的請求信號立即鎖存此時的通道i對應的PTS_counter的PTS值,并寫入到對應通道的PTS寄存器202。PTS_trans_ctrl模塊303具有并行處理能力,即當多個通道的PCM_counter同時發(fā)出請求時,將鎖存此時PTS_counter的PTS值,并行寫入各對應通道的PTS寄存器202。
請參見圖2,由于PCM幀交互區(qū)每個通道區(qū)間分為乒乓兩個子區(qū)間,兩個子區(qū)間各存放一個PCM幀。所以對應的PTS寄存器,也是每個通道分配兩個寄存器與PCM幀對應。
圖6所示是在編碼過程中音頻幀與PTS值對應關系示意圖。具體地,保持音頻幀(PCM幀,ES幀,PES幀)與PTS的關系,直到PTS值與PES幀對應。以下是產生PES幀以及其對應的PTS的步驟:
請參見圖5,首先產生ES幀以及其對應的PTS,包括:
通道i的音頻幀PCM_frame_1幀503經過嵌入式處理器進行音頻編碼之后,生成ES_frame_1幀504;PTS_1值505對應于PCM_frame_1幀503則同樣的PTS_1值505對應于編碼之后的ES_frame_1幀504。具體實現(xiàn)如下:
如圖2所示DDR內PCM幀交互區(qū)201的PCM幀與PTS寄存器202的PTS值具有一一對應關系,即PTS值為PCM幀第一個PCM數(shù)據在編碼系統(tǒng)時鐘下的時間戳。嵌入式系統(tǒng)取出PCM幀交互區(qū)201中通道i的PCM幀進行編碼后,放入如圖4所示的ES幀交互區(qū)401。同時將與通道i的PCM幀對的PTS值放入如圖4中與該PCM幀編碼后ES幀對應的PTS寄存器402中。ES幀交互區(qū)和對應的PTS寄存器采用先進先出的讀寫方式。
通過上述實現(xiàn)方法,編碼后PTS值與ES幀的對應關系與編碼前PTS值與PCM幀的對應關系保持一致。
產生ES幀以及其對應的PTS后,其次產生PES幀以及其對應的PTS,其過程包括:
FPGA內部PES封裝模塊完成音頻數(shù)據ES到PES的格式轉換,并將PTS值插入PES幀頭內。協(xié)議規(guī)定PES包可封裝任意數(shù)量的ES包。請參見圖5,第i通道PES幀所示,設一個PES幀封裝N個ES幀,則將PES幀封裝的第一個ES幀ES_frame_1幀503對應的PTS值PTS_1值505作為第i通道PES幀的PTS值,該PTS值為PES幀的第一個ES幀的顯示時間,也是PES的顯示時間,將該PTS值插入PES包頭中。請參見圖6,在PES幀內第2到第N個ES幀對應的PTS值從寄存器丟棄506。
如圖6,F(xiàn)PGA內部TS封裝模塊按照協(xié)議要求將PES幀分解后插入TS幀的負載區(qū)域中。在輸出端將TS勻速輸出,因為數(shù)字音頻采樣率固定,所以原始音頻輸入是勻速輸入,即PCM幀率恒定,設PCM幀率為rate_pcm,則按一個PCM幀編碼輸出一個ES幀,N個ES幀對應一個PES幀,一個PES幀封裝成M個TS包計算出TS包率為rate_ts=rate_pcm*M/N。
本實施例提供的基于FPGA嵌入式系統(tǒng)的多路音頻軟編碼機制采用嵌入式FPGA芯片作為實現(xiàn)平臺,能靈活的設置音頻編碼路數(shù)與編碼算法,同時保證音視頻同步。FPGA器件具有豐富的邏輯資源,可實現(xiàn)多路音頻編碼,其路數(shù)遠大于普通音頻編碼芯片的音頻編碼路數(shù),節(jié)省了音頻編碼芯片的采購成本;進一步地,F(xiàn)PGA芯片可以完成編碼后音視頻流的處理,因此對于多媒體系統(tǒng)搭建具有極小的成本。FPGA器件具有比普通編碼芯片更多的外設接口,提供充分的調試手段;基于FPGA高速處理能力,可以并行的接收多路原始音頻數(shù)據,在各路音頻幀的起始產生與視頻同步的PTS值,在編碼的過程中保持PTS與音頻幀的對應關系,具有較好的音視頻同步指標。
以上所述的實施方式,并不構成對該技術方案保護范圍的限定。任何在上述實施方式的精神和原則之內所作的修改、等同替換和改進等,均應包含在該技術方案的保護范圍之內。