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