一種視頻編解碼方法
【技術領域】
[0001] 本發明涉及視頻數據編解碼領域,尤其涉及一種視頻編解碼方法。
【背景技術】
[0002] 在現有技術中,對一幀視頻數據的編解碼通常采用光柵掃描(raster掃描)的方 式進行。圖1所示為現有技術提供的一種視頻編解碼方法的原理示意圖。如圖1所示,現 有的編解碼方式為:首先從第一行宏塊的第〇個宏塊依次編解碼至第P-1個,然后再開始第 二行第〇個宏塊至第P-1個宏塊的編解碼,以此類推至當前幀圖像的最后一個宏塊行。該 視頻編解碼方法可通過如下偽代碼實現:
[0003] For(j= 0 ;j< (pic_h+P-l)/N;j++) {
[0004] For(i= 0 ;i< (pic_w+P-l)/N;i++) {
[0005] Codec_MB(i,j);
[0006] }
[0007] }
[0008] 其中,pic_h/pic_w分別為當前幀圖像的高度(Picture_height)和寬度 (Picture_width)。Codec_MB(I,j)指對第i宏塊行的第j個宏塊進行編解碼。
[0009] 在對一個宏塊進行編解碼的過程中,需要利用參考幀圖像中位于該宏塊周邊的一 個相鄰宏塊的數據作為參考幀數據,以此來提高對該宏塊的編解碼效率。其中,用于搜索該 相鄰宏塊的參考幀范圍稱為當前宏塊的運動搜索窗。為了使得當前宏塊的運動搜索窗能夠 在下一個宏塊的編解碼過程中被重復利用,需要將該當前宏塊的運動搜索窗數據緩存在一 個存儲器中。由于存儲器中的緩存數據需要從一個動態隨機存儲器ODR)中讀取,而反復 從DDR中讀取數據會降低編解碼效率,因此應盡量提高存儲器中緩存數據的數據利用率。
[0010] 在現有的編解碼方法中,通常采用如下兩種方式來緩存運動搜索窗數據。
[0011] 圖2所示為現有技術提供的一種視頻編解碼方法中緩存參考幀數據的原理示意 圖。如圖2所示,CB1為當前要進行編解碼的宏塊,CB0為已緩存運動搜索窗數據的宏塊,每 個宏塊的長寬均為為N個像素。當假設針對一個像素的運動搜索窗高為SRv-1,寬為SRh-1 時(在視頻編碼中,SRv/SRh所針對的是像素個數的概念,由于在算法設計中變量一般從0 開始,因此需要將運動搜索窗的高表示為SRv-1,寬表示為SRh-1);則針對一個宏塊的運動 搜索窗的高為SRv+N-1,寬為SRh+N-1。又由于CB1的運動搜索窗需要相對于CB0右移一個 宏塊的寬度(N個像素),因此用于緩存運動搜索窗數據的存儲器大小需對應高為SRv+N-1, 寬為SRh+2N-l的矩形窗口內的參考幀數據。然而,當采用這種緩存方式時,存儲器所緩存 的運動搜索窗數據的利用率很低。這是因為當編解碼至一宏塊行的最后一個宏塊時,存儲 器中所緩存的僅為當前宏塊行最后一個宏塊的運動搜索窗數據,而由于該當前宏塊行最后 一個宏塊的運動搜索窗距下一行的第一個宏塊距離較遠,因而存儲器中的緩存數據往往 不能被重復利用。因此,雖然隨著當前宏塊行編解碼的逐漸進行,存儲器中所緩存的運動 搜索窗數據在水平方向上的利用率可達100% ;但在垂直方向上的利用率僅有一個宏塊行 的高度。因此,存儲器中緩存數據的數據利用率=水平利用率*垂直利用率,可表示為N/ (SRv+N-1)〇
[0012] 為了解決存儲器所緩存運動搜索窗數據在垂直方向上的利用率低的問題,現有技 術還提供了另一種緩存運動搜索窗數據的方式。
[0013] 圖3所示為現有技術提供的另一種視頻編解碼方法中緩存參考幀數據的原理示 意圖。如圖3所示,存儲器中所緩存的為一個與當前幀圖像等寬的運動搜索窗數據,這樣當 編解碼至下一宏塊行的第一個宏塊時,該宏塊的運動搜索窗必然會與已緩存的運動搜索窗 數據有所重疊。因此隨著光柵掃描編解碼的逐漸進行,存儲器中已緩存的動搜索窗數據在 水平和垂直方向上都會被100 %利用。然而,采用這種緩存方式時存儲器的大小需對應高為 SRv+N-1,寬為當前幀圖像寬度(Picture_Width)的矩形窗口內的參考幀數據,這就需要在 硬件架構中使用大容量的存儲器,從而會導致較大的硬件成本。
[0014] 由此可見,采用現有的視頻編解碼方法根本無法達到硬件成本和緩存數據利用率 之間的平衡。因此,急需一種既節省硬件成本又兼顧緩存數據利用率的新的視頻編解碼方 法。
【發明內容】
[0015] 本發明實施例提供一種視頻編解碼方法,既能有效利用已緩存的運動搜索窗數 據,提高數據利用率,又能節省硬件成本。
[0016] -種視頻編解碼方法,包括:
[0017] 將當前幀圖像分為至少兩個編解碼區域,每個編解碼區域的高度與當前幀圖像的 高度相同;
[0018] 在每個編解碼區域內部,按照光柵掃描的方式進行編解碼;其中,將與上一宏塊行 對應的運動搜索窗數據緩存在一存儲器中;利用所述存儲器中的運動搜索窗數據對當前宏 塊行進行編碼。
[0019] 本發明實施例提供的一種視頻編解碼方法,通過將當前幀圖像分成多個編解碼區 域,在每個編解碼區域內部進行編解碼時,存儲器中僅需緩存一個編解碼區域寬度的運動 搜索窗數據,從而不需要大容量的存儲器來完成緩存;且當對當前編解碼區域內的下一宏 塊行進行編解碼時,仍能夠重復利用存儲器中緩存的運動搜索窗數據。由此便實現了一種 既能節省硬件成本,又能有效利用已緩存運動搜索窗數據的視頻編解碼方法。
【附圖說明】
[0020] 圖1所示為現有技術提供的一種視頻編解碼方法的原理示意圖。
[0021] 圖2所示為現有技術提供的一種視頻編解碼方法中緩存參考幀數據的原理示意 圖。
[0022] 圖3所示為現有技術提供的另一種視頻編解碼方法中緩存參考幀數據的原理示 意圖。
[0023] 圖4所示為本發明一實施例提供的一種視頻編解碼方法的原理示意圖。
[0024] 圖5所示為本發明另一實施例提供的一種視頻編解碼方法的原理示意圖。
[0025] 圖6所示為本發明一實施例提供的一種視頻編解碼方法中緩存參考幀數據的原 理示意圖。
【具體實施方式】
[0026] 為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例 中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是 本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員 在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0027] 本發明一實施例提供的一種視頻編解碼方法包括:將當前幀圖像分為至少兩個編 解碼區域,每個編解碼區域的高度與當前幀圖像的高度相同;在每個編解碼區域內部,按照 光柵掃描的方式進行編解碼;其中,將與上一宏塊行對應的運動搜索窗數據緩存在一存儲 器中;利用所述存儲器中的運動搜索窗數據對當前宏塊行進行編碼。
[0028] 這樣在每個編解碼區域內部進行編解碼時,存儲器中僅需緩存一個編解碼區域寬 度的運動搜索窗數據,從而不需要大容量的存儲器來完成緩存;且當對當前編解碼區域內 的下一宏塊行進行編解碼時,仍能夠重復利用存儲器中緩存的運動搜索窗數據。由此便實 現了一種既能節省硬件成本,又能有效利用已緩存運動搜索窗數據的視頻編解碼方法。
[0029] 下面通過一個實施例來詳細說明本發明視頻編解碼方法的技術方案。
[0030] 圖4所示為本發明一實施例提供的一種視頻編解碼方法的原理示意圖。如圖4所 示,通過限制當前幀圖像的水平掃描寬度Horizontal_scan_size,將當前幀視頻圖像被分 為了多個編解碼區域,每個編解碼區域內的一個宏塊行包括P個宏塊(編號從〇到P-1)。
[0031] 這樣在每個編解碼區域內部,仍以宏塊為單位按照光柵掃描的順序進行編解碼。 具體而言,首先從當前編解碼區域內第一行宏塊的第0個宏塊