專利名稱:一種碼流數(shù)據(jù)的讀取移除方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于解碼處理領(lǐng)域,尤其涉及一種碼流數(shù)據(jù)的讀取移除方法和裝置。
背景技術(shù):
在解碼單元對(duì)內(nèi)存中的碼流數(shù)據(jù)進(jìn)行解碼處理時(shí),由于受解碼單元解碼需要的碼流寬度的限制,一般需要通過直接存儲(chǔ)訪問(Direct Memory Access,DMA)讀取單元從內(nèi)存中讀取預(yù)設(shè)長(zhǎng)度的碼流數(shù)據(jù),并將讀取的碼流數(shù)據(jù)暫存在存儲(chǔ)單元中,解碼單元對(duì)存儲(chǔ)單元中的碼流數(shù)據(jù)進(jìn)行解碼處理,并在解碼處理完畢后,輸出碼流移除信號(hào)和碼流移除長(zhǎng)度, 根據(jù)碼流移除信號(hào)和碼流移除長(zhǎng)度移除存儲(chǔ)單元中的碼流數(shù)據(jù),以便可以繼續(xù)將內(nèi)存中的碼流數(shù)據(jù)寫入存儲(chǔ)單元,為解碼單元做碼流數(shù)據(jù)準(zhǔn)備,解碼單元的一次解碼過程可能包含多次解碼處理?,F(xiàn)有技術(shù)一般通過存儲(chǔ)移位單元根據(jù)碼流移除信號(hào)和碼流移除長(zhǎng)度移除存儲(chǔ)單元中的碼流數(shù)據(jù),請(qǐng)參閱圖1,為現(xiàn)有技術(shù)提供的碼流數(shù)據(jù)讀取移除方案的硬件結(jié)構(gòu)框圖。 其中存儲(chǔ)移位單元主要包括移位器、存儲(chǔ)單元和碼流結(jié)尾比特位序號(hào)計(jì)數(shù)器。其中碼流結(jié)尾比特位序號(hào)計(jì)數(shù)器計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元的結(jié)尾位置,DMA讀取單元在傳遞數(shù)據(jù)時(shí),從碼流結(jié)尾比特位序號(hào)后面的位置開始將碼流數(shù)據(jù)寫入存儲(chǔ)單元中。移位器將存儲(chǔ)單元中的碼流數(shù)據(jù)左移(8*start_bias+start_offset)位(時(shí)鐘觸發(fā)沿時(shí)刻dma_done和firSt_read都為高情況)或length位(時(shí)鐘觸發(fā)沿時(shí)刻skip為高情況)。其中start_bias表示碼流起始偏移字節(jié)數(shù)。start^ffset表示解碼前碼流在起始字節(jié)內(nèi)部的比特偏移量。dma_done表示DMA完成一次讀碼流操作,高有效。firSt_read 表示當(dāng)前DMA讀碼流操作是否為本次解碼的第一次DMA讀碼流操作,高電平表示是,否則表示不是。length表示碼流移除長(zhǎng)度?,F(xiàn)有技術(shù)由于采用移位器電路實(shí)現(xiàn)存儲(chǔ)單元中的碼流數(shù)據(jù)移位操作,從而導(dǎo)致電平翻轉(zhuǎn)比較多,如當(dāng)存儲(chǔ)單元的大小為M比特時(shí),采用移位器電路實(shí)現(xiàn)存儲(chǔ)單元中的碼流數(shù)據(jù)移位操作時(shí),可能有M比特位發(fā)生電平翻轉(zhuǎn),從而極大的增加了硬件功耗。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種碼流數(shù)據(jù)的讀取移除方法,旨在解決現(xiàn)有技術(shù)采用移位器電路移除碼流數(shù)據(jù)時(shí)導(dǎo)致的發(fā)生電平翻轉(zhuǎn)的比特位數(shù)多、增加硬件功耗的問題。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種碼流數(shù)據(jù)的讀取移除方法,所述方法包括下述步驟計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置bytejndex和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量offset ;多路選擇器根據(jù)所述bytejndex和offset,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù);
將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理,并在解碼處理完畢后,輸出碼流移除信號(hào)Skip信號(hào)和碼流移除長(zhǎng)度length信號(hào),以便根據(jù)所述skip信號(hào)和length信號(hào)更新所述byte_index和offset。本發(fā)明實(shí)施例的另一目的在于提供一種碼流數(shù)據(jù)的讀取移除裝置,所述裝置包括存儲(chǔ)單元,用于存儲(chǔ)DMA讀取單元從內(nèi)存中讀取的碼流數(shù)據(jù),為解碼單元解碼準(zhǔn)備碼流數(shù)據(jù);起始字節(jié)位置計(jì)算單元,用于計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置byte_ index ;偏移量計(jì)算單元,用于計(jì)算碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量offset ;多路選擇器,用于根據(jù)所述起始字節(jié)位置計(jì)算單元計(jì)算得到的bytejndex以及偏移量計(jì)算單元計(jì)算得到的offset,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),并將選擇的碼流數(shù)據(jù)輸出至解碼單元。在本發(fā)明實(shí)施例中,通過采用bytejndex和offset來對(duì)存儲(chǔ)單元中的碼流數(shù)據(jù)進(jìn)行有效尋址,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),并將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理,相對(duì)于原有技術(shù)方案,本發(fā)明不對(duì)存儲(chǔ)單元中的數(shù)據(jù)進(jìn)行移位操作,因此,可以極大的減少可能發(fā)生電平翻轉(zhuǎn)的比特位數(shù),極大的降低了硬件功耗。
圖1是現(xiàn)有技術(shù)提供的碼流數(shù)據(jù)讀取移除方案的硬件結(jié)構(gòu)框圖;圖2是本發(fā)明第一實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程圖;圖3是本發(fā)明第二實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程圖;圖4是本發(fā)明第三實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程圖;圖5是本發(fā)明第四實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程圖;圖6是本發(fā)明實(shí)施例提供的碼流數(shù)據(jù)的讀取移除裝置的結(jié)構(gòu)框圖;圖7是本發(fā)明另一實(shí)施例提供的碼流數(shù)據(jù)的讀取移除裝置的結(jié)構(gòu)框圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。在本發(fā)明實(shí)施例中,先計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,多路選擇器根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理,本發(fā)明實(shí)施根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量對(duì)存儲(chǔ)單元中存儲(chǔ)的碼流數(shù)據(jù)進(jìn)行尋址,選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),從而減少了電平翻轉(zhuǎn)的比特?cái)?shù),降低了硬件功耗。
為了便于理解和說明,在此列出本發(fā)明實(shí)施例中使用到的各術(shù)語(yǔ)的含義。start 表示解碼開始信號(hào),高有效;start_addr 表示碼流起始地址;start_addr表示 start_addr 最低位;start_addr[l:0]表示 start_addr 低兩位;start_offset 表示解碼前碼流在起始字節(jié)內(nèi)部的比特偏移,在整個(gè)解碼過程中, 該值不會(huì)發(fā)生改變;start_bias 表示碼流起始偏移字節(jié)數(shù)。由于DMA可以按照半字對(duì)齊方式或者字對(duì)齊方式傳遞碼流數(shù)據(jù),而start_addr是字節(jié)對(duì)齊方式,因此,會(huì)造成碼流字節(jié)的偏移,所以,當(dāng)DMA按照半字對(duì)齊方式傳遞數(shù)據(jù)時(shí),start_bias = start_addr
;當(dāng)DMA按照字對(duì)齊方式傳遞數(shù)據(jù)時(shí),start_bias = start_addr [1 0]。skip 表示碼流移除信號(hào),高有效;length:表示碼流移除長(zhǎng)度,其大于或者等于0,小于或者等于N,其中N為解碼單元解碼所需的碼流數(shù)據(jù)寬度。dma_done 表示DMA完成一次讀碼流操作,高有效;first_read 表示當(dāng)前DMA讀碼流操作是否為本次解碼的第一次DMA讀碼流操作, 高電平表示是,否則表示不是。在時(shí)鐘觸發(fā)沿時(shí)刻,如果start信號(hào)為高,則first_read更新為1 ;如果dma_done信號(hào)為高,則first_read更新為0。data_buffer 表示存儲(chǔ)單元;存儲(chǔ)單元的空閑區(qū)存儲(chǔ)單元共2*CNT字節(jié)大小,分為高CNT部分(高CNT字節(jié)) 和低CNT部分(低CNT字節(jié)),當(dāng)開始解碼時(shí)高CNT部分為空閑區(qū),之后bytejndex確定的起始字節(jié)所在的部分不是空閑區(qū),另外一個(gè)部分為空閑區(qū);byte_index 表示碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置;byte_index[x-l:2]byte_index;byte_index[l 0]表示 byte_index 低兩位的值;offset 表示碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,其取值范圍為0 7,因?yàn)橐粋€(gè)字節(jié)包括8比特位,因此碼流數(shù)據(jù)在字節(jié)內(nèi)部的比特偏移的最小偏移量為0,最大偏移量為7,該offset值在解碼過程中將發(fā)生改變;new_addr 表示解碼后的新的碼流地址;offset_and_length 表示 offset 與 length 之禾口 ;offset_and_length [2 0]表示 offset_and_length 的低 3 位值;byte_shift 表示 ofTset_and_length 右移 3 位后的值,艮byte_shift = offset_ and_length >> 3 ;函數(shù)mint (χ)若 χ 為整數(shù)則 mint (χ) =χ,否則 mint (χ) = [x]+l,其中[]表示
取整操作。max_index 表示存儲(chǔ)單元中包含的字節(jié)數(shù);M 表示存儲(chǔ)單元中包含的比特?cái)?shù),M = 8*max_index ;CNT:表示DMA每次傳送的字節(jié)數(shù),按照DMA每次傳送都是寫一半的存儲(chǔ)單元空間, 因此,max_index = 2*CNT ;
N 表示解碼單元解碼需要的碼流數(shù)據(jù)寬度;A 表示存儲(chǔ)單元中的可用碼流字節(jié)數(shù);AO 表示為保證解碼正確,存儲(chǔ)單元中所存放碼流的最小字節(jié)數(shù),當(dāng)A小于AO時(shí), 標(biāo)志存儲(chǔ)單元中的碼流不可用。Al 表示存儲(chǔ)單元一半空間所包含的字節(jié)數(shù),需設(shè)定Al大于A0,當(dāng)A小于或者等于Al時(shí),DMA讀碼流單元啟動(dòng),從內(nèi)存中讀取碼流數(shù)據(jù),并把碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū)中。為了保證第一次DMA讀碼流完成后碼流數(shù)據(jù)可用,在DMA按照半字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),CNT-I彡AO ;在DMA按照字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),CNT-3彡AO。由于offset最大為7,因此,存儲(chǔ)單元中至少包含N+7比特位碼流數(shù)據(jù),才表示存儲(chǔ)單元中的碼流數(shù)據(jù)可用,所以AO = [((N+7)+7)/8],其中[]表示取整操作。按照存儲(chǔ)單元中碼流數(shù)據(jù)的數(shù)量小于或者等于存儲(chǔ)單元的存儲(chǔ)空間的一半時(shí)即需從內(nèi)存中讀取碼流數(shù)據(jù)的原則,需要Al = CNT。綜上所述,可以得到當(dāng)DMA按照半字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),[ ((N+7) +7) /8] = AO 彡 CNT-I ;......(1)當(dāng)DMA按照字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),[ ((N+7) +7) /8] = AO 彡 CNT-3 ;......(2)AO < Al = CNT ;......(3)實(shí)施例一圖2示出了本發(fā)明第一實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程,詳述如下在步驟SlOl中,計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量。其中碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置(bytejndex)的具體計(jì)算過程如下當(dāng)解碼開始信號(hào)(start)為有效時(shí),byte_index = start_bias ;在本發(fā)明實(shí)施例中,當(dāng)start信號(hào)為高電平時(shí)視為解碼開始信號(hào)有效,如當(dāng)啟動(dòng)解碼時(shí),start信號(hào)保持一個(gè)時(shí)鐘周期的高電平,表示解碼開始信號(hào)保持一個(gè)時(shí)鐘周期有效。當(dāng)DMA按照半字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),start_bias = start_addr
;當(dāng)DMA 按照字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),start_bias = start_addr [1 0]。。當(dāng)碼流移除信號(hào)(skip)有效時(shí),先判斷byte_index+byte_shift-max_index 彡 0 是否成立,如果成立,貝Ij byte—index = byte_index+byte_shift-max_index,否貝Ij byte— index = byte_index+byte_shift。其中碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量的具體計(jì)算過程如下當(dāng)解碼開始信號(hào)為有效時(shí),offset = start_offset ;當(dāng)碼流移除信號(hào)(skip)有效時(shí),offset= offset_and_length[20]。在步驟S102中,多路選擇器根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。其中多路選擇器根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)的具體實(shí)現(xiàn)步驟可以采用現(xiàn)有技術(shù)提供的任意一種方式實(shí)現(xiàn),本發(fā)明實(shí)施例提供了如下實(shí)現(xiàn)方法a、根據(jù)bytejndex右移兩位后的值(即為bytejndex [x_l 2])確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,第一選擇電路從該起始字的最高位開始按照從高到低的順序選擇 N+31比特位的碼流數(shù)據(jù)傳遞給第二選擇電路。其中χ表示bytejndex位數(shù)。由于bytejndex是表示碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置的,而存儲(chǔ)單元中的每一個(gè)字節(jié)都有可能成為碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié),因此,該bytejndex必須可以標(biāo)識(shí)存儲(chǔ)單元中的每個(gè)字節(jié),所以bytejndex位數(shù)與存儲(chǔ)單元的總內(nèi)存空間有關(guān),即存儲(chǔ)單元為M比特大小,則bytejndex為mint (log/8)位。 如當(dāng)存儲(chǔ)單元的總大小為512比特,即64字節(jié)時(shí),該byte_index位數(shù)為6個(gè)比特,即χ = 6 ;當(dāng)存儲(chǔ)單元的總大小為1024比特,即128字節(jié)時(shí),該bytejndex位數(shù)為7個(gè)比特,即χ =7,依次類推。b、根據(jù)bytejndex的低兩位的值(即為bytejndex [1 0])確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié),第二選擇電路從該起始字節(jié)的最高位開始按照從高到低的順序選擇 N+7比特位的碼流數(shù)據(jù)傳遞給第三選擇電路。其中根據(jù)bytejndex的右移兩位后的值(即為bytejndex [x_l 2])確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,以及根據(jù)bytejndex的低兩位的值(即為bytejndex[1 0]) 確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié)的原理如下由于存儲(chǔ)單元中包含有2*CNT個(gè)字節(jié),即包含mint(CNT/^)個(gè)字,把字從高到低編號(hào)為 0 mint (CNT/2)-1。byte_index [χ-1 2]確定的起始字為 data_buffer 中編號(hào)為byte_indeX[X-l:2]的字;每個(gè)字中包括4個(gè)字節(jié),從高到低編號(hào)為0 3,byte_ index[1:0]確定的起始字節(jié)為起始字中編號(hào)為bytejndex[1 0]的字節(jié)。C、根據(jù)offset確定碼流數(shù)據(jù)在上述起始字節(jié)中的偏移位數(shù),第三選擇電路將從第二選擇電路傳遞來的N+7比特位的碼流數(shù)據(jù)的最高位起,由高到低順序,從第 (offset+Ι)位開始選定N比特位碼流數(shù)據(jù)作為解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。在本發(fā)明實(shí)施例中,在根據(jù)bytejndex的右移兩位后的值(即為byte_ index [χ-1 2])確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字時(shí),由于每個(gè)字包括4個(gè)字節(jié),所以可能存在最多3字節(jié)(即M比特位)的數(shù)據(jù)偏移,在根據(jù)bytejndex的低兩位的值(即為 byte_index[l:0])確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié)時(shí),由于每個(gè)字節(jié)包括8比特位,所以可能存在最多7比特的數(shù)據(jù)偏移,所以為了保證根據(jù)上述步驟可以選擇出解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),在第一選擇電路從該起始字的最高位開始按照從高到低的順序選擇碼流數(shù)據(jù)時(shí),需要多選擇31位(即M+7 = 31位)碼流數(shù)據(jù),在第二選擇電路從該起始字節(jié)的最高位開始按照從高到低的順序選擇碼流數(shù)據(jù)時(shí),需要多選擇7位碼流數(shù)據(jù)。在步驟S103中,將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理,并在解碼處理完畢后,輸出skip信號(hào)和length信號(hào)。以便根據(jù)輸出的skip信號(hào)和length信號(hào)更新碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,再根據(jù)更新后的碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量, 從存儲(chǔ)單元中選擇下一次解碼所需的碼流數(shù)據(jù),循環(huán)執(zhí)行,直到解碼結(jié)束。在本發(fā)明實(shí)施例中,根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量對(duì)存儲(chǔ)單元中存儲(chǔ)的碼流數(shù)據(jù)進(jìn)行尋址,選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),從而避免了采用移位器移除存儲(chǔ)單元中的碼流數(shù)據(jù),顯著減少了電平翻轉(zhuǎn)的比特?cái)?shù),降低了硬件功耗。實(shí)施例二 由于當(dāng)存儲(chǔ)單元中的可用碼流字節(jié)數(shù)小于AO時(shí),則存儲(chǔ)單元的碼流數(shù)據(jù)被標(biāo)記為不可用,為了解碼單元可以正確的進(jìn)行解碼操作,圖3示出了本發(fā)明第二實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程,圖3所示的碼流數(shù)據(jù)的讀取移除方法中的步驟S201 至S203與圖2所示的碼流數(shù)據(jù)的讀取移除方法中的步驟SlOl至S103相同,在此不再贅述, 其不同之處僅在于,圖3所示的碼流數(shù)據(jù)的讀取移除方法還包括下述步驟在步驟S204中,計(jì)算存儲(chǔ)單元中可用碼流的字節(jié)數(shù)。其具體計(jì)算過程如下所述, 當(dāng)然還可以采用現(xiàn)有技術(shù)提供其他計(jì)算方法計(jì)算,在此不再一一舉例說明當(dāng)start信號(hào)為高時(shí),A = O;當(dāng)dma_d0ne信號(hào)為高,skip信號(hào)為低時(shí),判斷當(dāng)前DMA讀碼流操作是否為本次解碼的第一次DMA讀碼流操作,即判斷f irstjead為高還是低,如果為高,即當(dāng)前DMA讀碼流操作為本次解碼的第一次DMA讀碼流操作,則A = CNT-start_bias,如果為低,即當(dāng)前DMA 讀碼流操作不是本次解碼的第一次DMA讀碼流操作,則A = A+CNT ;當(dāng)dma_done 信號(hào)為低,skip 信號(hào)為高時(shí),則 A = A_byte_shift ;當(dāng) dma_done 信號(hào)為高,skip 信號(hào)為高時(shí),則 A = A+CNT_byte_shift。在步驟S205中,根據(jù)存儲(chǔ)單元中可用碼流的字節(jié)數(shù)標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)是否可用。即判斷A < AO是否成立,如成立,則標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)不可用,否則標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)可用??梢岳斫?,上述步驟S204和步驟S205可以在圖3所示的步驟S201、S202、S203之前或者之后執(zhí)行。由于當(dāng)存儲(chǔ)單元中的可用碼流字節(jié)數(shù)A小于或者等于Al時(shí),表示存儲(chǔ)單元中至少有一半的空間是空閑的,為了不中斷此次解碼操作,圖4示出了本發(fā)明第三實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程,圖4所示的碼流數(shù)據(jù)的讀取移除方法中的步驟S301 至S304與圖3所示的碼流數(shù)據(jù)的讀取移除方法中的步驟S201至S204相同,在此不再贅述, 其不同之處僅在于,圖4所示的碼流數(shù)據(jù)的讀取移除方法還包括下述步驟在步驟S305中,判斷存儲(chǔ)單元中可用碼流的字節(jié)是否小于或者等于Al,并在存儲(chǔ)單元中可用碼流的字節(jié)數(shù)小于或者等于Al時(shí),啟動(dòng)DMA讀取單元。DMA讀取單元繼續(xù)從內(nèi)存中讀取碼流數(shù)據(jù),并將讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū)??梢岳斫?,上述步驟S304、S305可以在圖4所示的步驟S301、S302、S303之前或者之后執(zhí)行。在解碼完成后,為了使其他單元獲得解碼完成后的碼流地址,圖5示出了本發(fā)明第四實(shí)施例提供的碼流數(shù)據(jù)的讀取移除方法的實(shí)現(xiàn)流程,圖5所示的碼流數(shù)據(jù)的讀取移除方法中的步驟S401至S403與圖2所示的碼流數(shù)據(jù)的讀取移除方法中的步驟SlOl至S103 相同,在此不再贅述,其不同之處僅在于,圖5所示的碼流數(shù)據(jù)的讀取移除方法還包括下述步驟在步驟S404中,計(jì)算解碼后的新碼流地址,并在整個(gè)解碼過程結(jié)束后,將解碼后的新碼流地址傳遞至上層單元。其中解碼后的新碼流地址的具體計(jì)算步驟如下當(dāng)解碼開始信號(hào)為有效,即start信號(hào)為高時(shí),解碼后的新碼流地址neW_addr = start_addr ;當(dāng)碼流移除信號(hào)為有效,即skip信號(hào)為高時(shí),先判斷offset_and_length是否大于7,如果是,解碼后的新碼流地址neW_addr = neW_addr+byte_Shift,否則解碼后的新碼流地址new_addr保持不變。在本發(fā)明實(shí)施例中,在解碼單元對(duì)選擇的碼流數(shù)據(jù)解碼處理完畢后,會(huì)輸出skip 信號(hào)和length信號(hào),此時(shí),原有的解碼后的新碼流地址可能被更新,因此,在整個(gè)解碼過程完成后,解碼后的新碼流地址可以保持最新。在本發(fā)明另一實(shí)施例中,該方法還包括下述步驟在解碼結(jié)束后,將offset值傳遞至上層單元,以備上層單元使用。圖6示出了本發(fā)明實(shí)施例提供的碼流數(shù)據(jù)的移除裝置的結(jié)構(gòu),為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。該碼流數(shù)據(jù)的移除裝置可以是內(nèi)置于解碼器中的軟件單元、硬件單元或者軟硬件相結(jié)合的單元或者作為獨(dú)立的掛件集成到解碼器或者解碼器的應(yīng)用系統(tǒng)中。其中存儲(chǔ)單元1存儲(chǔ)DMA讀取單元從內(nèi)存中讀取的碼流數(shù)據(jù),為解碼單元解碼準(zhǔn)備碼流數(shù)據(jù)。起始字節(jié)位置計(jì)算單元2計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置。其具體計(jì)算過程如下當(dāng)解碼開始信號(hào)(start)為有效時(shí),byte_index = start_bias ;在本發(fā)明實(shí)施例中,當(dāng)start信號(hào)為高電平時(shí)視為解碼開始信號(hào)有效,如當(dāng)啟動(dòng)解碼時(shí),start信號(hào)保持一個(gè)時(shí)鐘周期的高電平,表示解碼開始信號(hào)保持一個(gè)時(shí)鐘周期有效。當(dāng)DMA按照半字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),start_bias = start_addr
;當(dāng)DMA 按照字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),start_bias = start_addr [1 0] 0當(dāng)碼流移除信號(hào)(skip)有效時(shí),先判斷byte_index+byte_shift-max_index 彡 0 是否成立,如果成立,貝Ij byte—index = byte_index+byte_shift-max_index,否貝Ij byte— index = byte_index+byte_shift。偏移量計(jì)算單元3計(jì)算碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,并在解碼結(jié)束時(shí)把該偏移量返回給上層單元。其具體計(jì)算過程如下當(dāng)解碼開始信號(hào)為有效時(shí),offset = start_offset ;當(dāng)碼流移除信號(hào)(skip)有效時(shí),offset= offset_and_length[20]。多路選擇器4根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),并將選擇的碼流數(shù)據(jù)輸出至解碼單元。該多路選擇器4包括第一選擇電路41、第二選擇電路 42以及第三選擇電路43。其中
第一選擇電路41根據(jù)bytejndex右移兩位后的值(即為bytejndex [x_l 2]) 確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,并從該起始字的最高位開始按照從高到低的順序選擇N+31比特位的碼流數(shù)據(jù)傳遞給第二選擇電路42。其中χ表示bytejndex位數(shù)。由于bytejndex是表示碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置的,而存儲(chǔ)單元中的每一個(gè)字節(jié)都有可能成為碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié),因此,該bytejndex必須可以標(biāo)識(shí)存儲(chǔ)單元中的每個(gè)字節(jié),所以bytejndex位數(shù)與存儲(chǔ)單元的總內(nèi)存空間有關(guān),即存儲(chǔ)單元為M比特大小,則bytejndex為mint (log/8)位。 如當(dāng)存儲(chǔ)單元的總大小為512比特,即64字節(jié)時(shí),該byte_index位數(shù)為6個(gè)比特,即χ = 6 ;當(dāng)存儲(chǔ)單元的總大小為1024比特,即128字節(jié)時(shí),該byte_index位數(shù)為7個(gè)比特,即χ =7,依次類推。第二選擇電路42根據(jù)bytejndex的低兩位的值(即為byte_indeX[l :0])確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié),并從該起始字節(jié)的最高位開始按照從高到低的順序選擇N+7比特位的碼流數(shù)據(jù)傳遞給第三選擇電路43。其中根據(jù)bytejndex的除低兩位以外的其他位的值(即為bytejndex [x_l 2]) 確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,以及根據(jù)bytejndex的低兩位的值(即為byte_ index[1:0])確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié)的原理如上所述,在此不再贅述。第三選擇電路43根據(jù)offset確定碼流數(shù)據(jù)在上述起始字節(jié)中的偏移位數(shù), 并從第二選擇電路傳遞來的N+7比特位的碼流數(shù)據(jù)的最高位起,由高到低順序,從第 (offset+Ι)位開始選定N比特位碼流數(shù)據(jù)作為解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。在本發(fā)明實(shí)施例中,解碼單元對(duì)碼流數(shù)據(jù)解碼處理完畢后,輸出skip信號(hào)和 length信號(hào),根據(jù)skip信號(hào)和length信號(hào)更新碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,再根據(jù)碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,從存儲(chǔ)單元1中選擇下一次解碼所需的碼流數(shù)據(jù),循環(huán)執(zhí)行,直到解碼結(jié)束。由于當(dāng)存儲(chǔ)單元中的可用碼流字節(jié)數(shù)小于AO時(shí),則存儲(chǔ)單元的碼流數(shù)據(jù)被標(biāo)記為不可用,為了解碼單元可以正確的進(jìn)行解碼操作,在本發(fā)明另一實(shí)施例中,該裝置還包括可用碼流字節(jié)數(shù)計(jì)算單元5和碼流可用標(biāo)記單元6。其中可用碼流字節(jié)數(shù)計(jì)算單元5計(jì)算存儲(chǔ)單元中可用碼流的字節(jié)數(shù)。其具體計(jì)算過程如下當(dāng)start信號(hào)為高時(shí),A = 0 ;當(dāng)dma_d0ne信號(hào)為高,skip信號(hào)為低時(shí),判斷當(dāng)前DMA讀碼流操作是否為本次解碼的第一次DMA讀碼流操作,即判斷f irstjead為高還是低,如果為高,即當(dāng)前DMA讀碼流操作為本次解碼的第一次DMA讀碼流操作,則A = CNT-start_bias,如果為低,即當(dāng)前DMA 讀碼流操作不是本次解碼的第一次DMA讀碼流操作,則A = A+CNT ;當(dāng)dma_done 信號(hào)為低,skip 信號(hào)為高時(shí),則 A = A_byte_shift ;當(dāng) dma_done 信號(hào)為高,skip 信號(hào)為高時(shí),則 A = A+CNT_byte_shift。碼流可用標(biāo)記單元6根據(jù)存儲(chǔ)單元中可用碼流的字節(jié)數(shù)標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)是否可用,當(dāng)存儲(chǔ)單元中的可用碼流的字節(jié)數(shù)小于AO時(shí),標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)不可用,否則標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)可用。由于當(dāng)存儲(chǔ)單元中的可用碼流字節(jié)數(shù)A小于或者等于Al時(shí),表示存儲(chǔ)單元中至少有一半的空間是空閑的,為了不中斷此次解碼操作,在本發(fā)明另一實(shí)施例中,該裝置還包括可用碼流字節(jié)數(shù)判斷單元7。該可用碼流字節(jié)數(shù)判斷單元7判斷存儲(chǔ)單元中可用碼流的字節(jié)是否小于或者等于Al,即判斷A < Al是否成立,并在存儲(chǔ)單元中可用碼流的字節(jié)數(shù)小于或者等于Al時(shí),啟動(dòng)DMA讀取單元,以便繼續(xù)從內(nèi)存中讀取碼流數(shù)據(jù),并將讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元1的空閑區(qū)。在解碼完成后,為了使其他單元獲得解碼完成后的碼流地址,在本發(fā)明另一實(shí)施例中,該裝置還包括碼流新地址計(jì)算單元8。該碼流新地址計(jì)算單元8計(jì)算解碼后的新碼流地址,并在解碼結(jié)束后,將解碼后的新碼流地址傳遞至上層單元。其中解碼后的新碼流地址的具體計(jì)算步驟如下當(dāng)解碼開始信號(hào)為有效時(shí),解碼后的新碼流地址neW_addr = start_addr ;當(dāng)碼流移除信號(hào)為有效時(shí),先判斷0ffSet_and_length是否大于7,如果是,解碼后的新碼流地址 new_addr = new_addr+byte_shift,否則解碼后的新碼流地址new_addr保持不變。在本發(fā)明實(shí)施例中,在解碼單元對(duì)選擇的碼流數(shù)據(jù)解碼處理完畢后,會(huì)輸出skip 信號(hào)和length信號(hào),此時(shí),原有的解碼后的新碼流地址可能被更新。圖7示出了本發(fā)明另一實(shí)施例提供的碼流數(shù)據(jù)的讀取移除裝置的結(jié)構(gòu),為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。其中DMA讀取單元從內(nèi)存中讀取碼流數(shù)據(jù)并將讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū)中。當(dāng)碼流數(shù)據(jù)的移除裝置還包括可用碼流字節(jié)數(shù)判斷單元時(shí),該DMA讀取單元還與可用碼流字節(jié)數(shù)判斷單元連接,在DMA讀取單元完成一次讀碼流操作時(shí),向可用碼流字節(jié)數(shù)判斷單元輸出有效的dma_d0ne信號(hào),并在可用碼流字節(jié)數(shù)判斷單元判定存儲(chǔ)單元中碼流數(shù)據(jù)的可用字節(jié)數(shù)小于或者等于Al時(shí)啟動(dòng)。解碼單元對(duì)多路選擇器輸出的碼流數(shù)據(jù)進(jìn)行解碼處理,并在解碼處理完畢后,返回碼流移除信號(hào)和碼流移除長(zhǎng)度。碼流數(shù)據(jù)的移除裝置根據(jù)返回的碼流移除信號(hào)和碼流移除長(zhǎng)度更新碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量,以及解碼后的新碼流地址以及存儲(chǔ)單元中的可用碼流的字節(jié)數(shù)。以下以一個(gè)具體的示例說明本發(fā)明實(shí)施例提供的解碼器的工作原理假設(shè)解碼單元解碼需要的碼流寬度為32比特,即N = 32 ;存儲(chǔ)單元的大小為512 比特,即M = 512,max_index = 64 ;碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置bytejndex共有 mint(lo&512/8) = 6 比特,即 χ = 6 ;由于 max_index = 2*CNT = 64,因此,CNT = 32 ;DMA 數(shù)據(jù)寬度為32比特,即DMA按照字對(duì)齊方式傳遞碼流數(shù)據(jù);由于N = 32,CNT = 32,DMA按照字對(duì)齊方式傳遞碼流數(shù)據(jù),所以根據(jù)式⑵,即[((N+7)+7)/8] =AO彡CNT-3,可以得到 AO = 5,根據(jù)式(3),即AO < Al = CNT,可以得到Al = 32 ;在解碼開始時(shí),可以獲取到碼流起始地址start_addr和解碼前碼流在起始字節(jié)內(nèi)部的比特偏移start_0ffset。啟動(dòng)解碼時(shí),start信號(hào)保持一個(gè)時(shí)鐘周期的高電平。此時(shí)bytejndex = start, bias, offset = start_offset, A = O, new_addr = start_addr。由于 DMA 按照字對(duì)齊方
石馬^ ,@]lt;, byte—index = start—bias = start_addr [1:0]。由于A = 0,A0 = 5,因此A < AO,所以標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)不可用,由于A=0,A1 = 32,因此A < Al,所以啟動(dòng)DMA讀取單元,DMA讀取單元從內(nèi)存中讀取碼流數(shù)據(jù), 并把讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū),在讀取碼流數(shù)據(jù)時(shí),按照每次讀取寫一半存儲(chǔ)單元的原則。當(dāng)DMA讀取單元完成讀碼流操作時(shí),dma_done信號(hào)保持一個(gè)時(shí)鐘周期的高電平, 此時(shí),A = CNT-start_bias = 32_start_addr [1 0],start_addr [1 0]最大值為 3,所以 A 最小值為29,因此此時(shí)滿足A彡A0,所以此時(shí)標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)可用。根據(jù)byte_indeX[X-l:2]確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,第一選擇電路從該起始字的最高位開始按照從高到低的順序選擇N+31比特位的碼流數(shù)據(jù)傳遞給第二選擇電路。由于χ = 6,N = 32,所以,根據(jù)byte_index[5:2]確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,第一選擇電路從該起始字的最高位開始按照從高到低的順序選擇63比特位的碼流數(shù)據(jù)傳遞給第二選擇電路。根據(jù)byte_indeX[l:0]確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié),第二選擇電路從該起始字節(jié)的最高位開始按照從高到低的順序選擇39比特位的碼流數(shù)據(jù)傳遞給第三選擇電路。根據(jù)offset確定碼流數(shù)據(jù)在上述起始字節(jié)中的偏移位數(shù),第三選擇電路從第二選擇電路傳遞來的39比特位的碼流數(shù)據(jù)的最高位起,由高到低順序,從第(offset+Ι)位開始選定32比特位碼流數(shù)據(jù)作為解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。由于此時(shí) offset = start_offset,因此,根據(jù)start_offset確定碼流數(shù)據(jù)在上述起始字節(jié)中的偏移位數(shù),第三選擇電路從第二選擇電路傳遞來的39比特位的碼流數(shù)據(jù)的最高位起,由高到低順序,從第(offset+Ι)位開始選定32比特位碼流數(shù)據(jù)作為解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。解碼單元對(duì)選擇的碼流數(shù)據(jù)進(jìn)行解碼處理,并返回skip信號(hào)和length信號(hào),根據(jù) skip 信號(hào)禾口 length 信號(hào)更新 byte_index、offset、A 以及 new_addr。在更新byte_index時(shí),由于skip信號(hào)有效,因此,先判斷byte_index+byte_ shift-max_index > 0 是否成立,如果成立,貝Ij byte_index = byte_index+byte_ shift_max_index,否則,byte_index = byte_index+byte_shift。在更新offset 時(shí),由于 skip 信號(hào)有效,因此,offset = offset_and_ length[2:0]。在更新A時(shí),由于skip信號(hào)有效,即為高,判斷dma_d0ne信號(hào)是高還是低,如果 dma_done 信號(hào)為高,則 A = A+CNT_byte_shift,如果 dma_done 信號(hào)為低,則 A = A+CNT。在更新new_addr時(shí),由于skip信號(hào)有效,即為高,此時(shí)先判斷offset_and_length > 7 是否成立,如果成立,new_addr = new_addr+byte_shift,否則 new_shift 保持不變。在更新bytejndex、offset、A以及neW_addr后,多路選擇器繼續(xù)根據(jù)更新后的 byte_index和offset從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),并將選擇的碼流數(shù)據(jù)傳送至解碼單元進(jìn)行解碼處理,循環(huán)執(zhí)行,直到解碼結(jié)束,在解碼結(jié)束后,將最后的neW_addr和offset傳遞至上層單元,以供上層單元使用。在上述過程中,當(dāng)遇到A < Al時(shí),則啟動(dòng)DMA讀取單元,DMA讀取單元從內(nèi)存中讀取碼流數(shù)據(jù),并將讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū)中;當(dāng)遇到々< AO時(shí),則標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)不可用。在本發(fā)明實(shí)施例中,通過采用bytejndex和offset來對(duì)存儲(chǔ)單元中的碼流數(shù)據(jù)進(jìn)行有效尋址,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),并將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理。對(duì)于偏移量計(jì)算單元、碼流新地址計(jì)算單元、 可用碼流數(shù)計(jì)算單元等原技術(shù)方法和本發(fā)明都存在的單元,忽略這些單元內(nèi)的電平翻轉(zhuǎn), 只考慮對(duì)存儲(chǔ)單元內(nèi)碼流數(shù)據(jù)進(jìn)行移除操作造成的電平翻轉(zhuǎn)問題。當(dāng)存儲(chǔ)單元的大小為 M比特時(shí),若采用原技術(shù)方法則移除操作時(shí)整個(gè)存儲(chǔ)單元即M比特電平都可能發(fā)生翻轉(zhuǎn); 而采用本發(fā)明提供的方法,移除操作時(shí)存儲(chǔ)單元內(nèi)M比特電平不會(huì)發(fā)生翻轉(zhuǎn),只有byte_ index的位數(shù)即mint (log/8)比特電平可能發(fā)生翻轉(zhuǎn),可能發(fā)生電平翻轉(zhuǎn)的比特位數(shù)減少了(M-mintaog^8))位,因此,本發(fā)明極大的減少了硬件電平翻轉(zhuǎn)的比特?cái)?shù),降低了硬件功
耗。”。 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種碼流數(shù)據(jù)的讀取移除方法,其特征在于,所述方法包括下述步驟計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置bytejndex和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量offset ;多路選擇器根據(jù)所述bytejndex和offset,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù);將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理,并在解碼處理完畢后,輸出碼流移除信號(hào)skip信號(hào)和碼流移除長(zhǎng)度length信號(hào),以便根據(jù)所述skip信號(hào)和length信號(hào)更新所述 byte_index 禾口 offset。
2.如權(quán)利要求1所述的方法,其特征在于,所述計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置bytejndex的步驟具體為當(dāng)解碼開始信號(hào)start信號(hào)為有效時(shí),bytejndex = start_bias,其中start_bias表示碼流起始偏移字節(jié)數(shù),當(dāng)直接存儲(chǔ)訪問DMA按照半字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),start, bias = start_addr
;當(dāng)DMA按照字對(duì)齊方式傳送碼流數(shù)據(jù)時(shí),start_bias = start_ addr[l 0],其中start_addr表示碼流起始地址,start_addr
表示碼流起始地址的最低位,start_addr[l 0]表示碼流起始地址的低兩位;當(dāng)碼流移除信號(hào)skip信號(hào)有效時(shí),先判斷byte_index+byte_shift-max_index彡0是否成立,如果成立,貝1J byte—index = byte_index+byte_shift-max_index,否貝byte—index =byte_index+byte_shift, byte_shift ^7^ offset_and_length 3 白勺it, offset_and_length表示offset與length之禾口,max_index表示存儲(chǔ)單元中包含的字節(jié)數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于,所述計(jì)算碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量offset的步驟具體為當(dāng)解碼開始信號(hào)start信號(hào)為有效時(shí),offset = start_offset,其中start_offset表示解碼前碼流在起始字節(jié)內(nèi)部的比特偏移;當(dāng)碼流移除信號(hào)skip信號(hào)有效時(shí),offset = offset_and_length[2 0],其中 offset_and_length 表不 offset 與 length 之禾口,offset_and_length [2 0]表不 offset_ and_length 的低 3 位。
4.如權(quán)利要求1所述的方法,其特征在于,所述多路選擇器根據(jù)所述bytejndex和 offset,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)的步驟具體為根據(jù)bytejndex[x-1 2]確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字,第一選擇電路從該起始字的最高位開始按照從高到低的順序選擇N+31比特位的碼流數(shù)據(jù)傳遞給第二選擇電路,其中χ表示bytejndex位數(shù),N表示解碼單元解碼所需的碼流寬度,byte_ index [x-1 2]表示byte_index右移兩位后的值;根據(jù)bytejndex[1 0]確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié),第二選擇電路從該起始字節(jié)的最高位開始按照從高到低的順序選擇N+7比特位的碼流數(shù)據(jù)傳遞給第三選擇電路,其中byte_index[l 0]表示bytejndex低兩位;根據(jù)offset確定碼流數(shù)據(jù)在上述起始字節(jié)中的偏移位數(shù),第三選擇電路從第二選擇電路傳遞來的N+7比特位的碼流數(shù)據(jù)的最高位起,由高到低順序,從第(offset+Ι)位開始選定N比特位碼流數(shù)據(jù)作為解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。
5.如權(quán)利要求1至4任一權(quán)利要求所述的方法,其特征在于,所述方法還包括下述步驟計(jì)算存儲(chǔ)單元中可用碼流的字節(jié)數(shù)A ;當(dāng)A < AO時(shí),標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)不可用,否則標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)可用,其中AO表示為保證解碼正確,存儲(chǔ)單元中所存放碼流的最小字節(jié)數(shù)。
6.如權(quán)利要求5所述的方法,其特征在于,所述方法還包括下述步驟判斷A < Al是否成立,并在A < Al成立時(shí),啟動(dòng)DMA讀取單元,DMA讀取單元從內(nèi)存中讀取碼流數(shù)據(jù),并將讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū),其中Al表示存儲(chǔ)單元一半空間所包含的字節(jié)數(shù)。
7.如權(quán)利要求5所述的方法,其特征在于,所述計(jì)算存儲(chǔ)單元中可用碼流的字節(jié)數(shù)A的步驟具體為當(dāng)start信號(hào)為高時(shí),A = O;當(dāng)dma_done信號(hào)為高,skip信號(hào)為低時(shí),判斷f irSt_read為高還是低,如果為高,則A =CNT-start_bias,如果為低,則A = A+CNT,其中dma_done信號(hào)為DMA完成一次讀碼流操作的標(biāo)志,first_read為高標(biāo)志當(dāng)前讀碼流操作為本次解碼的第一次DMA讀碼流操作,CNT 為DMA每次傳送的字節(jié)數(shù);當(dāng)dma_done信號(hào)為低,skip信號(hào)為高時(shí),則A = A-byte_shift ;當(dāng)dma_done信號(hào)為高,skip信號(hào)為高時(shí),則A = A+CNT_byte_shift。
8.一種碼流數(shù)據(jù)的讀取移除裝置,其特征在于,所述裝置包括存儲(chǔ)單元,用于存儲(chǔ)DMA讀取單元從內(nèi)存中讀取的碼流數(shù)據(jù),為解碼單元解碼準(zhǔn)備碼流數(shù)據(jù);起始字節(jié)位置計(jì)算單元,用于計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置byte_ index ;偏移量計(jì)算單元,用于計(jì)算碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量offset ;多路選擇器,用于根據(jù)所述起始字節(jié)位置計(jì)算單元計(jì)算得到的bytejndex以及偏移量計(jì)算單元計(jì)算得到的offset,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù),并將選擇的碼流數(shù)據(jù)輸出至解碼單元。
9.如權(quán)利要求8所述的裝置,其特征在于,所述多路選擇器包括第一選擇電路,用于根據(jù)byte_index[x-l 2]確定碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字, 第一選擇電路從該起始字的最高位開始按照從高到低的順序選擇N+31比特位的碼流數(shù)據(jù)傳遞給第二選擇電路,其中χ表示bytejndex位數(shù),N表示解碼單元解碼所需的碼流寬度, 其中byte_index[x-l 2]表示byte_index右移兩位后的值;第二選擇電路,用于根據(jù)byte_index[l 0]確定碼流數(shù)據(jù)在上述起始字中的起始字節(jié),第二選擇電路從該起始字節(jié)的最高位開始按照從高到低的順序選擇N+7比特位的碼流數(shù)據(jù)傳遞給第三選擇電路,其中byte_indeX[l 0]表示bytejndex低兩位;第三選擇電路,用于根據(jù)offset確定碼流數(shù)據(jù)在上述起始字節(jié)中的偏移位數(shù),第三選擇電路從第二選擇電路傳遞來的N+7比特位的碼流數(shù)據(jù)的最高位起,由高到低順序,從第 (offset+Ι)位開始選定N比特位碼流數(shù)據(jù)作為解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù)。
10.如權(quán)利要求8或9所述的裝置,其特征在于,所述裝置還包括可用碼流字節(jié)數(shù)計(jì)算單元,用于計(jì)算存儲(chǔ)單元中可用碼流的字節(jié)數(shù)A ; 碼流可用標(biāo)記單元,用于根據(jù)存儲(chǔ)單元中可用碼流的字節(jié)數(shù)標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)是否可用,當(dāng)A < AO時(shí),標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)不可用,否則標(biāo)記存儲(chǔ)單元中的碼流數(shù)據(jù)可用,其中AO表示為保證解碼正確,存儲(chǔ)單元中所存放碼流的最小字節(jié)數(shù)。
11.如權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括 可用碼流字節(jié)數(shù)判斷單元,用于判斷A < Al是否成立,并在A < Al成立時(shí),啟動(dòng)DMA 讀取單元,DMA讀取單元從內(nèi)存中讀取碼流數(shù)據(jù),并將讀取的碼流數(shù)據(jù)寫入存儲(chǔ)單元的空閑區(qū),其中Al表示存儲(chǔ)單元一半空間所包含的字節(jié)數(shù)。
全文摘要
本發(fā)明適用于解碼處理領(lǐng)域,提供了一種碼流數(shù)據(jù)的讀取移除方法和裝置,該方法包括下述步驟計(jì)算碼流數(shù)據(jù)在存儲(chǔ)單元中的起始字節(jié)位置byte_index和碼流數(shù)據(jù)在起始字節(jié)內(nèi)部的比特偏移量offset;多路選擇器根據(jù)所述byte_index和offset,從存儲(chǔ)單元中選擇解碼單元解碼所需的碼流寬度比特碼流數(shù)據(jù);將選擇的碼流數(shù)據(jù)輸出至解碼單元進(jìn)行解碼處理,并在解碼處理完畢后,輸出碼流移除信號(hào)skip信號(hào)和碼流移除長(zhǎng)度length信號(hào)。本發(fā)明實(shí)施例通過采用byte_index和offset來對(duì)存儲(chǔ)單元中的碼流數(shù)據(jù)進(jìn)行有效尋址的方式來代替碼流數(shù)據(jù)移位操作,因此,可以極大的減少可能發(fā)生電平翻轉(zhuǎn)的比特位數(shù),極大的降低了硬件功耗。
文檔編號(hào)H03M13/15GK102263562SQ20101018656
公開日2011年11月30日 申請(qǐng)日期2010年5月28日 優(yōu)先權(quán)日2010年5月28日
發(fā)明者冷永春, 胡勝發(fā), 蔡寧寧, 高展 申請(qǐng)人:安凱(廣州)微電子技術(shù)有限公司