两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種數(shù)據(jù)緩存方法和裝置的制作方法

文檔序號(hào):6576267閱讀:105來源:國知局
專利名稱:一種數(shù)據(jù)緩存方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明屬于數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其涉及一種數(shù)據(jù)緩存方法和裝置。
背景技術(shù)
在接收數(shù)據(jù)時(shí),為了使接收的數(shù)據(jù)在重現(xiàn)(如播放)時(shí)流暢,不產(chǎn)生卡屏 現(xiàn)象, 一般需要在用于接收和重現(xiàn)數(shù)據(jù)的設(shè)備中內(nèi)置存儲(chǔ)設(shè)備(也稱為內(nèi)存), 通過內(nèi)存對(duì)接收的數(shù)據(jù)進(jìn)行緩存。由于用于緩存的內(nèi)存的存儲(chǔ)空間不可能無限 大,因此,為了達(dá)到較好的數(shù)據(jù)重現(xiàn)效果,需要設(shè)計(jì)較合理的數(shù)據(jù)緩存方法。
現(xiàn)有技術(shù)提供了一種乒乓形式的數(shù)據(jù)援存方法,簡述如下采用兩塊緩存 分別為緩存A和緩存B,當(dāng)緩存A在緩存數(shù)據(jù)時(shí),將緩存B提供給編碼或處理 程序使用,當(dāng)緩存A中的數(shù)據(jù)緩存完畢時(shí),向緩存B中傳輸數(shù)據(jù),同時(shí)將緩存 A提供給編碼或處理程序使用。這種數(shù)據(jù)緩存方法對(duì)編碼程序的實(shí)時(shí)性要求較 高, 一般要求編碼或處理程序的運(yùn)行速度快于采集數(shù)據(jù)的速度,否則數(shù)據(jù)就會(huì) 丟失;當(dāng)采集速度太快,兩塊緩存都滿的時(shí)候,需要硬件上能夠暫停采集,對(duì) 硬件功能有要求;編碼程序可能一次需要多幀原始數(shù)據(jù),以避免內(nèi)存拷貝,提 高編碼效率,兵乓操作的雙緩沖方式無法滿足。
現(xiàn)有技術(shù)提供另一種采用緩存隊(duì)列的數(shù)據(jù)緩存方法,簡述如下將采用緩 存隊(duì)列對(duì)數(shù)據(jù)采集完畢的幀緩存進(jìn)行管理,當(dāng)編碼程序需要一幀新的數(shù)據(jù)的時(shí) 候,從緩存隊(duì)列中獲取一幀數(shù)據(jù)。這種數(shù)據(jù)緩存方法由于沒有標(biāo)識(shí)為準(zhǔn)備狀態(tài) 的幀緩存,難以保證在當(dāng)前幀接收完時(shí),馬上有下一幀緩存供數(shù)據(jù)采集使用; 從緩存隊(duì)列中獲取一幀數(shù)據(jù)時(shí),需要把數(shù)據(jù)從幀緩存中拷貝出來,降低了編碼 程序的效率;編碼程序無法一次獲取多幀數(shù)據(jù)或者釋》文多幀數(shù)據(jù)。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種數(shù)據(jù)緩存方法,旨在解決采用內(nèi)存緩存數(shù)據(jù)時(shí), 當(dāng)幀緩存接收完一幀數(shù)據(jù)后,可快速的切換到另 一個(gè)幀緩存來接收下一幀數(shù)據(jù), 從而在內(nèi)存的容量可以滿足當(dāng)前數(shù)據(jù)存儲(chǔ)需要時(shí),避免了具有恒定速度或流量 的數(shù)據(jù)幀丟失的問題。
本發(fā)明是這樣實(shí)現(xiàn)的, 一種內(nèi)存的數(shù)據(jù)緩存方法,所述內(nèi)存的存儲(chǔ)空間被
配置為多塊幀i爰存,所述方法包括下述步驟
A、 設(shè)置每塊幀緩存的狀態(tài),所述幀緩存的狀態(tài)用于標(biāo)識(shí)幀援存的數(shù)據(jù)存 儲(chǔ)狀態(tài);
B、 在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀態(tài)確定用于緩存下一 幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條件下的狀態(tài) 更新機(jī)制,更新每塊幀緩存的狀態(tài)。
進(jìn)一步的,所述幀緩存的狀態(tài)包括正在緩存數(shù)據(jù)狀態(tài)、準(zhǔn)備緩存數(shù)據(jù)狀態(tài)、 已經(jīng)緩存數(shù)據(jù)狀態(tài)、被數(shù)據(jù)占用狀態(tài)、以及空閑狀態(tài),所述狀態(tài)更新條件包括 一幀數(shù)據(jù)緩存完畢、讀取幀緩存、以及釋放幀緩存。
進(jìn)一步的,所述步驟B具體包括
B1 、實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條件; B2、在當(dāng)前幀數(shù)據(jù)緩存完畢時(shí),將下一幀數(shù)據(jù)傳輸至處于準(zhǔn)備緩存數(shù)據(jù)狀 態(tài)的幀緩存,并采用處于空閑狀態(tài)的其中一塊幀緩存存儲(chǔ)再下一幀數(shù)據(jù),同時(shí) 將處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為已經(jīng)緩存數(shù)據(jù)狀態(tài),將處于準(zhǔn) 備緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為正在緩存數(shù)據(jù)狀態(tài),將處于空閑狀態(tài)的 其中 一塊幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù)據(jù)狀態(tài);
B3、當(dāng)讀取幀緩存時(shí),將讀取的幀緩存的狀態(tài)更新為被數(shù)據(jù)占用狀態(tài); B4、當(dāng)釋放幀緩存時(shí),將被釋放的幀緩存的狀態(tài)更新為空閑狀態(tài)。 進(jìn)一步的,所述方法還包括下述步驟
設(shè)置先進(jìn)先出的已緩存數(shù)據(jù)隊(duì)列和數(shù)據(jù)占用隊(duì)列,當(dāng)所述幀緩存的狀態(tài)為已經(jīng)緩存數(shù)據(jù)狀態(tài)時(shí),使所述幀緩存進(jìn)入所迷已緩存數(shù)據(jù)隊(duì)列,當(dāng)所述幀緩存 的狀態(tài)為被數(shù)據(jù)占用狀態(tài)時(shí),使所述幀緩存進(jìn)入所述數(shù)據(jù)占用隊(duì)列。
進(jìn)一步的,所迷步驟B具體包括
B1,、實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條件; B2'、如果當(dāng)前幀數(shù)據(jù)緩存完畢,將下一幀數(shù)據(jù)傳輸至處于準(zhǔn)備緩存數(shù)據(jù)狀 態(tài)的幀緩存,并采用處于空閑狀態(tài)的其中一塊幀緩存存儲(chǔ)再下一幀數(shù)據(jù),同時(shí) 將處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為已經(jīng)緩存數(shù)據(jù)狀態(tài),將處于準(zhǔn) 備緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為正在緩存數(shù)據(jù)狀態(tài),如果當(dāng)前不存在處 于空閑狀態(tài)的幀緩存,按照先進(jìn)先出的順序,將最早進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列 中幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù)據(jù)狀態(tài),或者動(dòng)態(tài)申請(qǐng)一塊新的幀緩存,并 將所述新的幀緩存的狀態(tài)設(shè)為準(zhǔn)備緩存數(shù)據(jù)狀態(tài),同時(shí)動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空 間的幀緩存總數(shù);
B3,、當(dāng)讀取幀緩存時(shí),按照先進(jìn)先出的順序,將所述已緩存數(shù)據(jù)隊(duì)列中的 被讀取的 一塊或者多塊幀緩存的狀態(tài)更新為被數(shù)據(jù)占用狀態(tài);
B4,、當(dāng)釋放幀緩存時(shí),按照先進(jìn)先出的順序,將所述數(shù)據(jù)占用隊(duì)列中被釋 放的 一塊或者多塊幀緩存的狀態(tài)更新為空閑狀態(tài)。
本發(fā)明的另一目的在于提供一種內(nèi)存的數(shù)據(jù)緩存裝置,所述內(nèi)存的存儲(chǔ)空 間被配置為多塊幀緩存,所述裝置包括
幀緩存配置單元,用于設(shè)置每塊幀緩存的狀態(tài),所述幀緩存的狀態(tài)用于標(biāo) 識(shí)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài),所述幀緩存的狀態(tài)包括正在緩存數(shù)據(jù)狀態(tài)、準(zhǔn)備緩 存數(shù)據(jù)狀態(tài)、已經(jīng)緩存數(shù)據(jù)狀態(tài)、被數(shù)據(jù)占用狀態(tài)、以及空閑狀態(tài);
數(shù)據(jù)緩存單元,用于用于在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀 態(tài)確定用于緩存下一幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀 態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài),所述狀態(tài)更新條件包 括一幀數(shù)據(jù)緩存完畢、讀取幀緩存、以及釋放幀緩存。
進(jìn)一步的,所述數(shù)據(jù)緩存單元包括條件檢測(cè)子單元,用于實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條
件;
數(shù)據(jù)傳輸子單元,用于在所述條件檢測(cè)子單元檢測(cè)到數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到一 幀數(shù)據(jù)緩存完畢的狀態(tài)更新條件時(shí),向處于準(zhǔn)備接收數(shù)據(jù)狀態(tài)的幀緩存中傳輸 數(shù)據(jù);
緩存任務(wù)產(chǎn)生子單元,用于根據(jù)每塊幀緩存的狀態(tài)以及條件檢測(cè)子單元得 到的當(dāng)前達(dá)到的狀態(tài)更新條件,確定每塊幀緩存的緩存任務(wù);
狀態(tài)更新子單元,用于在所述條件;險(xiǎn)測(cè)子單元^r測(cè)到的數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到 預(yù)設(shè)的狀態(tài)更新條件時(shí),采用該狀態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀 緩存的狀態(tài)。
進(jìn)一步的,所述裝置還包括
隊(duì)列存儲(chǔ)單元,用于存儲(chǔ)已緩存數(shù)據(jù)隊(duì)列和數(shù)據(jù)占用隊(duì)列,當(dāng)所述幀緩存 的狀態(tài)為已經(jīng)緩存數(shù)據(jù)狀態(tài)時(shí),使所述幀緩存進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列,當(dāng)所 述幀緩存的狀態(tài)為被數(shù)據(jù)占用狀態(tài)時(shí),使所述幀緩存進(jìn)入所述數(shù)據(jù)占用隊(duì)列。
進(jìn)一步的,所述狀態(tài)更新子單元在一幀數(shù)據(jù)緩存完畢時(shí),采用處于準(zhǔn)備緩 存數(shù)據(jù)狀態(tài)的幀緩存存儲(chǔ)下一幀數(shù)據(jù),并將處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的 狀態(tài)更新為已經(jīng)緩存數(shù)據(jù)狀態(tài),將處于準(zhǔn)備緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新 為正在緩存數(shù)據(jù)狀態(tài),如果當(dāng)前不存在處于空閑狀態(tài)的幀i爰存時(shí),按照先進(jìn)先 出的順序,將最早進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列中幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù) 據(jù)狀態(tài);
在讀取幀緩存時(shí),按照先進(jìn)先出的順序,將所述已緩存數(shù)據(jù)隊(duì)列中被讀取 的一塊或者多塊幀緩存的狀態(tài)更新為^l數(shù)據(jù)占用狀態(tài);
在釋放幀緩存時(shí),按照先進(jìn)先出的順序,將所述數(shù)據(jù)占用隊(duì)列中被釋放的 一塊或者多塊幀緩存更新為空閑狀態(tài)。
進(jìn)一步的,所述裝置還包括
幀援存申請(qǐng)單元,用于在一幀數(shù)據(jù)緩存完畢,且不存在處于空閑狀態(tài)的幀緩存時(shí),動(dòng)態(tài)申請(qǐng)一塊新的幀緩存,并將所述新的幀緩存的狀態(tài)設(shè)為準(zhǔn)備緩存 數(shù)據(jù)狀態(tài),同時(shí)動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空間的幀緩存總數(shù)。
在本發(fā)明實(shí)施例中,通過將內(nèi)存配置為多塊幀緩存,設(shè)置每塊幀緩存的狀 態(tài),根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條件下的狀態(tài)更新機(jī)制,確定 每塊幀緩存的緩存任務(wù),并更新每塊幀緩存的狀態(tài),從而在一幀數(shù)據(jù)幀緩存完 畢時(shí),切換到另一個(gè)幀緩存來接收下一幀數(shù)據(jù),避免了具有恒定速度或流量的 數(shù)據(jù)幀纟皮丟失。通過建立兩個(gè)先進(jìn)先出隊(duì)列,從而保證最早輸入的數(shù)據(jù)先被編 碼程序使用,使數(shù)據(jù)保持連續(xù)性。由于可以動(dòng)態(tài)的改變幀緩存的個(gè)數(shù),在內(nèi)存 容量允許時(shí),可以達(dá)到不丟失一幀數(shù)據(jù)的效果。


圖l是本發(fā)明實(shí)施例提供的數(shù)據(jù)緩存方法的實(shí)現(xiàn)流程圖2是本發(fā)明實(shí)施例提供的幀緩存狀態(tài)更新機(jī)制的一個(gè)具體示例圖3是本發(fā)明實(shí)施例提供的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替的具體示 例圖4是本發(fā)明實(shí)施例提供的C^D的狀態(tài)輪替示意圖; 圖5是本發(fā)明實(shí)施例提供的C+D的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替 示意圖6是本發(fā)明實(shí)施例提供的D^E的狀態(tài)輪替示意圖; 圖7是本發(fā)明實(shí)施例提供的D^E的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替 示意圖8是本發(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í)施例中,設(shè)置每塊幀緩存的狀態(tài),所述幀緩存的狀態(tài)用于標(biāo)識(shí) 幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài),根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條件下的 狀態(tài)更新機(jī)制,確定每塊幀緩存的緩存任務(wù),并更新每塊幀緩存的狀態(tài),從而 在一幀數(shù)據(jù)幀緩存完畢時(shí),即可快速的切換到另一個(gè)幀緩存來接收下一幀數(shù)據(jù), 避免了具有恒定速度或流量的數(shù)據(jù)幀被丟失。
圖1示出了本發(fā)明實(shí)施例提供的內(nèi)存的數(shù)據(jù)緩存方法的實(shí)現(xiàn)流程,詳述如

在步驟S101中,將內(nèi)存的存儲(chǔ)空間配置為N塊幀緩存,并設(shè)置每塊幀援 存的狀態(tài),幀緩存的狀態(tài)用于標(biāo)識(shí)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài)。
在將內(nèi)存的存儲(chǔ)空間配置為N塊幀緩存時(shí),將每塊幀緩存的大小配置為一 幀數(shù)據(jù)大小,并為每塊幀緩存配置一標(biāo)號(hào),如Buffer—1 , Buffer—2,Buffer_3,……, Buffer—n,以區(qū)分每塊幀緩存。其中N為大于3的自然數(shù)。
在N塊幀緩存中緩存數(shù)據(jù)時(shí),設(shè)置5種幀緩存的狀態(tài),用于標(biāo)識(shí)幀緩存的 數(shù)據(jù)存儲(chǔ)狀態(tài)。其中5種幀緩存的狀態(tài)分別為正在緩存數(shù)據(jù)狀態(tài)(也稱為Getting 狀態(tài))、準(zhǔn)備緩存數(shù)據(jù)狀態(tài)(也稱為Preparing狀態(tài))、已經(jīng)緩存數(shù)據(jù)狀態(tài)(也 稱為Ready狀態(tài))、被數(shù)據(jù)占用狀態(tài)(也稱為Output狀態(tài))、以及空閑狀態(tài)(也 稱為Null狀態(tài))。其中Getting狀態(tài)是指幀緩存正在援存數(shù)據(jù);Preparing狀態(tài) 是指幀緩存準(zhǔn)備緩存數(shù)據(jù);Ready狀態(tài)是指幀緩存已經(jīng)緩存數(shù)據(jù),可以提供給 編碼程序使用;Output狀態(tài)是指幀緩存已經(jīng)被數(shù)據(jù)占用,暫時(shí)不能用來緩存數(shù) 據(jù);Null狀態(tài)是指幀緩存處于無可用數(shù)據(jù)的空閑狀態(tài),可以用來緩存數(shù)據(jù)。
在開始緩存數(shù)據(jù)前,為每塊幀緩存設(shè)置初始狀態(tài),其中設(shè)置至少一塊幀緩 存的狀態(tài)為Preparing狀態(tài),其余幀緩存可以均設(shè)置為Null狀態(tài)。如可以設(shè)置 Buffer—1的狀態(tài)為Preparing狀態(tài),Buffer—2、 Buffer—3、 Buffer—4、 Buffer—5的 狀態(tài)均為Null狀態(tài)。
在步驟S102中,在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀態(tài)確定用于緩存下 一 幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條 件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài)。
在本發(fā)明實(shí)施例中,釆用直接存儲(chǔ)器存取方式(Direct Memory Access, DMA)將源地址中的數(shù)據(jù)傳輸至目的地址中,其中目的地址即為本發(fā)明實(shí)施例 中的內(nèi)存的相應(yīng)地址。當(dāng)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到預(yù)設(shè)的更新條件時(shí),如一 幀數(shù)據(jù)(如處于Getting狀態(tài)的A幀)緩存完畢時(shí),根據(jù)每塊幀緩存的狀態(tài)切 換到另一塊幀緩存來存儲(chǔ)下一幀數(shù)據(jù),即馬上向處于Preparing狀態(tài)的幀緩存中 (如Buffer—1中)傳輸B幀數(shù)據(jù),同時(shí)產(chǎn)生DMA中斷,DMA中斷處理函數(shù) 根據(jù)每塊幀緩存的狀態(tài),確定每塊幀緩存的緩存任務(wù),并根據(jù)預(yù)設(shè)的狀態(tài)更新 條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài)。
其中確定每塊幀緩存的緩存任務(wù)包括DMA的目的地址和源地址,以及傳 輸長度。其中DMA的目的地址的確定過程如下中斷處理函數(shù)從所有幀緩存 中尋找處于Null狀態(tài)的幀緩存,如果處于Null狀態(tài)的幀緩存的數(shù)量大于1,則 從中任意選擇一塊幀緩存(如Buffer_2 )作為DMA的目的地址。
在本發(fā)明另一實(shí)施例中,如果當(dāng)前不存在處于Null狀態(tài)的幀緩存,則中斷 處理函數(shù)從所有幀緩存中尋找處于Ready狀態(tài)的幀緩存,如果處于Ready狀態(tài) 的幀緩存的數(shù)量大于1,則從中任意選擇一塊幀緩存作為DMA的目的地址。
在本發(fā)明另 一實(shí)施例中,可以預(yù)先創(chuàng)建一先進(jìn)先出(First In First Out, FIFO ) 隊(duì)列,用于管理處于Ready狀態(tài)的幀緩存,在此稱為已緩存數(shù)據(jù)隊(duì)列(Ready 隊(duì)歹'])。該Ready隊(duì)列的最大容量為N-2,其中N為配置的幀緩存的塊數(shù)。 如果當(dāng)前不存在處于Null狀態(tài)的幀緩存,則中斷處理函數(shù)按照先進(jìn)先出的順序 從該Ready隊(duì)列中選擇一塊幀緩存作為DMA的目的地址。
在本發(fā)明另一實(shí)施例中,為了避免數(shù)據(jù)幀的丟失,確定下一數(shù)據(jù)幀的緩存 任務(wù)時(shí),如果當(dāng)前不存在處于Null狀態(tài)的幀緩存,則動(dòng)態(tài)申請(qǐng)一塊新的幀緩存, 并將該新的幀緩存作為DMA的目的地址。同時(shí)動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空間的幀 緩存總^t,即由原來的N調(diào)整為N+1,此時(shí)Ready隊(duì)列和Output隊(duì)列的容量也隨著增加。
在本發(fā)明實(shí)施例中,預(yù)設(shè)的狀態(tài)更新條件包括一幀數(shù)據(jù)緩存完畢、讀取幀
緩存、以及釋放幀緩存。其中一幀數(shù)據(jù)緩存完畢是指N塊幀緩存中處于Getting 狀態(tài)的幀緩存中數(shù)據(jù)緩存完畢;讀取幀緩存是指編碼程序從處于Ready狀態(tài)的 幀緩存中讀取數(shù)據(jù);釋放幀緩存是指編碼程序使用完處于Output狀態(tài)的幀緩存 中的數(shù)據(jù)。狀態(tài)更新條件包括一幀數(shù)據(jù)緩存完畢、讀取幀緩存、以及釋放幀緩 存。
而在上述預(yù)設(shè)的狀態(tài)更新條件下的狀態(tài)更新機(jī)制如下所述 在當(dāng)前幀數(shù)據(jù)緩存完畢時(shí),將下一幀數(shù)據(jù)傳輸至處于準(zhǔn)備緩存數(shù)據(jù)狀態(tài)的 幀緩存,并采用處于空閑狀態(tài)的其中一塊幀緩存存儲(chǔ)再下一幀數(shù)據(jù),同時(shí)將處 于Getting狀態(tài)的幀緩存的狀態(tài)更新為Ready狀態(tài),將處于Preparing狀態(tài)的幀 緩存的狀態(tài)更新為Getting狀態(tài),將處于Null狀態(tài)的其中一塊幀纟爰存的狀態(tài)更 新為Preparing狀態(tài)。
在本發(fā)明另一實(shí)施例中,在當(dāng)前幀數(shù)據(jù)緩存完畢時(shí),如果不存在處于Null 狀態(tài)的幀緩存,則將處于Ready狀態(tài)的其中一塊幀緩存的狀態(tài)更新為Preparing 狀態(tài)。
在本發(fā)明另一實(shí)施例中,在當(dāng)前幀數(shù)據(jù)緩存完畢時(shí),如果不存在處于Null 狀態(tài)的幀緩存,則按照先進(jìn)先出的順序從Ready隊(duì)列中確定一塊幀緩存,并將 該幀鄉(xiāng)爰存的狀態(tài)更新為Preparing狀態(tài)。
為了避免數(shù)據(jù)幀的丟失,在本發(fā)明另一實(shí)施例中,在當(dāng)前幀數(shù)據(jù)緩存完畢 時(shí),如果不存在處于Null狀態(tài)的幀緩存,則動(dòng)態(tài)申請(qǐng)一塊新的幀緩存,并將該 新的幀緩存的狀態(tài)設(shè)置為Preparing狀態(tài)。同時(shí)動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空間的幀緩 存總數(shù),即由原來的N調(diào)整為N + 1 ,此時(shí)Ready隊(duì)列和Output隊(duì)列的容量也 隨著增加。
當(dāng)讀取幀緩存時(shí),將讀取的幀緩存的狀態(tài)更新為Output狀態(tài)。 在本發(fā)明實(shí)施例中,由于只有在幀緩存已經(jīng)緩存完數(shù)據(jù),即幀緩存處于Ready狀態(tài)時(shí),編碼程序才能從該幀緩存中讀取到有效數(shù)據(jù),而編碼程序在處 于Ready狀態(tài)的幀緩存中讀取數(shù)據(jù)時(shí),是按照先進(jìn)先出的順序讀取的,因此, 將編碼程序取走數(shù)據(jù)的幀緩存的狀態(tài)更新為Output狀態(tài)的過程,即是將最先進(jìn)
在本發(fā)明另一實(shí)施例中,當(dāng)Ready隊(duì)列中幀緩存的數(shù)量大于1時(shí),如果編 碼程序需要同時(shí)使用多塊幀緩存中的數(shù)據(jù),則可以^l安照先進(jìn)先出的順序一次從 Ready隊(duì)列中讀取多個(gè)幀緩存中的數(shù)據(jù),從而使編碼程序可以同時(shí)使用原始幀 和參考幀,從而提高了編碼效率。此時(shí),將編碼程序讀取數(shù)據(jù)的所有幀緩存的 狀態(tài)更新為Output狀態(tài)。從而使編碼程序可以同時(shí)使用多塊幀緩存中的數(shù)據(jù), 提高了編碼效率。
在本發(fā)明實(shí)施例中,由于數(shù)據(jù)緩存完畢后的幀緩存即可直接提供給編碼程 序使用,從而避免了內(nèi)存拷貝。
當(dāng)釋放幀緩存時(shí),將被釋放的幀緩存的狀態(tài)更新為Null狀態(tài)。
在本發(fā)明實(shí)施例中,可以預(yù)先創(chuàng)建一 FIFO隊(duì)列,用于管理處于Output狀 態(tài)的幀緩存,在此稱為數(shù)據(jù)占用隊(duì)列(Output隊(duì)列)。該Output隊(duì)列的最大容 量為N-3,其中N為配置的幀緩存的塊數(shù),且任意時(shí)刻,Ready隊(duì)列和Output 隊(duì)列中的幀緩存的數(shù)量之和小于或者等于N-2,其中N為配置的幀緩存的塊 數(shù)。由于只有在編碼程序已經(jīng)讀取幀緩存中的數(shù)據(jù),即幀緩存處于Output狀態(tài) 時(shí),編碼程序才能使用該幀緩存中的數(shù)據(jù),因此,在將編碼程序使用完其中數(shù) 據(jù)的幀緩存的狀態(tài)更新為Null狀態(tài)的過程,即是將最先進(jìn)入Output隊(duì)列中的幀 緩存的狀態(tài)更新為Null狀態(tài)。
在本發(fā)明另一實(shí)施例中,當(dāng)Output隊(duì)列中幀緩存的數(shù)量大于1時(shí),如果編 碼程序同時(shí)使用完多塊幀緩存,則可以按照先進(jìn)先出的順序同時(shí)從Output隊(duì)列 中釋放多個(gè)幀緩存,此時(shí),將編碼程序釋放的所有幀緩存的狀態(tài)從Output狀態(tài) 更新為Null狀態(tài)。
圖2示出了本發(fā)明實(shí)施例提供的幀緩存狀態(tài)更新機(jī)制的一個(gè)具體示例,詳述如下
在此假設(shè)將內(nèi)存配置為5塊幀緩存,分別為Buffer—1、 Buffer_2、 Buffer—3、 Buffer—4、 Buffer_5,并假設(shè)在開始緩存數(shù)據(jù)后的某個(gè)時(shí)刻A, 5塊幀緩存的狀 態(tài)如圖2中的A所示,此時(shí),Ready隊(duì)列和Output隊(duì)列的狀態(tài)如圖3中的A所 示。以下循著圖2和圖3所示的A+B^C^D+E這幾個(gè)時(shí)刻的狀態(tài)變更來詳 細(xì)說明在狀態(tài)更新條件下的緩存機(jī)制。 (1 ) A^B
請(qǐng)參閱圖2, Buffer—1數(shù)據(jù)緩存完畢,此時(shí),DMA繼續(xù)向處于Preparing 狀態(tài)的Buffer—2傳輸數(shù)據(jù),并根據(jù)每塊幀緩存的狀態(tài),確定下一數(shù)據(jù)幀的緩存 任務(wù),同時(shí)根據(jù)狀態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài),其 具體過程為產(chǎn)生DMA中斷,中斷處理函數(shù)查詢處于Null狀態(tài)下的幀緩存(此 處為Buffer—3),將Buffer一3作為下一數(shù)據(jù)幀的目的地址,同時(shí)中斷處理函數(shù) 根據(jù)新的一幀數(shù)據(jù)緩存完畢條件下的狀態(tài)更新機(jī)制,將處于Getting狀態(tài)的 Buffer—1的狀態(tài)更新為Ready狀態(tài),將處于Preparing狀態(tài)的Buffer—2的狀態(tài)更 新為Getting狀態(tài),將處于Null狀態(tài)的Buffer—3的狀態(tài)更新為Preparing狀態(tài), 從而實(shí)現(xiàn)圖2所示的A^B的狀態(tài)輪替。
請(qǐng)參閱圖3,由于Buffer—1的狀態(tài)由Getting狀態(tài)更新為Ready狀態(tài),因此, 使Buffer—1進(jìn)入Ready隊(duì)列,從而實(shí)現(xiàn)圖3所示的A^B的Ready隊(duì)列和Output 隊(duì)列的狀態(tài)輪替。 (2) C
請(qǐng)參閱圖2,讀取幀緩存,即編碼程序需要讀取一幀數(shù)據(jù),此時(shí),編碼程 序按照先進(jìn)先出的順序從Ready隊(duì)列中讀取一幀(即Buffer_4中的數(shù)據(jù)),此 時(shí),根據(jù)讀取幀緩存條件下的狀態(tài)更新機(jī)制,將處于Ready狀態(tài)的Buffei^4的 狀態(tài)更新為Output狀態(tài),從而實(shí)現(xiàn)圖2所示的B>>C的狀態(tài)輪替。
請(qǐng)參閱圖3,由于Buffer—4的狀態(tài)由Ready狀態(tài)更新為Output狀態(tài),因此, 將Buffer_4從Ready隊(duì)列中取出,并使Buffer_4進(jìn)入Output隊(duì)列,從而實(shí)現(xiàn)圖
153所示的B+C的Ready隊(duì)列和Output隊(duì)列的狀態(tài)^^替。 (3) C》D
C^D的狀態(tài)輪替主要包括兩個(gè)步驟
步驟l:請(qǐng)參閱圖4,讀取幀緩存,即編碼程序需要讀取一幀數(shù)據(jù),此時(shí), 編碼程序按照先進(jìn)先出的順序從Ready隊(duì)列中讀取一幀(即Buffer—5中的數(shù) 據(jù)),此時(shí),根據(jù)讀取幀緩存條件下的狀態(tài)更新機(jī)制,將處于Ready狀態(tài)的 Buffer—5的狀態(tài)更新為Output狀態(tài),從而實(shí)現(xiàn)圖4所示的C^C,的狀態(tài)輪替。
請(qǐng)參與圖5 ,由于Buffer—5的狀態(tài)由Ready狀態(tài)更新為Output狀態(tài),因此, 將Buffer—5從Ready隊(duì)列中刪除,并使Buffer—5進(jìn)入Output隊(duì)列,從而實(shí)現(xiàn)圖 5所示的C^C,的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替。
步驟2:請(qǐng)參閱圖4, Buffer_2數(shù)據(jù)緩存完畢,此時(shí),DMA繼續(xù)向處于 Preparing狀態(tài)的Buffer—3傳輸數(shù)據(jù),并根據(jù)每塊幀緩存的狀態(tài),確定下一數(shù)據(jù) 幀的緩存任務(wù),同時(shí)根據(jù)狀態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的 狀態(tài),其具體過程為產(chǎn)生DMA中斷,中斷處理函數(shù)查詢5塊幀緩存中是否 存在處于Null狀態(tài)的幀緩存,由于不存在,此時(shí),按照先進(jìn)先出的順序從Ready 隊(duì)列中選擇最早進(jìn)入Ready隊(duì)列的幀緩存(此處為Buffer_l ),將BufferJ作 為下一數(shù)據(jù)幀的緩存任務(wù)的目的地址。同時(shí)中斷處理函數(shù)根據(jù)新的一幀數(shù)據(jù)緩 存完畢條件下的狀態(tài)更新機(jī)制,將處于Ready狀態(tài)的Buffer—1的狀態(tài)更新為
Preparing狀態(tài),將處于Getting狀態(tài)的Buffer—2的狀態(tài)更新為Ready狀態(tài),將 處于Preparing狀態(tài)的Buffer_3的狀態(tài)更新為Getting狀態(tài),從而實(shí)現(xiàn)圖4所示 的C,^D的狀態(tài)輪替。經(jīng)步驟1和步驟2之后,即可實(shí)現(xiàn)圖2所示的C^D的 狀態(tài)輪替。
請(qǐng)參閱圖5,由于Buffer—1的狀態(tài)由Ready狀態(tài)更新為Preparing狀態(tài),因 此,將Buffer—1從Ready隊(duì)列中刪除;由于Buffer—2的狀態(tài)由Getting狀態(tài)更 新為Ready狀態(tài),因此,使Buffer—2進(jìn)入Ready隊(duì)列,從而實(shí)現(xiàn)圖5所示的C'+D 的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替。經(jīng)步驟1和步驟2之后,即可實(shí)現(xiàn)圖3所示的C^D的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替。 (4) D—E
D^E的狀態(tài)輪替主要包括兩個(gè)步驟
步驟1:請(qǐng)參閱圖6, BufferJ數(shù)據(jù)緩存完畢,此時(shí),DMA繼續(xù)向處于 Preparing狀態(tài)的BufferJ傳輸數(shù)據(jù),并根據(jù)每塊幀緩存的狀態(tài),確定下一數(shù)據(jù) 幀的緩存任務(wù),同時(shí)根據(jù)狀態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的 狀態(tài),其具體過程為產(chǎn)生DMA中斷,中斷處理函數(shù)查詢5塊幀緩存中是否 存在處于Null狀態(tài)的幀緩存,由于不存在,此時(shí),按照先進(jìn)先出的順序從Ready 隊(duì)列中選擇最早進(jìn)入Ready隊(duì)列的幀緩存(此處為Buffer—2 ),將Buffer_2作 為下一數(shù)據(jù)幀的緩存任務(wù)的目的地址。同時(shí)中斷處理函數(shù)根據(jù)數(shù)據(jù)緩存完畢條 件下的狀態(tài)更新機(jī)制,將處于Ready狀態(tài)的Buffer—2的狀態(tài)更新為Preparing 狀態(tài),將處于Getting狀態(tài)的Buffer—3的狀態(tài)更新為Ready狀態(tài),將處于Preparing 狀態(tài)的Buffer—l的狀態(tài)更新為Getting狀態(tài),從而實(shí)現(xiàn)圖6所示的D^D,的狀 態(tài)輪替。
請(qǐng)參閱圖7 ,由于Buffer—2的狀態(tài)由Ready狀態(tài)更新為Preparing狀態(tài),因 此,將Buffer—2從Ready隊(duì)列中刪除;由于Buffer_3的狀態(tài)由Getting狀態(tài)更 新為Ready狀態(tài),因此,使Buffer—3進(jìn)入Ready隊(duì)列,從而實(shí)現(xiàn)圖7所示的 D+D,的Ready隊(duì)列和Output隊(duì)列的狀態(tài)4侖替。
步驟2:請(qǐng)參閱圖6,編碼程序按照先入先出的順序釋放Buffer—4,此時(shí), 根據(jù)釋放幀緩存的條件下的狀態(tài)更新機(jī)制,將處于Output狀態(tài)的Buffer_4的狀 態(tài)更新為Null狀態(tài),從而實(shí)現(xiàn)圖6所示的D,">E的狀態(tài)輪替。經(jīng)步驟1和步驟 2后,即可實(shí)現(xiàn)圖2所示的D+E的狀態(tài)4侖替。
請(qǐng)參閱圖7,由于Buffe匸4的狀態(tài)由Output狀態(tài)更新為Null狀態(tài),因此, 將Buffer—4從Output隊(duì)列中刪除,從而實(shí)現(xiàn)圖7所示的D,"^E的Ready隊(duì)列 和Output隊(duì)列的狀態(tài)輪替。經(jīng)步驟1和步驟2后,即可實(shí)現(xiàn)圖3所示的D+E 的Ready隊(duì)列和Output隊(duì)列的狀態(tài)輪替。圖8示出了本發(fā)明實(shí)施例提供的內(nèi)存的數(shù)據(jù)緩存裝置的結(jié)構(gòu),為了便于說
明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。該數(shù)據(jù)緩存裝置可以是內(nèi)置于數(shù)據(jù) 緩存設(shè)備中的軟件單元、硬件單元或者軟硬件相結(jié)合的單元,也可以作為獨(dú)立 的掛件集成到數(shù)據(jù)緩存設(shè)備中或者運(yùn)行于數(shù)據(jù)緩存設(shè)備的應(yīng)用系統(tǒng)中。該內(nèi)存
的存儲(chǔ)空間被配置為多塊幀緩存,其中
幀緩存配置單元81設(shè)置內(nèi)存中預(yù)設(shè)的每塊幀緩存的狀態(tài),幀緩存的狀態(tài)用 于標(biāo)識(shí)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài)。在將內(nèi)存的存儲(chǔ)空間配置為N塊幀緩存時(shí),將 每塊幀援存的大小配置為一幀數(shù)據(jù)大小,并為每塊幀緩存配置一標(biāo)號(hào),如
Buffer—1, Buffer—2, Buffer—3, ......, Buffer_n,以區(qū)分每塊幀緩存。其中N
為大于等于2的自然數(shù)。幀緩存的狀態(tài)包括Getting狀態(tài)、Preparing狀態(tài)、Ready 狀態(tài)、Output狀態(tài)、以及Null狀態(tài)。幀緩存各狀態(tài)的所表示的數(shù)據(jù)存儲(chǔ)狀態(tài)如 上所述,在此不再贅述。
數(shù)據(jù)緩存單元82在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀態(tài)確定用 于緩存下 一幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條 件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài)。該數(shù)據(jù)緩存單元82包括條件檢 測(cè)子單元821,數(shù)據(jù)傳輸子單元822,緩存任務(wù)產(chǎn)生子單元823,以及狀態(tài)更新 子單元824。
條件檢測(cè)子單元821實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條 件。其中預(yù)設(shè)的狀態(tài)更新條件包括一幀數(shù)據(jù)緩存完畢、讀取幀緩存、以及釋放 幀緩存。
數(shù)據(jù)傳輸子單元822在條件檢測(cè)子單元821檢測(cè)到數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到一幀 數(shù)據(jù)緩存完畢的狀態(tài)更新條件時(shí),向處于Preparing狀態(tài)的幀緩存中傳輸數(shù)據(jù)。
緩存任務(wù)產(chǎn)生子單元823在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀 態(tài)確定用于緩存下一幀數(shù)據(jù)的幀緩存。其中確定用于緩存下一幀數(shù)據(jù)的幀緩存 包括DMA的目的地址和源地址、以及傳輸長度。緩存任務(wù)產(chǎn)生子單元823確 定DMA的目的地址的過程如下從所有幀緩存中尋找處于Null狀態(tài)的幀緩存,如果處于Null狀態(tài)的幀緩存的數(shù)量大于1,則從中任意選擇一塊幀緩存(如 Buffer—2 ) DMA的目的地址。
在本發(fā)明另一實(shí)施例中,如果當(dāng)前不存在處于Null狀態(tài)的幀緩存,則緩存 任務(wù)產(chǎn)生子單元823從所有幀緩存中尋找處于Ready狀態(tài)的幀緩存,如果處于 Ready狀態(tài)的幀緩存的數(shù)量大于1,則從中任意選擇一塊幀緩存作為DMA的目 的地址。
在本發(fā)明另一實(shí)施例中,該數(shù)據(jù)緩存裝置還包括隊(duì)列存儲(chǔ)單元83。該隊(duì)列 存儲(chǔ)單元83預(yù)先建立兩個(gè)先進(jìn)先出隊(duì)列,分別為Ready隊(duì)列和Output隊(duì)列。 其中用于管理處于Ready狀態(tài)的幀緩存,其最大容量為N-2, N為配置的幀緩 存的塊數(shù)。Output隊(duì)列用于管理處于Output狀態(tài)的幀緩存,其最大容量為N-3, N為配置的幀緩存的塊數(shù),且任意時(shí)刻,Ready隊(duì)列和Output隊(duì)列中的幀緩 存的數(shù)量之和小于或者等于N-2。此時(shí),如果當(dāng)前不存在處于Null狀態(tài)的幀 緩存,則緩存任務(wù)產(chǎn)生子單元823按照先進(jìn)先出的順序從隊(duì)列存儲(chǔ)單元83的 Ready隊(duì)列中選擇一塊幀緩存作為DMA的目的地址。
為了避免數(shù)據(jù)幀的丟失,在本發(fā)明另一實(shí)施例中,該數(shù)據(jù)緩存裝置還包括 幀緩存申請(qǐng)單元,如果當(dāng)前不存在處于Null狀態(tài)的幀緩存,則幀緩存申請(qǐng)單元 動(dòng)態(tài)申請(qǐng)一塊新的幀緩存,并動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空間的幀緩存總數(shù)。此時(shí)緩 存任務(wù)產(chǎn)生子單元823將幀緩存申請(qǐng)單元申請(qǐng)的幀緩存作為DMA的目的地址。
狀態(tài)更新子單元824在條件檢測(cè)子單元821檢測(cè)到數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到預(yù)設(shè) 的狀態(tài)更新條件時(shí),采用該狀態(tài)更新條件下的狀態(tài)更新^4'j,更新每塊幀緩存 的狀態(tài)。
當(dāng)一幀數(shù)據(jù)緩存完畢時(shí),將處于Getting狀態(tài)的幀緩存的狀態(tài)更新為Ready 狀態(tài),將處于Preparing狀態(tài)的幀緩存的狀態(tài)更新為Getting狀態(tài),將處于Null 狀態(tài)的其中一塊幀緩存的狀態(tài)更新為Preparing狀態(tài)。
在本發(fā)明另一實(shí)施例中,當(dāng)一幀數(shù)據(jù)緩存完畢時(shí),如果不存在處于Null狀 態(tài)的幀緩存,則狀態(tài)更新子單元824將處于Ready狀態(tài)的其中一塊幀緩存的狀態(tài)更新為Preparing爿犬態(tài)。
在本發(fā)明另一實(shí)施例中,當(dāng)一幀數(shù)據(jù)緩存完畢時(shí),如果不存在處于Null狀 態(tài)的幀緩存,則狀態(tài)更新子單元824按照先進(jìn)先出的順序^v隊(duì)列存儲(chǔ)單元83 中的Ready隊(duì)列中確定一塊幀緩存,并將該幀緩存的狀態(tài)更新為Preparing狀態(tài)。
為了避免數(shù)據(jù)幀的丟失,在本發(fā)明另一實(shí)施例中,在新的一幀數(shù)據(jù)緩存完 畢條件下,如果不存在處于Null狀態(tài)的幀緩存,則狀態(tài)更新子單元824將幀緩 存申請(qǐng)單元申請(qǐng)的幀緩存的狀態(tài)設(shè)為Preparing狀態(tài)。
在讀取幀緩存時(shí),將被讀取的幀緩存的狀態(tài)更新為Output狀態(tài)。在本發(fā)明 實(shí)施例中,由于只有在幀緩存已經(jīng)緩存數(shù)據(jù),即幀緩存處于Ready狀態(tài)時(shí),才 能從該幀緩存中讀取到有效數(shù)據(jù),而在讀取幀緩存時(shí),是按照先進(jìn)先出的順序 讀取的,因此,將被讀取的幀緩存的狀態(tài)更新為Output狀態(tài)的過程,即是將最 先進(jìn)入Ready隊(duì)列中的幀緩存的狀態(tài)更新為Output狀態(tài)。
在本發(fā)明另 一實(shí)施例中,當(dāng)Ready隊(duì)列中幀《爰存的數(shù)量大于1時(shí),如果編 碼程序需要同時(shí)使用多塊幀緩存中的數(shù)據(jù),則可以按照先進(jìn)先出的順序一次從 Ready隊(duì)列中讀取多個(gè)幀緩存中的數(shù)據(jù),此時(shí),將被讀取的所有幀緩存的狀態(tài) 更新為Output狀態(tài)。從而使編碼程序可以同時(shí)使用多塊幀緩存中的數(shù)據(jù),提高 了編碼效率。
在釋放幀緩存時(shí),將被釋放的幀緩存的狀態(tài)更新為Null狀態(tài)。 由于只有在編碼程序已經(jīng)讀取幀緩存中的數(shù)據(jù),即幀緩存處于Output狀態(tài) 時(shí),編碼程序才能使用該幀緩存中的數(shù)據(jù),同時(shí)為了保證數(shù)據(jù)幀的連續(xù)性,在 本發(fā)明實(shí)施例中,在將被釋放的幀緩存的狀態(tài)更新為Null狀態(tài)時(shí),按照先進(jìn)先 出的順序?qū)⒆钕冗M(jìn)入Output隊(duì)列中的幀緩存的狀態(tài)更新為Null狀態(tài)。
在本發(fā)明另一實(shí)施例中,當(dāng)Output隊(duì)列中幀緩存的數(shù)量大于1時(shí),如果編 碼程序同時(shí)使用完多塊幀緩存,則可以按照先進(jìn)先出的順序同時(shí)從Output隊(duì)列 中釋放多個(gè)幀緩存,此時(shí),將被釋放的所有幀緩存的狀態(tài)從Output狀態(tài)更新為 Null狀態(tài)。
2在本發(fā)明實(shí)施例中,通過將內(nèi)存配置為N塊幀緩存,并為每塊幀緩存設(shè)置 標(biāo)識(shí)數(shù)據(jù)存儲(chǔ)情況的狀態(tài),并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條件 下的狀態(tài)更新機(jī)制,確定每塊幀緩存的緩存任務(wù),并更新每塊幀緩存的狀態(tài), 從而在當(dāng)前數(shù)據(jù)幀存儲(chǔ)完畢時(shí),即可快速的切換到另 一個(gè)幀緩存來接收下一幀
數(shù)據(jù);通過建立兩個(gè)先進(jìn)先出隊(duì)列,從而保證最早輸入的數(shù)據(jù)先被編碼程序使 用,使數(shù)據(jù)保持連續(xù)性;由于Ready隊(duì)列的容量可以在1塊幀緩存至N - 2塊 幀緩存之間動(dòng)態(tài)變動(dòng),從而在一定程度上起到了平衡輸入數(shù)據(jù)的速度和編碼速 度的作用;當(dāng)每塊幀緩存均緩存數(shù)據(jù)且編碼程序未釋放幀緩存時(shí),將最早緩存 數(shù)據(jù)的幀緩存釋放,從而可以重新緩存數(shù)據(jù);由于兩個(gè)先進(jìn)先出隊(duì)列的容量均 可以大于1,從而可以一次為編碼程序提供多個(gè)幀緩存的數(shù)據(jù),有效的提高了 編碼速度;同時(shí)由于可以動(dòng)態(tài)的改變幀緩存的個(gè)數(shù),在內(nèi)存容量允許時(shí),可以 達(dá)到不丟失一幀數(shù)據(jù)的效果。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā) 明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明 的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種內(nèi)存的數(shù)據(jù)緩存方法,所述內(nèi)存的存儲(chǔ)空間被配置為多塊幀緩存,其特征在于,所述方法包括下述步驟A、設(shè)置每塊幀緩存的狀態(tài),所述幀緩存的狀態(tài)用于標(biāo)識(shí)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài);B、在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀態(tài)確定用于緩存下一幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài)。
2、 如權(quán)利要求l所迷的方法,其特征在于,所述幀緩存的狀態(tài)包括正在緩 存數(shù)據(jù)狀態(tài)、準(zhǔn)備緩存數(shù)據(jù)狀態(tài)、已經(jīng)緩存數(shù)據(jù)狀態(tài)、被數(shù)據(jù)占用狀態(tài)、以及 空閑狀態(tài),所述狀態(tài)更新條件包括一幀數(shù)據(jù)緩存完畢、讀取幀緩存、以及釋放 幀緩存。
3、 如權(quán)利要求2所述的方法,其特征在于,所述步驟B具體包括 B1 、實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條件;B2、在當(dāng)前幀數(shù)據(jù)緩存完畢時(shí),將下一幀數(shù)據(jù)傳輸至處于準(zhǔn)備緩存數(shù)據(jù)狀 態(tài)的幀緩存,并采用處于空閑狀態(tài)的其中一塊幀緩存存儲(chǔ)再下一幀數(shù)據(jù),同時(shí) 將處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為已經(jīng)緩存數(shù)據(jù)狀態(tài),將處于準(zhǔn) 備緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為正在緩存數(shù)據(jù)狀態(tài),將處于空閑狀態(tài)的 其中一塊幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù)據(jù)狀態(tài);B3、當(dāng)讀取幀緩存時(shí),將讀取的幀緩存的狀態(tài)更新為被數(shù)據(jù)占用狀態(tài); B4、當(dāng)釋放幀緩存時(shí),將被釋放的幀緩存的狀態(tài)更新為空閑狀態(tài)。
4、 如權(quán)利要求3所迷的方法,其特征在于,所述方法還包括下述步驟 設(shè)置先進(jìn)先出的已緩存數(shù)據(jù)隊(duì)列和數(shù)據(jù)占用隊(duì)列,當(dāng)所述幀緩存的狀態(tài)為已經(jīng)緩存數(shù)據(jù)狀態(tài)時(shí),使所述幀緩存進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列,當(dāng)所述幀緩存 的狀態(tài)為被數(shù)據(jù)占用狀態(tài)時(shí),使所述幀緩存進(jìn)入所述數(shù)據(jù)占用隊(duì)列。
5、 如權(quán)利要求4所述的方法,其特征在于,所述已緩存數(shù)據(jù)隊(duì)列的最大容量為幀緩存塊數(shù)減2,所述數(shù)據(jù)占用隊(duì)列的最大容量為幀緩存塊數(shù)減3,所述已 緩存數(shù)據(jù)隊(duì)列中的幀緩存塊數(shù)與數(shù)據(jù)占用隊(duì)列中的幀緩存塊數(shù)之和小于或者等 于內(nèi)存中預(yù)設(shè)的幀緩存總數(shù)減2。
6、 如權(quán)利要求4所述的方法,其特征在于,所述步驟B具體包括 B1'、實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條件;B2'、如果當(dāng)前幀數(shù)據(jù)緩存完畢,將下一幀數(shù)據(jù)傳輸至處于準(zhǔn)備援存數(shù)據(jù)狀 態(tài)的幀緩存,并采用處于空閑狀態(tài)的其中一塊幀緩存存儲(chǔ)再下一幀數(shù)據(jù),同時(shí) 將處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為已經(jīng)緩存數(shù)據(jù)狀態(tài),將處于準(zhǔn) 備緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為正在緩存數(shù)據(jù)狀態(tài),如果當(dāng)前不存在處 于空閑狀態(tài)的幀緩存,按照先進(jìn)先出的順序,將最早進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列 中幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù)據(jù)狀態(tài),或者動(dòng)態(tài)申請(qǐng)一塊新的幀緩存,并 將所述新的幀緩存的狀態(tài)設(shè)為準(zhǔn)備緩存數(shù)據(jù)狀態(tài),同時(shí)動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空 間的幀緩存總凄t;B3,、當(dāng)讀取幀緩存時(shí),按照先進(jìn)先出的順序,將所述已緩存數(shù)據(jù)隊(duì)列中的 被讀取的一塊或者多塊幀緩存的狀態(tài)更新為被數(shù)據(jù)占用狀態(tài);B4,、當(dāng)釋放幀緩存時(shí),按照先進(jìn)先出的順序,將所述數(shù)據(jù)占用隊(duì)列中被釋 放的一塊或者多塊幀緩存的狀態(tài)更新為空閑狀態(tài)。
7、 一種內(nèi)存的數(shù)據(jù)緩存裝置,所述內(nèi)存的存儲(chǔ)空間被配置為多塊幀緩存, 其特征在于,所述裝置包括幀緩存配置單元,用于設(shè)置每塊幀緩存的狀態(tài),所述幀緩存的狀態(tài)用于標(biāo) 識(shí)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài),所述幀緩存的狀態(tài)包括正在緩存數(shù)據(jù)狀態(tài)、準(zhǔn)備緩 存數(shù)據(jù)狀態(tài)、已經(jīng)緩存數(shù)據(jù)狀態(tài)、被數(shù)據(jù)占用狀態(tài)、以及空閑狀態(tài);數(shù)據(jù)緩存單元,用于在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀態(tài)確 定用于緩存下一幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更 新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài),所述狀態(tài)更新條件包括一幀數(shù)據(jù)緩存完畢、讀取幀緩存、以及釋放幀緩存。
8、 如權(quán)利要求7所述的裝置,其特征在于,所述數(shù)據(jù)緩存單元包括 條件檢測(cè)子單元,用于實(shí)時(shí)檢測(cè)數(shù)據(jù)存儲(chǔ)狀態(tài)是否達(dá)到預(yù)設(shè)的狀態(tài)更新條件;數(shù)據(jù)傳輸子單元,用于在所述條件4企測(cè)子單元檢測(cè)到數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到一 幀數(shù)據(jù)緩存完畢的狀態(tài)更新條件時(shí),向處于準(zhǔn)備接收數(shù)據(jù)狀態(tài)的幀緩存中傳輸 數(shù)據(jù);緩存任務(wù)產(chǎn)生子單元,用于在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的 狀態(tài)確定用于緩存下一幀數(shù)據(jù)的幀緩存;狀態(tài)更新子單元,用于在所述條件檢測(cè)子單元檢測(cè)到數(shù)據(jù)存儲(chǔ)狀態(tài)達(dá)到預(yù) 設(shè)的狀態(tài)更新條件時(shí),采用所述狀態(tài)更新條件下的狀態(tài)更新^4'J,更新每塊幀緩存的狀態(tài)。
9、 如權(quán)利要求8所述的裝置,其特征在于,所述狀態(tài)更新子單元在一幀數(shù) 據(jù)緩存完畢時(shí),將處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為已經(jīng)緩存數(shù)據(jù) 狀態(tài),將處于準(zhǔn)備緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為正在緩存數(shù)據(jù)狀態(tài),將 處于空閑狀態(tài)的其中 一 塊幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù)據(jù)狀態(tài);在讀取幀緩存時(shí),將被讀取的幀緩存的狀態(tài)更新為被數(shù)據(jù)占用狀態(tài); 在釋放幀緩存時(shí),將被釋放的幀緩存的狀態(tài)更新為空閑狀態(tài)。
10、 如權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括 隊(duì)列存儲(chǔ)單元,用于存儲(chǔ)已緩存數(shù)據(jù)隊(duì)列和數(shù)據(jù)占用隊(duì)列,當(dāng)所述幀緩存的狀態(tài)為已經(jīng)緩存數(shù)據(jù)狀態(tài)時(shí),使所述幀緩存進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列,當(dāng)所 述幀緩存的狀態(tài)為^皮數(shù)據(jù)占用狀態(tài)時(shí),使所述幀緩存進(jìn)入所述數(shù)據(jù)占用隊(duì)列。
11、 如權(quán)利要求IO所述的裝置,其特征在于,所述已緩存數(shù)據(jù)隊(duì)列的最大 容量為幀緩存塊數(shù)減2,所述數(shù)據(jù)占用隊(duì)列的最大容量為幀緩存塊數(shù)減3,所述 已緩存數(shù)據(jù)隊(duì)列中的幀緩存塊數(shù)與數(shù)據(jù)占用隊(duì)列中的幀緩存塊數(shù)之和小于或者 等于內(nèi)存中預(yù)設(shè)的幀緩存總數(shù)減2。
12、 如權(quán)利要求IO所述的裝置,其特征在于,所述狀態(tài)更新子單元在一幀數(shù)據(jù)緩存完畢時(shí),采用處于準(zhǔn)備緩存數(shù)據(jù)狀態(tài)的幀緩存存儲(chǔ)下一幀數(shù)據(jù),并將 處于正在緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為已經(jīng)緩存數(shù)據(jù)狀態(tài),將處于準(zhǔn)備 緩存數(shù)據(jù)狀態(tài)的幀緩存的狀態(tài)更新為正在緩存數(shù)據(jù)狀態(tài),如果當(dāng)前不存在處于 空閑狀態(tài)的幀緩存時(shí),按照先進(jìn)先出的順序,將最早進(jìn)入所述已緩存數(shù)據(jù)隊(duì)列中幀緩存的狀態(tài)更新為準(zhǔn)備緩存數(shù)據(jù)狀態(tài);在讀取幀緩存時(shí),按照先進(jìn)先出的順序,將所迷已緩存數(shù)據(jù)隊(duì)列中被讀取 的 一 塊或者多塊幀緩存的狀態(tài)更新為被數(shù)據(jù)占用狀態(tài);在釋放幀緩存時(shí),按照先進(jìn)先出的順序,將所述數(shù)據(jù)占用隊(duì)列中被釋放的 一塊或者多塊幀緩存更新為空閑狀態(tài)。
13、如權(quán)利要求IO所述的裝置,其特征在于,所述裝置還包括幀緩存申請(qǐng)單元,用于在一幀數(shù)據(jù)緩存完畢,且不存在處于空閑狀態(tài)的幀 緩存時(shí),動(dòng)態(tài)申請(qǐng)一塊新的幀緩存,并將所述新的幀緩存的狀態(tài)設(shè)為準(zhǔn)備緩存 數(shù)據(jù)狀態(tài),同時(shí)動(dòng)態(tài)調(diào)整內(nèi)存的存儲(chǔ)空間的幀緩存總數(shù)。
全文摘要
本發(fā)明適用于數(shù)據(jù)存儲(chǔ)領(lǐng)域,提供了一種數(shù)據(jù)緩存方法、裝置及設(shè)備,所述方法包括下述步驟將內(nèi)存的存儲(chǔ)空間配置為多塊幀緩存,并設(shè)置每塊幀緩存的狀態(tài),所述幀緩存的狀態(tài)用于標(biāo)識(shí)幀緩存的數(shù)據(jù)存儲(chǔ)狀態(tài);在當(dāng)前幀數(shù)據(jù)緩存完畢前,根據(jù)每塊幀緩存的狀態(tài)確定用于緩存下一幀數(shù)據(jù)的幀緩存,并根據(jù)每塊幀緩存的狀態(tài)以及預(yù)設(shè)的狀態(tài)更新條件下的狀態(tài)更新機(jī)制,更新每塊幀緩存的狀態(tài)。本發(fā)明實(shí)施例在緩存當(dāng)前數(shù)據(jù)幀時(shí),即確定下一數(shù)據(jù)幀的緩存任務(wù),從而保證在當(dāng)前新的一幀數(shù)據(jù)緩存完畢時(shí),可以快速的切換到用于緩存下一數(shù)據(jù)幀的幀緩存,避免了數(shù)據(jù)丟失。本發(fā)明實(shí)施例同時(shí)可以提高編碼效率。
文檔編號(hào)G06F12/08GK101567849SQ20091010692
公開日2009年10月28日 申請(qǐng)日期2009年4月30日 優(yōu)先權(quán)日2009年4月30日
發(fā)明者侯景昆 申請(qǐng)人:炬才微電子(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
奈曼旗| 定边县| 兴义市| 都安| 拉萨市| 婺源县| 江源县| 全椒县| 柳江县| 长垣县| 平塘县| 元谋县| 江城| 衢州市| 安达市| 措勤县| 渭源县| 新绛县| SHOW| 安仁县| 清涧县| 玉环县| 治县。| 清镇市| 辽阳市| 大兴区| 旬阳县| 阳春市| 阳江市| 芷江| 鄂托克前旗| 巢湖市| 利辛县| 海丰县| 门源| 大洼县| 阳东县| 喀什市| 简阳市| 泗洪县| 曲阜市|