專利名稱:一種視頻編解碼過程中參考幀的宏塊數據寫入的方法
技術領域:
本發明涉及一種視頻算法編解碼處理過程中的方法,尤其是一種參考幀的宏塊數據寫入的方法。
背景技術:
基于運動估計的視頻編碼算法中往往將輸入幀分割成若干宏塊,其編解碼的過程則以宏塊為單元進行。如解碼時是利用參考幀和運動矢量得到預測幀,加上圖像殘差得到恢復數據。具體來講是首先從碼流(bit stream)數據中分離出運動矢量和圖像殘差,分別進行熵編碼(Entropy encode);然后將運動矢量和參考幀對應的宏塊進行運動估計(motion estimation,ME),最后再加上圖像殘差,將恢復的宏塊數據保存用作下一幀的參考幀。
由于幀數據在內存中存儲時是按幀的行列順序地址存放,而對于每個宏塊而言,其內部的數據地址是不連續的,因此,在將恢復的宏塊數據保存用作下一幀的參考幀時,即寫宏塊數據時,預讀的內存地址往往是無效的。并且,當進行下一幀解碼運動估計時,操作系統對內存的讀取也是以宏塊為單元,而系統是以存儲的順序地址來進行緩沖,就會造成數據讀取的地址失效。因此操作系統在處理參考幀時對宏塊的讀寫都會造成額外的緩沖命中失誤(cache miss)。
發明內容
本發明的目的是針對現有技術的不足,提供一種簡單合理、可減少緩沖命中失誤、提高讀寫效率的視頻編碼過程中解參考幀的宏塊數據寫入的方法。
為了解決上述技術問題,本發明所采取的技術方案是一種視頻編解碼過程中參考幀的宏塊數據寫入的方法,是在對宏塊進行寫操作時,按照宏塊數據的順序進行地址連續的寫操作。
其步驟可以為步驟1、等待一個宏塊數據編解碼處理完成;步驟2、將編解碼處理完成后的該宏塊的數據按照所在行列的順序,以連續的地址依次寫入到參考幀存儲區內;步驟3、等待該宏塊數據寫操作完成;步驟4、判斷是否完成了所有的宏塊的寫操作,如果沒有,則跳轉至步驟1,循環處理參考幀的所有宏塊,至寫入所有參考幀內宏塊數據后結束。
所述步驟2具體可以為步驟20、獲得參考幀的存儲區內待寫入的宏塊數據的首地址,使寫地址=首地址;步驟21、獲得緩沖區內將進行寫操作的宏塊數據的首數據,使寫數據=首數據;步驟22、將所述寫數據依所述寫地址寫入到參考幀的存儲區;步驟23,所述寫數據為本宏塊數據的最后一個數據嗎?是則跳轉至步驟29,否則執行步驟24;步驟24、所述寫數據為本宏塊數據內的所處行中的最后一個數據嗎?是則執行步驟25,否則跳轉步驟26;步驟25,獲得所述寫數據的下一行的第一個數據,并作為新的寫數據,跳轉至步驟27;步驟26,獲得宏塊數據內所述寫數據右邊相鄰的一個數據,并作為新的寫數據;步驟27、使寫地址=寫地址+1;步驟28,將所述新的寫數據依所述寫地址寫入到參考幀的存儲區;步驟29,本宏塊數據的寫操作完成。
在上述技術方案中,本發明由于在寫參考幀時,是按照宏塊內部數據的行列順序,依次寫入內存,使每個宏塊內部數據的存儲地址是連續的。這樣,一方面,由于宏塊內部的地址是連續存放的,在對宏塊進行寫操作時,不需要重新計算實際存儲地址,而只需要直接順序寫入,從而保證之前緩沖的內存地址有效。另一方面,這樣存儲的宏塊在作為下一幀的參考幀時,由于宏塊內部數據的存儲地址已經是連續的,則讀取該宏塊時,裝入系統緩沖區內的數據將為有效的宏塊數據,從而節省了數據讀取的時間,同時也避免了緩沖命中失誤。因此,相對現有技術,本發明具有可有效避免緩沖命中失誤,提高視頻編解碼過程中參考幀的讀寫效率和速度等特點。
附圖1為本發明一種視頻解碼過程中參考幀的宏塊數據寫入的方法較佳實施例的工作流程圖;附圖2為圖1中步驟2的詳細工作流程圖;附圖3為本發明宏塊數據寫操作的示意圖;附圖4為現有技術宏塊數據寫操作的示意圖。
具體實施例方式
下面將結合說明書附圖及具體實施例對本發明作進一步詳細說明。
本發明所提供的一種視頻編解碼過程中參考幀的宏塊數據寫入的方法,是在對宏塊進行寫操作時,按照宏塊數據的順序進行地址連續的寫操作。
參考附圖1,本發明的一個較佳實施例的具體步驟為步驟1、等待一個宏塊數據編解碼處理完成;步驟2、將編解碼處理完成后的該宏塊的數據按照所在行列的順序,以連續的地址依次寫入到參考幀存儲區內;步驟3、等待該宏塊數據寫操作完成;步驟4、判斷是否完成了所有的宏塊的寫操作,如果沒有,則跳轉至步驟1,循環處理參考幀的所有宏塊,至寫入所有參考幀內宏塊數據后結束。
參考圖2,其中,所述步驟2具體為步驟20、獲得參考幀的存儲區內待寫入的宏塊數據的首地址,使寫地址=首地址;步驟21、獲得緩沖區內將進行寫操作的宏塊數據的首數據,使寫數據=首數據;步驟22、將所述寫數據依所述寫地址寫入到參考幀的存儲區;步驟23,所述寫數據為本宏塊數據的最后一個數據嗎?是則跳轉至步驟29,否則執行步驟24;步驟24、所述寫數據為本宏塊數據內的所處行中的最后一個數據嗎?是則執行步驟25,否則跳轉步驟26;步驟25,獲得所述寫數據的下一行的第一個數據,并作為新的寫數據,跳轉至步驟27;步驟26,獲得宏塊數據內所述寫數據右邊相鄰的一個數據,并作為新的寫數據;步驟27、使寫地址=寫地址+1;步驟28,將所述新的寫數據依所述寫地址寫入到參考幀的存儲區;步驟29,本宏塊數據的寫操作完成。
在上述步驟中,本實施例則完成了將宏塊數據按其所在位置的行列順序依次寫入參考幀的存儲區的寫操作過程。如圖3所示,假設共有25個16×16像素的宏塊,本發明寫操作時的順序可如圖3中箭頭所指方向,是在各個宏塊內順序對每個數據寫操作,從而使各個宏塊寫入參考幀的存儲區后的首地址如圖示,分別為0x00、0x100、0x200、0x300、0x400……。這樣就保證了參考幀內的宏塊數據是順序存儲的。
然后在現有技術中,其寫操作是按整幀數據的行列順序存儲,即為圖4中箭頭所指方向。則使整幀的每一行數據地址連續,如圖中第一行地址從0x00~0x4f。但是對于單個宏塊內部,如宏塊1,則其第一行地址為0x00~0x0f,第二行地址為0x50~0x5f,……由圖3、4對比可見,宏塊在內存中存儲時,其數據是按照幀的行列順序存儲,則對于一個宏塊而言,數據地址不連續。而在對宏塊編解碼處理時,調入緩沖區的宏塊數據按宏塊的行列順序存儲,則數據地址連續。那么在寫參考幀的時候,對一個宏塊進行寫操作,則不再重新計算宏塊的實際存儲地址,而是直接將緩沖區內的宏塊數據順序寫入內存,作為參考幀,由于其地址是連續的,因此不會出現緩沖命中失誤的問題。
權利要求
1.一種視頻編解碼過程中參考幀的宏塊數據寫入的方法,其特征在于在對宏塊進行寫操作時,按照宏塊數據的順序進行地址連續的寫操作。
2.如權利要求1所述視頻編解碼過程中參考幀的宏塊數據寫入的方法,其特征在于其步驟為步驟1、等待一個宏塊數據編解碼處理完成;步驟2、將編解碼處理完成后的該宏塊的數據按照所在行列的順序,以連續的地址依次寫入到參考幀存儲區內;步驟3、等待該宏塊數據寫操作完成;步驟4、判斷是否完成了所有的宏塊的寫操作,如果沒有,則跳轉至步驟1,循環處理參考幀的所有宏塊,至寫入所有參考幀內宏塊數據后結束。
3.如權利要求2所述視頻編解碼過程中參考幀的宏塊數據寫入的方法,其特征在于所述步驟2具體為步驟20、獲得參考幀的存儲區內待寫入的宏塊數據的首地址,使寫地址=首地址;步驟21、獲得緩沖區內將進行寫操作的宏塊數據的首數據,使寫數據=首數據;步驟22、將所述寫數據依所述寫地址寫入到參考幀的存儲區;步驟23,所述寫數據為本宏塊數據的最后一個數據嗎?是則跳轉至步驟29,否則執行步驟24;步驟24、所述寫數據為本宏塊數據內的所處行中的最后一個數據嗎?是則執行步驟25,否則跳轉步驟26;步驟25,獲得所述寫數據的下一行的第一個數據,并作為新的寫數據,跳轉至步驟27;步驟26,獲得宏塊數據內所述寫數據右邊相鄰的一個數據,并作為新的寫數據;步驟27、使寫地址=寫地址+1;步驟28,將所述新的寫數據依所述寫地址寫入到參考幀的存儲區;步驟29,本宏塊數據的寫操作完成。
全文摘要
本發明公開了一種視頻編解碼過程中參考幀的宏塊數據寫入的方法,是在對宏塊進行寫操作時,按照宏塊數據的順序進行地址連續的寫操作。具體而言是指在對某一個宏塊寫操作時,將其數據按照行列順序依次寫入到參考幀的連續地址的存儲區間內。這樣,一方面使在對宏塊進行寫操作時,不需要重新計算實際存儲地址,而只需要直接順序寫入,從而保證之前緩沖的內存地址有效。另一方面,這樣存儲的宏塊在作為下一幀的參考幀而被讀取時,裝入系統緩沖區內的數據將為有效的宏塊數據,從而節省了數據讀取的時間,同時也避免了緩沖命中失誤。因此,相對現有技術,本發明具有可有效避免緩沖命中失誤,提高視頻編解碼過程中參考幀的讀寫效率和速度等特點。
文檔編號H04N7/24GK1622628SQ20041010146
公開日2005年6月1日 申請日期2004年12月21日 優先權日2004年12月21日
發明者懷千江, 白峰, 王浩 申請人:北京中星微電子有限公司