驟,而直接采用之前所計(jì)算得到的16x16層的8x8子塊I的SAD代價(jià),一方面無需重新獲取8x8子塊I的參考像素,節(jié)省了計(jì)算步驟和功耗,另一方面避免了相同的整像素分?jǐn)?shù)矢量的不同子塊重復(fù)計(jì)算SAD代價(jià),大大提高了編碼效率。
[0064]而后進(jìn)入步驟S203第二獲取模塊從所述第二緩存模塊中獲取16x16子塊對(duì)應(yīng)的原始?jí)K像素,所述第一寄存器單元緩存16x16子塊對(duì)應(yīng)的原始?jí)K像素。在本實(shí)施方式中,獲取原始?jí)K像素是基于16x16子塊為單位進(jìn)行獲取。這樣,在計(jì)算每個(gè)16x16子塊的的分像素運(yùn)動(dòng)矢量時(shí),就將所需的不同層的原始?jí)K像素一次性獲取到主控單元中,并通過第一寄存器單元加以緩存。由于無論是16x16層的4個(gè)8x8塊,還是8x8層的4個(gè)8x8塊,或者是4x4層的16個(gè)4x4塊,它們對(duì)應(yīng)的原始?jí)K像素均包含于16x16子塊的原始?jí)K像素中,因而在計(jì)算各個(gè)不同的層子塊的SAD代價(jià)時(shí),第二獲取模塊只需從第一寄存器單元中獲取即可,而無需再分多次從第二緩存模塊中獲取,從而提高了原始?jí)K像素的復(fù)用程度。
[0065]而后進(jìn)入步驟S204第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對(duì)應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素,所述第二寄存器單元緩存參考?jí)K像素。在本實(shí)施方式中,所述“第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對(duì)應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:若參考幀復(fù)用維護(hù)單元記錄的8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量與上一8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0066]在本實(shí)施方式中,8x8層不同8x8子塊的第二整像素運(yùn)動(dòng)矢量的對(duì)應(yīng)關(guān)系具體包括:記錄相鄰編碼順序的8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量是否相同。例如8x8層包含有4個(gè)8x8層的8x8子塊,分別是8x8子塊a、8x8子塊b、8x8子塊c和8x8子塊d。編碼順序依次是子塊a、子塊b、子塊c和子塊d。那么參考幀復(fù)用維護(hù)單元會(huì)依次判斷8x8子塊a與8x8子塊b之間、8x8子塊b與8x8子塊c之間、8x8子塊c和8x8子塊d之間的第二像素運(yùn)動(dòng)矢量是否相同,并對(duì)結(jié)果予以記錄。例如子塊a和子塊b的第二像素運(yùn)動(dòng)矢量相同,則說明這兩個(gè)子塊的參考像素為可以復(fù)用參考像素的8x8子塊,說明它們的SAD代價(jià)相同,即計(jì)算出的分像素運(yùn)動(dòng)矢量相同。因而在計(jì)算到8x8層的8x8子塊b的SAD代價(jià)時(shí),會(huì)跳過計(jì)算步驟,而直接采用之前所計(jì)算得到的8x8層的8x8子塊a的SAD代價(jià),一方面無需重新獲取8x8子塊b的參考像素,節(jié)省了計(jì)算步驟和功耗,另一方面避免了相同的整像素分?jǐn)?shù)矢量的不同子塊重復(fù)計(jì)算SAD代價(jià),大大提高了編碼效率。4x4層不同4x4子塊的第三整像素矢量的對(duì)應(yīng)關(guān)系同理可得,具體包括:記錄相鄰編碼順序的8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量是否相同。而如果子塊a和子塊b的第二像素運(yùn)動(dòng)矢量不同,則說明兩個(gè)子塊之間的SAD代價(jià)的計(jì)算結(jié)果是不同的,因而在計(jì)算子塊b的SAD代價(jià)時(shí),需要從第三緩存模塊中獲取子塊b對(duì)應(yīng)的參考?jí)K像素,以便繼續(xù)子塊b的SAD計(jì)算。
[0067]在某些實(shí)施方式中,所述“第三獲取模塊用于根據(jù)整像素運(yùn)動(dòng)矢量之間的對(duì)應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:若參考幀復(fù)用維護(hù)單元記錄的4x4層的4x4子塊的第三像素運(yùn)動(dòng)矢量與上一4x4層的4x4子塊的第三像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0068]對(duì)于4x4層而言,包含有16個(gè)4x4層的4x4子塊,以4x4層依據(jù)編碼順序排序的前4個(gè)4x4子塊為例,分別是4x4子塊1、4x4子塊2、4x4子塊3和4x4子塊4。參考幀復(fù)用維護(hù)單兀會(huì)判斷4x4子塊I與4x4子塊2之間、4x4子塊2與4x4子塊3之間、4x4子塊3和4x4子塊4之間的第二整像素運(yùn)動(dòng)矢量是否相同,并對(duì)結(jié)果予以存儲(chǔ)記錄。在獲取4x4子塊I的參考?jí)K像素時(shí),第三獲取單元會(huì)從第三緩存模塊中獲取一個(gè)數(shù)倍于4x4子塊大小的參考?jí)K,并將所獲取的參考?jí)K像素緩存于第二寄存器中,例如在本實(shí)施方式中,所獲取的參考?jí)K的大小為32x10或10x32大小。在計(jì)算4x4子塊2的SAD代價(jià)時(shí),若參考幀復(fù)用維護(hù)單元所記錄的4x4子塊I與4x4子塊2之間第三整像素運(yùn)動(dòng)矢量相同,則說明4x4子塊I與4x4子塊2的參考像素為可以復(fù)用參考像素的4x4子塊,說明它們的SAD代價(jià)相同,即計(jì)算出的分像素運(yùn)動(dòng)矢量相同。因而在計(jì)算4x4子塊2的SAD代價(jià)時(shí),會(huì)跳過計(jì)算步驟,而直接采用之前所計(jì)算得到的4x4子塊I的SAD代價(jià),一方面無需重新獲取4x4子塊2的參考像素,節(jié)省了計(jì)算步驟和功耗,另一方面避免了相同的整像素分?jǐn)?shù)矢量的不同子塊重復(fù)計(jì)算SAD代價(jià),大大提高了編碼效率。而如果4x4子塊I與4x4子塊2的第三整像素運(yùn)動(dòng)矢量不同,則說明它們所要獲取的參考?jí)K像素是不同的,因而第三獲取模塊首先會(huì)在第二寄存器中搜索是否存在著4x4子塊2所需的參考?jí)K像素,(由于緩存的是一個(gè)數(shù)倍于4x4子塊大小的參考?jí)K,因而首先會(huì)在第二寄存器中進(jìn)行搜索),若存在則第三獲取模塊從第二寄存器中獲取4x4子塊2對(duì)應(yīng)的參考?jí)K像素,以便進(jìn)行4x4子塊2的SAD代價(jià)的計(jì)算,若不存在則第三獲取模塊會(huì)重新從第三緩存單元中獲取一個(gè)數(shù)倍于4x4子塊大小的參考?jí)K,并將所獲取的參考?jí)K像素緩存于第二寄存器中(刷新寄存器),而后重復(fù)上述步驟從第二寄存器中重新獲取4x4子塊2所需的參考?jí)K像素。
[0069]而后進(jìn)入步驟S205SAD代價(jià)計(jì)算單元從所述第一寄存器單元中獲取原始?jí)K像素,以及從所述第二寄存器單元獲取參考?jí)K像素,并進(jìn)行SAD代價(jià)計(jì)算,得到多個(gè)不同位置的參考?jí)K像素SAD代價(jià)。SAD代價(jià)可以是一個(gè)數(shù)值,計(jì)算某個(gè)像素塊的SAD代價(jià)所需的必要參數(shù)是該像素塊對(duì)應(yīng)的原始?jí)K像素和參考?jí)K像素,具體地,在H264協(xié)議中,對(duì)于每個(gè)參考?jí)K像素而言,SAD代價(jià)計(jì)算單元會(huì)在其附近插值出49個(gè)不同位置的參考?jí)K像素,并分別計(jì)算這49個(gè)不同位置的參考?jí)K像素對(duì)應(yīng)的SAD代價(jià),具體的算法依據(jù)H264協(xié)議。
[0070]而后進(jìn)入步驟S206SAD代價(jià)選取單元將不同位置的參考?jí)K像素SAD代價(jià)進(jìn)行比較,選取SAD代價(jià)最小的參考?jí)K像素的SAD代價(jià)值,并計(jì)算該參考?jí)K像素與原始?jí)K像素的分像素運(yùn)動(dòng)矢量。SAD代價(jià)為表征該參考?jí)K像素是否為最優(yōu)的參考?jí)K像素的物理量,SAD代價(jià)越小,說明參考?jí)K像素越接近原始?jí)K像素。SAD代價(jià)選取單元會(huì)從所插值出的49個(gè)不同位置的參考?jí)K像素中,選取SAD代價(jià)最小的參考?jí)K像素的SAD代價(jià)值,并計(jì)算該參考?jí)K像素與原始?jí)K像素的分像素運(yùn)動(dòng)矢量,計(jì)算得到的分像素運(yùn)動(dòng)矢量即為所獲取的原始?jí)K像素的分像素運(yùn)動(dòng)矢量。至此,分像素運(yùn)動(dòng)矢量計(jì)算完畢,可以進(jìn)入下一步驟。
[0071]而后進(jìn)入步驟S207主控單元109接收SAD代價(jià)選取單元發(fā)送的分像素運(yùn)動(dòng)矢量,并將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中。在本實(shí)施方式中,所述“主控單元將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中”包括:主控單元用于將分像素運(yùn)動(dòng)矢量與該分像素運(yùn)動(dòng)矢量對(duì)應(yīng)的整像素運(yùn)動(dòng)矢量進(jìn)行打包后寫入第一緩存模塊中。
[0072]上述方案所述的基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算方法和裝置,所述方法應(yīng)用于基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算裝置,所述裝置用于計(jì)算宏塊的分像素運(yùn)動(dòng)矢量,所述裝置包括緩存單元、主控單元、參考幀復(fù)用維護(hù)單元、SAD代價(jià)計(jì)算單元、SAD代價(jià)選取單元。所述方法包括如下步驟:首先第一獲取模塊從所述第一緩存模塊中獲取16x16子塊的整像素運(yùn)動(dòng)矢量;而后參考幀復(fù)用維護(hù)單元記錄整像素運(yùn)動(dòng)矢量之間的對(duì)應(yīng)關(guān)系;而后第二獲取模塊從所述第二緩存模塊中獲取16x16子塊對(duì)應(yīng)的原始?jí)K像素,第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對(duì)應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素;而后SAD代價(jià)計(jì)算單元從所述第一寄存器單元中獲取原始?jí)K像素,以及從所述第二寄存器單元獲取參考?jí)K像素,并進(jìn)行SAD代價(jià)計(jì)算,得到多個(gè)不同位置的參考?jí)K像素SAD代價(jià);而后SAD代價(jià)選取單元將不同位置的參考?jí)K像素SAD代價(jià)進(jìn)行比較,選取SAD代價(jià)最小的參考?jí)K像素的SAD代價(jià)值,并計(jì)算該參考?jí)K像素與原始?jí)K像素的分像素運(yùn)動(dòng)矢量;而后主控單元接收SAD代價(jià)選取單元發(fā)送的分像素運(yùn)動(dòng)矢量,并將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中。這樣,在計(jì)算H264協(xié)議的分像素運(yùn)動(dòng)矢量過程中,所獲取的原始?jí)K像素基于16x16塊的大小進(jìn)行獲取,保證了8x8塊和4x4塊的原始?jí)K像素的復(fù)用性;在獲取參考?jí)K像素時(shí),根據(jù)參考幀復(fù)用維護(hù)單元記錄整像素運(yùn)動(dòng)矢量之間的對(duì)應(yīng)關(guān)系,選擇性地獲取不存在復(fù)用情況的各層(16x16層、8x8層以及4x4層)的參考?jí)K像素進(jìn)行獲取,而對(duì)于可以復(fù)用的參考?jí)K像素則不再重復(fù)獲取,從而大大提高了參考像素的復(fù)用率,并提高了分像素運(yùn)動(dòng)矢量的計(jì)算效率,節(jié)省了功耗,同時(shí)還節(jié)約了硬件成本。
[0073]需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者終端設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者終端設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括……”或“包含……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者終端設(shè)備中還存在另外的要素。此夕卜,在本文中,“大于”、“小于”、“超過”等理解為不包括本數(shù);“以上”、“以下”、“以內(nèi)”等理解為包括本數(shù)。
[0074