本發(fā)明涉及碼流緩沖模塊設(shè)計(jì),特別地,涉及動(dòng)態(tài)可回退碼流緩沖模塊設(shè)計(jì)。
背景技術(shù):現(xiàn)有的視頻解碼ASIC設(shè)計(jì)中,視頻碼流緩沖模塊通常由兩個(gè)相互連接的緩沖模塊實(shí)現(xiàn),前端緩沖模塊通常是以字節(jié)(byte)為基本操作單元的緩沖區(qū),后端緩沖模塊通常是以比特(bit)為基本操作單元的緩沖區(qū),前端和后端緩沖模塊本身采用FIFO(先入先出)機(jī)制,在前后端緩沖模塊的連接處通常加入競(jìng)爭(zhēng)碼偵聽和去除模塊以及必要的比特順序調(diào)整邏輯,從而構(gòu)成一套完整的碼流緩沖區(qū)管理策略。目前流行的某些視頻編解碼標(biāo)準(zhǔn)中,出現(xiàn)了需要對(duì)碼流進(jìn)行回退操作的要求。此外解碼器的容錯(cuò)功能的實(shí)現(xiàn),同樣在特定條件下需要對(duì)碼流進(jìn)行回退操作,例如當(dāng)在后端緩沖模塊中發(fā)現(xiàn)碼流中有錯(cuò)誤時(shí),需要丟棄后端緩沖模塊中當(dāng)前處理的數(shù)據(jù),即將后端緩沖模塊清空,然后從發(fā)生錯(cuò)誤的字節(jié)的邊界重新進(jìn)行同步。而在傳統(tǒng)的碼流緩沖系統(tǒng)的設(shè)計(jì)方法中,解碼操作主要集中在以位為基本操作單元的后端緩沖模塊的數(shù)據(jù)上,難以在需要的情況下動(dòng)態(tài)且自然地實(shí)現(xiàn)將后端緩沖模塊中的碼流回退到之前的狀態(tài)。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的上述缺陷。本發(fā)明采用兩個(gè)前端緩沖模塊對(duì)應(yīng)一個(gè)后端緩沖模塊的連接方法,可以動(dòng)態(tài)的實(shí)現(xiàn)后端緩沖模塊中的碼流的可回退功能。根據(jù)本發(fā)明的一方面,提出了一種動(dòng)態(tài)可回退碼流緩沖模塊系統(tǒng),該系統(tǒng)包括:前端工作緩沖模塊,具有第一容量,該前端工作緩沖模塊在輸入端接收輸入碼流中的第一單位長度的輸入數(shù)據(jù),并在輸出端輸出第一單位長度的第一緩沖數(shù)據(jù)給后端緩沖模塊,在輸出該第一緩沖數(shù)據(jù)的同時(shí)從該前端工作緩沖模塊中刪除該第一緩沖數(shù)據(jù);前端影子緩沖模塊,具有第一容量,該前端影子緩沖模塊在輸入端與前端工作緩沖模塊同步接收輸入碼流中的所述輸入數(shù)據(jù),并且當(dāng)從前端工作緩沖模塊中刪除該第一緩沖數(shù)據(jù)時(shí)在該前端影子緩沖模塊中保留該第一緩沖數(shù)據(jù);后端緩沖模塊,具有第二容量,該后端緩沖模塊在輸入端接收所述第一緩沖數(shù)據(jù)并輸出第二單位長度的第二緩沖數(shù)據(jù),當(dāng)確定該后端緩沖模塊完成了所述第一緩沖數(shù)據(jù)的輸出后,向影子緩沖控制模塊發(fā)出控制命令;影子緩沖控制模塊,響應(yīng)于所述控制命令,刪除所述前端影子緩沖模塊中的所述第一緩沖數(shù)據(jù);回退操作控制器,響應(yīng)于回退指令使該系統(tǒng)停止操作,重置前端工作緩沖模塊和后端緩沖模塊,將前端影子緩沖模塊中的數(shù)據(jù)完整地復(fù)制到重置后的前端工作緩沖模塊中,然后使該系統(tǒng)恢復(fù)操作。優(yōu)選地,所述第一容量大于所述第二容量。優(yōu)選地,所述第一容量為所述第二容量的125%-150%。優(yōu)選地,所述第一單位長度為一個(gè)字節(jié),所述第二單位長度為一個(gè)比特。優(yōu)選地,當(dāng)后端緩沖模塊中輸出了一個(gè)完整的字節(jié)時(shí),向影子緩沖控制模塊發(fā)出控制命令使影子緩沖控制模塊刪除前端影子緩沖模塊中對(duì)應(yīng)的一個(gè)字節(jié)。優(yōu)選地,所述前端工作緩沖模塊、所述前端影子緩沖模塊和所述后端緩沖模塊均以先入先出方式工作。優(yōu)選地,該系統(tǒng),還包括:前端上下文寄存器,連接于所述前端工作緩沖模塊的輸出端;后端上下文寄存器,連接于所述后端緩沖模塊的輸出端;其中,該前端上下文寄存器和后端上下文寄存器用于分別保存所述前端工作緩沖模塊以及所述后端緩沖模塊的輸出碼流中的上下文信息;以及在所述前端影子緩沖模塊中的數(shù)據(jù)完整地復(fù)制到所述前端工作緩沖模塊中之后以及該系統(tǒng)恢復(fù)操作之前,回退所述前端上下文寄存器和所述后端上下文寄存器的內(nèi)容。根據(jù)本發(fā)明的另一方面,提出了一種動(dòng)態(tài)可回退碼流緩沖模塊方法,該方法包括:S301,通過前端工作緩沖模塊和前端影子緩沖模塊同時(shí)接收輸入碼流中的第一單位長度的輸入數(shù)據(jù);S302,通過前端工作緩沖模塊輸出第一單位長度的第一緩沖數(shù)據(jù)給后端緩沖模塊,在輸出該第一緩沖數(shù)據(jù)的同時(shí)從該前端工作緩沖模塊中刪除該第一緩沖數(shù)據(jù)并在該前端影子緩沖模塊中保留該第一緩沖數(shù)據(jù);S303,通過后端緩沖模塊輸出第二單位長度的第二緩沖數(shù)據(jù),當(dāng)確定完成了所述第一緩沖數(shù)據(jù)的輸出后,后端緩沖模塊向影子緩沖控制模塊發(fā)出控制命令;S304,通過影子緩沖控制模塊響應(yīng)于所述控制命令,刪除前端影子緩沖模塊中的所述第一緩沖數(shù)據(jù);其中,在執(zhí)行步驟S301-S304的過程中,如果回退操作控制器接收到回退指令,則由回退操作控制器控制執(zhí)行以下步驟:S305,停止執(zhí)行步驟S301-S304,并重置前端工作緩沖模塊和后端緩沖模塊;S306,將前端影子緩沖模塊中的數(shù)據(jù)完整地復(fù)制到前端工作緩沖模塊中,再恢復(fù)執(zhí)行步驟S301-S304。優(yōu)選地,其中步驟S306還包括:在將前端影子緩沖模塊中的數(shù)據(jù)完整地復(fù)制到前端工作緩沖模塊中之后以及恢復(fù)執(zhí)行步驟S301-S304之前,回退前端上下文寄存器和后端上下文寄存器。根據(jù)本發(fā)明所述的系統(tǒng)和方法,能夠自然地支持某些帶有解碼回退需求的視頻編解碼標(biāo)準(zhǔn),能夠滿足解碼器實(shí)現(xiàn)中的容錯(cuò)策略可能用到的碼流回退需求,且由于僅增加了影子緩沖模塊和回退控制邏輯,需要的ASIC(專用集成電路)設(shè)計(jì)的資源少,面積小,同時(shí)大大降低了軟件或者固件實(shí)現(xiàn)上述系統(tǒng)和方法的難度和復(fù)雜度。附圖說明圖1描述了根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊系統(tǒng)的一個(gè)實(shí)施例的結(jié)構(gòu)框圖;圖2描述了根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊系統(tǒng)的另一個(gè)實(shí)施例結(jié)構(gòu)框圖;圖3描述了根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊方法的一個(gè)實(shí)施例的流程圖。具體實(shí)施方式根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊系統(tǒng)和方法采取了兩個(gè)前端緩沖模塊和一個(gè)后端緩沖模塊,其中兩個(gè)前端緩沖模塊分別是前端工作緩沖模塊和前端影子緩沖模塊。兩個(gè)前端緩沖模塊同時(shí)接收輸入碼流,并且當(dāng)前端工作緩沖模塊向后端緩沖模塊輸出一筆數(shù)據(jù)并將這筆數(shù)據(jù)從前端工作緩沖模塊中刪除時(shí),前端影子緩沖模塊仍保留這筆數(shù)據(jù),直到確認(rèn)后端緩沖模塊完成了對(duì)這筆數(shù)據(jù)的輸出才從前端影子緩沖模塊中刪除這筆數(shù)據(jù)。一旦發(fā)現(xiàn)后端緩沖模塊出現(xiàn)錯(cuò)誤,或者根據(jù)視頻標(biāo)準(zhǔn)的要求需要執(zhí)行回退操作時(shí),則凍結(jié)所有緩沖模塊的操作,并將前端影子緩沖模塊中的數(shù)據(jù)全部復(fù)制到前端工作緩沖模塊中,這樣,當(dāng)系統(tǒng)恢復(fù)工作時(shí),前端工作緩沖模塊重新為后端緩沖模塊輸出后端緩沖模塊重置前的所有數(shù)據(jù),從而實(shí)現(xiàn)了回退操作。圖1描述了根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊系統(tǒng)的一個(gè)實(shí)施例。其中,該系統(tǒng)包括:前端工作緩沖模塊101,具有第一容量,該前端工作緩沖模塊101在輸入端接收輸入碼流中的第一單位長度的輸入數(shù)據(jù),并在輸出端輸出第一單位長度的第一緩沖數(shù)據(jù)給后端緩沖模塊103,在輸出該第一緩沖數(shù)據(jù)的同時(shí)從該前端工作緩沖模塊101中刪除該第一緩沖數(shù)據(jù);前端影子緩沖模塊102,具有第一容量,該前端影子緩沖模塊102在輸入端與前端工作緩沖模塊101同步接收輸入碼流中的所述輸入數(shù)據(jù),并且當(dāng)從前端工作緩沖模塊101中刪除該第一緩沖數(shù)據(jù)時(shí)在該前端影子緩沖模塊102中保留該第一緩沖數(shù)據(jù);后端緩沖模塊103,具有第二容量,該后端緩沖模塊在輸入端接收所述第一緩沖數(shù)據(jù)并輸出第二單位長度的第二緩沖數(shù)據(jù),當(dāng)確定該后端緩沖模塊103完成了所述第一緩沖數(shù)據(jù)的輸出后,向影子緩沖控制模塊105發(fā)出控制命令;影子緩沖控制模塊105,響應(yīng)于所述控制命令,刪除所述前端影子緩沖模塊102中的所述第一緩沖數(shù)據(jù);回退操作控制器104,響應(yīng)于回退指令使該系統(tǒng)停止操作,重置前端工作緩沖模塊101和后端緩沖模塊103,將前端影子緩沖模塊102中的數(shù)據(jù)完整地復(fù)制到重置后的前端工作緩沖模塊101中,然后使該系統(tǒng)恢復(fù)操作。在一個(gè)優(yōu)選實(shí)施例中,前端工作緩沖模塊101、前端影子緩沖模塊102和后端緩沖模塊103均以先入先出(FIFO)方式工作,與典型的以先入先出方式工作的緩沖模塊(緩沖區(qū))一樣,各個(gè)緩沖模塊在容量未滿之前,均響應(yīng)于各自特定的控制命令接收輸入數(shù)據(jù)存放于隊(duì)列尾部,并輸出隊(duì)列前部的輸出數(shù)據(jù)。前端工作緩沖模塊101和前端影子緩沖模塊102的容量(第一容量)相同,以便在回退操作控制器104的控制下將前端影子緩沖模塊102中的數(shù)據(jù)全部復(fù)制到前端工作緩沖模塊101中。優(yōu)選地,前端工作緩沖模塊101和前端影子緩沖模塊102的容量可略大于后端緩沖模塊103的容量(第二容量),例如,上述第一容量可為第二容量的125%-150%,以便于容納已經(jīng)輸出到后端緩沖模塊103,但為了支持回退操作而暫時(shí)保存在前端影子緩沖模塊102中的數(shù)據(jù),也就是說,前端影子緩沖模塊102中的內(nèi)容即包括已經(jīng)進(jìn)入后端緩沖模塊的數(shù)據(jù),又包括仍存在與工作緩沖模塊的數(shù)據(jù)。因此,當(dāng)系統(tǒng)完成回退操作后恢復(fù)工作時(shí),前端工作緩沖模塊101中待輸出的數(shù)據(jù)中包含了后端緩沖模塊103在重置之前所有未完成輸出的數(shù)據(jù)。優(yōu)選地,當(dāng)接收到回退指令時(shí),回退操作控制器104命令系統(tǒng)停止操作,這意味著系統(tǒng)的任何輸入輸出操作都停止,直到完成將前端影子緩沖模塊102中的數(shù)據(jù)完整地復(fù)制到前端工作緩沖模塊101中的操作之后,系統(tǒng)才恢復(fù)操作。優(yōu)選地,前端工作緩沖模塊101和前端影子緩沖模塊102以字節(jié)為基本操作單位(第一單位長度),后端緩沖模塊103以比特為基本操作單位(第二單位長度)。優(yōu)選地,只有當(dāng)后端緩沖模塊103中輸出了1個(gè)完整的字節(jié)的時(shí)候,才向影子緩沖控制模塊105發(fā)出控制命令,相應(yīng)地,影子緩沖控制模塊105刪除前端影子緩沖模塊102中對(duì)應(yīng)的字節(jié)。這樣,如果響應(yīng)于回退指令重置后端緩沖模塊103時(shí),后端緩沖模塊103中仍包含未完成輸出的多個(gè)字節(jié)(包括未輸出的完整的字節(jié)和部分輸出的字節(jié)),則這些字節(jié)都保留在前端影子緩沖模塊102中,在將前端影子緩沖模塊102中的內(nèi)容完整復(fù)制到前端工作緩沖模塊101中之后,隨著系統(tǒng)恢復(fù)操作,這些未完成輸出的字節(jié)仍按照原來的先入先出的順序,陸續(xù)進(jìn)入后端緩沖模塊103,從而未造成任何數(shù)據(jù)丟失。圖2描述了根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊系統(tǒng)的另一個(gè)實(shí)施例。相比于圖1所示的實(shí)施例,圖2所示的實(shí)施例增加了連接于前端工作緩沖模塊101的輸出端的前端上下文寄存器201,以及連接于后端緩沖模塊103的輸出端的后端上下文寄存器202,該前端上下文寄存器和后端上下文寄存器用于分別保存前端工作緩沖模塊101以及后端緩沖模塊103的輸出碼流中的上下文信息。所謂上下文信息(context)是指用于指示需要保存和更新的硬件狀態(tài)的信號(hào)或變量,所述狀態(tài)例如包括各個(gè)緩沖模塊當(dāng)前共解碼了多少個(gè)單位長度(例如字節(jié)或比特)的數(shù)據(jù),以及各個(gè)緩沖模塊當(dāng)前的輸入輸出指針位置等。在回退操作中,這些信息也需要進(jìn)行更新。因此,在該實(shí)施例中,在前端影子緩沖模塊102中的數(shù)據(jù)完整地復(fù)制到前端工作緩沖模塊101中之后,前端上下文寄存器201和后端上下文寄存器202也應(yīng)被回退和更新,即完成前端影子緩沖區(qū)102到前端工作緩沖區(qū)101的復(fù)制之后,前端上下文寄存器201和后端上下文寄存器202的內(nèi)容應(yīng)回退到與復(fù)制后前端工作緩沖區(qū)101的內(nèi)容相對(duì)應(yīng)的狀態(tài),或者說,回退到系統(tǒng)的本次回退操作之前,與復(fù)制后前端工作緩沖區(qū)101的內(nèi)容相對(duì)應(yīng)的狀態(tài),從而完成整個(gè)系統(tǒng)的回退操作,然后再令系統(tǒng)恢復(fù)操作。圖3描述了根據(jù)本發(fā)明的動(dòng)態(tài)可回退碼流緩沖模塊方法的一個(gè)實(shí)施例的示意圖,其中,該方法包括:S301,通過前端工作緩沖模塊和前端影子緩沖模塊同時(shí)接收輸入碼流中的第一單位長度的輸入數(shù)據(jù);S302,通過前端工作緩沖模塊輸出第一單位長度的第一緩沖數(shù)據(jù)給后端緩沖模塊,在輸出第一緩沖數(shù)據(jù)的同時(shí)從該前端工作緩沖模塊中刪除該第一緩沖數(shù)據(jù)并在該前端影子緩沖模塊中保留該第一緩沖數(shù)據(jù);S303,通過后端緩沖模塊輸出第二單位長度的第二緩沖數(shù)據(jù),當(dāng)確定完成了所述第一緩沖數(shù)據(jù)的輸出后,后端緩沖模塊向影子緩沖控制模塊發(fā)出控制命令;S304,通過影子緩沖控制模塊響應(yīng)于所述控制命令,刪除前端影子緩沖模塊中的所述第一緩沖數(shù)據(jù);其中,在執(zhí)行步驟S301-S304的過程中,如果回退操作控制器接收到回退指令,則由回退操作控制器控制執(zhí)行以下步驟:S305,停止執(zhí)行步驟S301-S304,并重置前端工作緩沖模塊和后端緩沖模塊;S306,將前端影子緩沖模塊中的數(shù)據(jù)完整地復(fù)制到前端工作緩沖模塊中,再恢復(fù)執(zhí)行步驟S301-S304。在圖3中,主要圖示了該方法在未收到回退指令時(shí),執(zhí)行步驟S301-S304的正常緩沖操作流程,一旦收到回退指令,緩沖操作停止,并進(jìn)入到S305-306的回退操作,直到回退操作完成后,又返回到正常緩沖操作的流程中。在一個(gè)優(yōu)選實(shí)施例中,步驟S306還包括,在將前端影子緩沖模塊中的數(shù)據(jù)完整地復(fù)制到前端工作緩沖模塊中之后以及恢復(fù)執(zhí)行步驟S301-S304之前,回退前端上下文寄存器和后端上下文寄存器。上述實(shí)施例是用于例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何本領(lǐng)域技術(shù)人員均可在不違背本發(fā)明的精神及范疇下,對(duì)上述實(shí)施例進(jìn)行修改。因此本發(fā)明的保護(hù)范圍,應(yīng)如本發(fā)明的權(quán)利要求書所列。