一種基于h264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)芯片領(lǐng)域,尤其涉及一種基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算方法和裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)、通信技術(shù)、互聯(lián)網(wǎng)技術(shù)和多媒體技術(shù)的迅猛發(fā)展,多媒體應(yīng)用已經(jīng)深入人們?nèi)粘I畹姆椒矫婷妫⒅饾u地改變著人們的生活方式。視頻是多媒體應(yīng)用中最為常見和信息量最大的媒體。目前,多媒體業(yè)務(wù)已從以音頻為主發(fā)展成以視頻為主,無論是電影、電視、視頻監(jiān)控等傳統(tǒng)多媒體應(yīng)用,還是網(wǎng)流媒體視頻、可視電話和視頻會(huì)議等新興多媒體應(yīng)用,視頻都是其中最為核心的組成部分。
[0003]視頻編碼的協(xié)議有很多種,H264協(xié)議就是其中重要一項(xiàng)。而在視頻編碼過程中,通過獲取整像素運(yùn)動(dòng)矢量來計(jì)算分像素運(yùn)動(dòng)矢量又是視頻編碼步驟的重要一環(huán)。由于計(jì)算分像素運(yùn)動(dòng)矢量需要獲取原始?jí)K像素以及參考?jí)K像素,而參考?jí)K的像素又是基于整像素運(yùn)動(dòng)矢量來進(jìn)行獲取?,F(xiàn)有的方法在獲取參考?jí)K的像素往往采用逐一獲取的方法,即每一原始?jí)K像素都需要根據(jù)整像素運(yùn)動(dòng)矢量去對應(yīng)的緩存單元中獲取參考?jí)K像素,導(dǎo)致參考?jí)K像素獲取時(shí)復(fù)用率低下、步驟繁瑣、功耗大、硬件面積大、成本高等問題。
【發(fā)明內(nèi)容】
[0004]為此,需要提供一種基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算的技術(shù)方案,用以解決在計(jì)算視頻像素塊的分像素運(yùn)動(dòng)矢量時(shí),由于獲取參考?jí)K像素步驟繁瑣、復(fù)用率低,導(dǎo)致視頻編碼功耗大、硬件面積大、成本高等問題。
[0005]為實(shí)現(xiàn)上述目的,發(fā)明人提供了一種基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算裝置,所述裝置用于計(jì)算宏塊的分像素運(yùn)動(dòng)矢量,所述宏塊被劃分為多個(gè)16x16子塊;每一 16x16子塊被劃分為4個(gè)8x8子塊,每一8x8子塊被劃分為4個(gè)4x4子塊;所述裝置包括緩存單兀、主控單元、參考幀復(fù)用維護(hù)單元、SAD代價(jià)計(jì)算單元、SAD代價(jià)選取單元;所述緩存單元與主控單元連接,所述主控單元與參考幀復(fù)用維護(hù)單元連接,所述參考幀復(fù)用維護(hù)單元與SAD代價(jià)計(jì)算單元連接,所述SAD代價(jià)計(jì)算單元與SAD代價(jià)選取單元連接,所述SAD代價(jià)選取單元與主控單元連接;所述緩存單元包括第一緩存模塊、第二緩存模塊、第三緩存模塊;所述主控單元包括獲取單元和寄存器單元;所述獲取單元包括第一獲取模塊、第二模塊獲取和第三獲取模塊;所述寄存器單元包括第一寄存器單元和第二寄存器單元;
[0006]所述第一獲取模塊用于從所述第一緩存模塊中獲取16x16子塊的整像素運(yùn)動(dòng)矢量,所述整像素運(yùn)動(dòng)矢量包括第一整像素運(yùn)動(dòng)矢量、第二像素運(yùn)動(dòng)矢量和第三整像素矢量,所述第一整像素運(yùn)動(dòng)矢量為16x16子塊中16x16層的整像素運(yùn)動(dòng)矢量,所述第二整像素運(yùn)動(dòng)矢量為16x16子塊中8x8層的整像素運(yùn)動(dòng)矢量,所述第三整像素運(yùn)動(dòng)矢量為16x16子塊中4x4層的整像素運(yùn)動(dòng)矢量;
[0007]所述參考幀復(fù)用維護(hù)單元用于記錄整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,所述整像素運(yùn)動(dòng)矢量的對應(yīng)關(guān)系包括第一整像素運(yùn)動(dòng)矢量和第二像素運(yùn)動(dòng)矢量的對應(yīng)關(guān)系、8x8層不同8x8子塊的第二整像素運(yùn)動(dòng)矢量的對應(yīng)關(guān)系以及4x4層不同4x4子塊的第三整像素矢量的對應(yīng)關(guān)系;
[0008]所述第二獲取模塊用于從所述第二緩存模塊中獲取16x16子塊對應(yīng)的原始?jí)K像素,所述第一寄存器單元用于緩存16x16子塊對應(yīng)的原始?jí)K像素;
[0009]所述第三獲取模塊用于根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素,所述第二寄存器單元用于緩存參考?jí)K像素;
[0010]所述SAD代價(jià)計(jì)算單元用于從所述第一寄存器單元中獲取原始?jí)K像素,以及從所述第二寄存器單元獲取參考?jí)K像素,并進(jìn)行SAD代價(jià)計(jì)算,得到多個(gè)不同位置的參考?jí)K像素SAD代價(jià);
[0011]所述SAD代價(jià)選取單元用于將不同位置的參考?jí)K像素SAD代價(jià)進(jìn)行比較,選取SAD代價(jià)最小的參考?jí)K像素的SAD代價(jià)值,并計(jì)算該參考?jí)K像素與原始?jí)K像素的分像素運(yùn)動(dòng)矢量;
[0012]所述主控單元用于接收SAD代價(jià)選取單元發(fā)送的分像素運(yùn)動(dòng)矢量,并將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中。
[0013]進(jìn)一步地,所述“第三獲取模塊用于根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:若8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量與第一整像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0014]進(jìn)一步地,所述“第三獲取模塊用于根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:若參考幀復(fù)用維護(hù)單元記錄的8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量與上一8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0015]進(jìn)一步地,所述“第三獲取模塊用于根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:若參考幀復(fù)用維護(hù)單元記錄的4x4層的4x4子塊的第三像素運(yùn)動(dòng)矢量與上一4x4層的4x4子塊的第三像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0016]進(jìn)一步地,所述“主控單元用于將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中”包括:主控單元用于將分像素運(yùn)動(dòng)矢量與該分像素運(yùn)動(dòng)矢量對應(yīng)的整像素運(yùn)動(dòng)矢量進(jìn)行打包后寫入第一緩存模塊中。
[0017]發(fā)明人還提供了一種基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算方法,所述方法應(yīng)用于基于H264協(xié)議的分像素運(yùn)動(dòng)矢量計(jì)算裝置,所述裝置用于計(jì)算宏塊的分像素運(yùn)動(dòng)矢量,所述宏塊被劃分為多個(gè)16x16子塊;每一 16x16子塊被劃分為4個(gè)8x8子塊,每一 8x8子塊被劃分為4個(gè)4x4子塊;所述裝置包括緩存單元、主控單元、參考幀復(fù)用維護(hù)單元、SAD代價(jià)計(jì)算單元、SAD代價(jià)選取單元;所述緩存單元與主控單元連接,所述主控單元與參考幀復(fù)用維護(hù)單元連接,所述參考幀復(fù)用維護(hù)單元與SAD代價(jià)計(jì)算單元連接,所述SAD代價(jià)計(jì)算單元與SAD代價(jià)選取單元連接,所述SAD代價(jià)選取單元與主控單元連接;所述緩存單元包括第一緩存模塊、第二緩存模塊、第三緩存模塊;所述主控單元包括獲取單元和寄存器單元;所述獲取單元包括第一獲取模塊、第二模塊獲取和第三獲取模塊;所述寄存器單元包括第一寄存器單元和第二寄存器單元;所述方法包括如下步驟:
[0018]第一獲取模塊從所述第一緩存模塊中獲取16x16子塊的整像素運(yùn)動(dòng)矢量,所述整像素運(yùn)動(dòng)矢量包括第一整像素運(yùn)動(dòng)矢量、第二像素運(yùn)動(dòng)矢量和第三整像素矢量,所述第一整像素運(yùn)動(dòng)矢量為16x16子塊中16x16層的整像素運(yùn)動(dòng)矢量,所述第二整像素運(yùn)動(dòng)矢量為16x16子塊中8x8層的整像素運(yùn)動(dòng)矢量,所述第三整像素運(yùn)動(dòng)矢量為16x16子塊中4x4層的整像素運(yùn)動(dòng)矢量;
[0019]參考幀復(fù)用維護(hù)單元記錄整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,所述整像素運(yùn)動(dòng)矢量的對應(yīng)關(guān)系包括第一整像素運(yùn)動(dòng)矢量和第二像素運(yùn)動(dòng)矢量的對應(yīng)關(guān)系、8x8層不同8x8子塊的第二整像素運(yùn)動(dòng)矢量的對應(yīng)關(guān)系以及4x4層不同4x4子塊的第三整像素矢量的對應(yīng)關(guān)系;
[0020]第二獲取模塊從所述第二緩存模塊中獲取16x16子塊對應(yīng)的原始?jí)K像素,所述第一寄存器單元緩存16x16子塊對應(yīng)的原始?jí)K像素;
[0021]第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素,所述第二寄存器單元緩存參考?jí)K像素;
[0022]SAD代價(jià)計(jì)算單元從所述第一寄存器單元中獲取原始?jí)K像素,以及從所述第二寄存器單元獲取參考?jí)K像素,并進(jìn)行SAD代價(jià)計(jì)算,得到多個(gè)不同位置的參考?jí)K像素SAD代價(jià);
[0023]SAD代價(jià)選取單元將不同位置的參考?jí)K像素SAD代價(jià)進(jìn)行比較,選取SAD代價(jià)最小的參考?jí)K像素的SAD代價(jià)值,并計(jì)算該參考?jí)K像素與原始?jí)K像素的分像素運(yùn)動(dòng)矢量;
[0024]主控單元接收SAD代價(jià)選取單元發(fā)送的分像素運(yùn)動(dòng)矢量,并將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中。
[0025]進(jìn)一步地,所述步驟“第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:
[0026]若8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量與第一整像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0027]進(jìn)一步地,所述步驟“第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:
[0028]若參考幀復(fù)用維護(hù)單元記錄的8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量與上一8x8層的8x8子塊的第二像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0029]進(jìn)一步地,所述步驟“第三獲取模塊根據(jù)整像素運(yùn)動(dòng)矢量之間的對應(yīng)關(guān)系,從所述第三緩存模塊中獲取參考?jí)K像素”包括:
[0030]若參考幀復(fù)用維護(hù)單元記錄的4x4層的4x4子塊的第三像素運(yùn)動(dòng)矢量與上一4x4層的4x4子塊的第三像素運(yùn)動(dòng)矢量相同,則所述第三獲取模塊不從第三緩存模塊中獲取參考?jí)K像素,否則第三獲取模塊從第三緩存模塊中獲取參考?jí)K像素。
[0031 ]進(jìn)一步地,所述步驟“主控單元將分像素運(yùn)動(dòng)矢量寫入第一緩存模塊中”包括:
[0032]主控單元將分像素運(yùn)動(dòng)矢量與該分像素運(yùn)動(dòng)矢量對應(yīng)的整像素運(yùn)動(dòng)矢量進(jìn)行打包后寫入第一緩存模塊中