欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種視頻解碼數(shù)據(jù)的存儲方法與流程

文檔序號:11181029閱讀:830來源:國知局
一種視頻解碼數(shù)據(jù)的存儲方法與流程

本發(fā)明涉及視頻算法處理領(lǐng)域,具體涉及在視頻解碼過程中的參考幀列表數(shù)據(jù)存儲及運動向量數(shù)據(jù)機相關(guān)信息存儲的方法,以及基于該方法推導運動向量數(shù)據(jù)的方法。



背景技術(shù):

隨著人們對視頻圖像質(zhì)量的要求越來越高,分辨率也越來越大,從以往的d1,標清到現(xiàn)在的高清,超高清以及4k、8k發(fā)展,幀率也從以往的24fps、25fps、30fps到目前的60fps、120fps發(fā)展,這對視頻解碼的性能來說是一個嚴峻的挑戰(zhàn)。

目前在網(wǎng)絡(luò)上普及以及廣泛使用的基本都是h.264視頻標準,h.264標準為了能大幅提升壓縮率,降低碼率,在算法上采用了很多復(fù)雜的算法。首先,在圖像結(jié)構(gòu)上,除了傳統(tǒng)的幀結(jié)構(gòu)外,還采用了場結(jié)構(gòu)以及幀場自適應(yīng)mbaff結(jié)構(gòu),場結(jié)構(gòu)時采用頂場底場分開編解碼,而幀場自適應(yīng)mbaff結(jié)構(gòu)采用宏塊對的形式編解碼,顛覆了以往逐行宏塊編解碼的結(jié)構(gòu),導致在硬件設(shè)計中需要重新規(guī)劃設(shè)計。其次,h.264標準采用3種slice類型,即islice、pslice、bslice,islice的解碼只能采用幀內(nèi)預(yù)測的方式,pslice和bslice既可以包含幀內(nèi)預(yù)測的方式,也可以包含幀間預(yù)測的方式。幀內(nèi)預(yù)測的方式主要去除空間上的冗余,即用周邊的宏塊預(yù)測當前宏塊。幀間預(yù)測的方式主要去除時間上的冗余,即和時間軸上前面的幀和后面的幀進行塊匹配。在幀間預(yù)測中,為了能有效的和前后幀進行塊匹配,h.264標準采用前后2個參考幀隊列,最多各有16幀32場,這2個參考幀隊列在解碼過程中會動態(tài)更新。由于參考幀相比以往的標準多了很多,這給硬件設(shè)計帶來了很大的難度。最后,在宏塊類型上,為了更精確的進行幀間匹配,h.264標準采用了更小的分塊類型,包括有16x16、16x8、8x16、8x8、8x4、4x8、4x4分塊類型,由于在h.264標準算法中,在解碼到b幀的direct和skip宏塊時需要用到對應(yīng)位置co-locatedblock的運動向量等信息,這就需要解碼時將當前解碼幀場的每個宏塊的運動向量等相關(guān)信息數(shù)據(jù)都存入到動態(tài)存儲器ddr中,由于宏塊類型的分塊太多,如何存儲以便后續(xù)高效讀取訪問是硬件設(shè)計需要考慮的問題。

由于h.264標準算法本身十分復(fù)雜,而又需要解碼超大分辨率、高幀率視頻碼流,因此,對于硬件解碼器來說,如何簡化硬件設(shè)計的難度,提高硬件解碼速度是目前迫切需要解決的問題。



技術(shù)實現(xiàn)要素:

本發(fā)明的主要目的是提供一種參考幀列表數(shù)據(jù)存儲及訪問的方法。

本發(fā)明的另一個目的是提供一種運動向量數(shù)據(jù)及相關(guān)信息存儲及訪問的方法。

為了實現(xiàn)上述的主要目的,本發(fā)明提供的參考幀列表數(shù)據(jù)存儲及訪問的方法包括將前向參考幀列表list0[n]和后向參考幀列表list1[n]按照規(guī)定的格式寫入靜態(tài)存儲器sram中,參考幀隊列表格中的每一個單元存儲有一個參考幀對應(yīng)在解碼緩沖器的索引及標識頂場底場的信息。解碼緩沖區(qū)所有幀的數(shù)據(jù)信息也存儲在靜態(tài)存儲器sram中,解碼緩沖區(qū)每一幀的數(shù)據(jù)信息包括有:每一個幀或幀場自適應(yīng)mbaff的poc信息,如是場則是頂場和底場的poc信息,每一幀的圖像結(jié)構(gòu)信息(幀、場還是幀場自適應(yīng)mbaff)及幀或頂場底場是否是長期參考幀、短期參考幀和不做參考,還有每一幀的亮度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址、色度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址以及幀或頂場運動向量數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址,底場的運動向量數(shù)據(jù)存放在動態(tài)存儲器ddr的基地址通過頂場的基地址加一個固定的偏移得到。

由上述方案可見,通過熵解碼得到的參考幀索引可以通過存儲在靜態(tài)存儲器sram中的參考幀列表得到參考幀在解碼緩沖器中的索引值,然后通過此索引值訪問解碼緩沖區(qū),得到參考幀的poc信息、參考幀的結(jié)構(gòu)信息、參考幀是否用做參考的信息、亮度和色度以及運動向量存放在動態(tài)存儲器ddr中的基地址等信息。由于參考幀列表,解碼緩沖區(qū)信息數(shù)據(jù)都存儲在靜態(tài)存儲器sram中,硬件的訪問速度很快,而且通過2級訪問的方式,可以大大簡化硬件的設(shè)計,提升硬件解碼速度。

為了實現(xiàn)上述的另一個目的,本發(fā)明提供的運動向量數(shù)據(jù)及相關(guān)信息存儲及訪問的方法采用了根據(jù)語法direct_8x8_inference_flag每個宏塊固定空間的存儲方式,不隨宏塊分塊類型的變化而變化,每個宏塊存儲的信息有:mbinfo數(shù)據(jù)包括當前宏塊是否為intra,是否是場宏塊以及block0到block15的參考幀索引refidxlx是否為0,還有每個4x4小塊block的運動向量數(shù)據(jù)以及當前block的參考幀在解碼緩沖區(qū)的索引。

由上述方案可見,當解碼到b幀的direc和skip宏塊時,需要訪問后向參考幀對應(yīng)位置的co-locatedblock的運動向量、是否為intra塊,參考幀索引refidxlx是否為0以及參考幀在解碼緩沖區(qū)的索引。首先可以通過存儲在靜態(tài)存儲器sram中的參考幀列表得到后向參考幀list1[0]在解碼緩沖區(qū)的索引,然后通過此索引值訪問解碼緩沖區(qū),得到參考幀的運動向量存放在動態(tài)存儲器ddr中的基地址,然后從后向參考幀列表list1[0]中找到和當前block對應(yīng)位置的co-locatedblock,進而可以訪問得到對應(yīng)位置的co-locatedblock的運動向量、是否為intra塊,參考幀索引refidxlx是否為0以及參考幀在解碼緩沖區(qū)的索引。采用此存儲方式,將需要的信息數(shù)據(jù)全部存放在一起,硬件一次即可訪問得到,極大提升了硬件解碼速度,而且運動向量數(shù)據(jù)的存放采用根據(jù)direct_8x8_inference_flag每個宏塊固定空間的存放方式,非常方便硬件讀取對應(yīng)位置的co-locatedblock的相關(guān)信息,也極大的方便了硬件設(shè)計,避免了遍歷整個宏塊的分塊信息,簡化了硬件設(shè)計。

附圖說明

圖1是本發(fā)明存儲前后向參考幀列表結(jié)構(gòu)圖。

圖2是本發(fā)明存儲前后向參考幀列表每一單元結(jié)構(gòu)圖。

圖3是本發(fā)明存儲解碼緩沖區(qū)數(shù)據(jù)信息結(jié)構(gòu)圖。

圖4是本發(fā)明在direct_8x8_inference_flag為1時16個4x4小塊存儲順序示意圖。

圖5是本發(fā)明在direct_8x8_inference_flag為1存儲運動向量及相關(guān)信息數(shù)據(jù)結(jié)構(gòu)圖。

圖6是本發(fā)明在direct_8x8_inference_flag為0時16個4x4小塊存儲順序示意圖。

圖7是本發(fā)明在direct_8x8_inference_flag為0存儲運動向量及相關(guān)信息數(shù)據(jù)結(jié)構(gòu)圖。

圖8是本發(fā)明在采用周邊宏塊進行運動向量預(yù)測的示意圖。

圖9是本發(fā)明在進行亮度插值的示意圖。

圖10是本發(fā)明在進行色度插值的示意圖。

圖11是本發(fā)明在后向參考幀list[0]中查找和當前block對應(yīng)位置co-locatedblock的示意圖。

圖12是本發(fā)明在解碼b_direct或b_skip宏塊采用時域預(yù)測方式的示意圖。

以下結(jié)合附圖及實施例對本發(fā)明做進一步的說明。

具體實施方式

由于在h.264解碼過程中,當解碼當前slice為pslice時,需要用到前向參考幀列表list0[n],解碼bslice時,需要用到前向參考幀列表list0[n]和后向參考幀列表list1[n],當解碼圖像結(jié)構(gòu)為幀結(jié)構(gòu)或幀場自適應(yīng)(mbaff)時,最多有16個參考幀,即n取值0~15;當解碼圖像結(jié)構(gòu)為場時,最多有32個參考場,即n取值0~31。

在解碼slice頭信息時,會有相應(yīng)的語法元素標識參考幀重排序信息,軟件根據(jù)此信息對前后向參考幀列表list0[n]和list1[n]進行重排序操作,此操作完成后,軟件將此重排序后的參考幀列表list0[n]和list1[n]按照圖1進行排列,寫入靜態(tài)存儲器sram中,如果當前解碼圖像結(jié)構(gòu)為幀結(jié)構(gòu)或幀場自適應(yīng)(mbaff)時,前向參考幀列表list0[0]至list0[15]寫入偏移地址0x0至0x3,0x4至0x7空著,后向參考幀列表list1[0]至list1[15]寫入偏移地址0x8至0x0b,0xc至0xf空著;如果當前解碼圖像結(jié)構(gòu)為場時,則將前向參考幀列表list0[0]至list0[31]寫入偏移地址0x0至0x7,后向參考幀列表list1[0]至list1[31]寫入偏移地址0x8至0x0f。采用此設(shè)計,可以極大方便h.264硬解碼器進行參考幀數(shù)據(jù)的讀取,由于存放在靜態(tài)存儲器中,訪問速度很快,可以大大加快硬件解碼速度。

前后向參考幀列表list0[n]和list1[n]中每一個單元占用8個bit,所存儲的數(shù)據(jù)如圖2所示。最高位bit7在當前解碼圖像結(jié)構(gòu)為場時有效,為0表示當前參考幀list0[x]或list1[x]是頂場(topfield),為1表示的是底場(bottomfield)。低5bitdpb_idx是當前參考幀list0[x]或list1[x]對應(yīng)在解碼緩沖區(qū)(decodepicturebuffer)的索引,此dpb_idx索引信息在一段時間內(nèi)固定對應(yīng)一幀,即和某一個參考幀是綁定的,直到此幀數(shù)據(jù)被刷出去顯示,從解碼緩沖區(qū)內(nèi)清除。這樣,雖然每解碼一幀或一場,都需要對參考幀列表進行重新排序,參考幀索引ref_idx會發(fā)生變化,但每一個參考幀相對應(yīng)的dpb_idx不會變化,只需要改變前后向參考幀列表list0[n]和list1[n]中對應(yīng)表格每一個單元的內(nèi)容即可。如解碼第i幀時,list0[0]對應(yīng)解碼緩沖區(qū)內(nèi)的第m幀,則將第m幀的dpb_idx填入bit4:0,頂?shù)讏鲂畔⑻钊隻it7,當解碼到第i+1幀時,list0[0]經(jīng)過重排序后可能變?yōu)榻獯a緩沖區(qū)的第n幀,則將第n幀的dpb_idx填入bit4:0,頂?shù)讏鲂畔⑻钊隻it7。

在解碼當前幀或場或幀場自適應(yīng)mbaff時,需要用到參考幀的相關(guān)數(shù)據(jù)信息,對每一個參考幀,有下面4類信息數(shù)據(jù)會用到,具體如下:

1)參考幀的poc信息;

2)參考幀的屬性,包括參考幀的圖像結(jié)構(gòu),以及長期參考幀還是短期參考幀;

3)參考幀的亮度和色度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址;

4)參考幀的運動向量數(shù)據(jù)及相關(guān)信息存放到動態(tài)存儲器ddr中的基地址。

為了方便硬件設(shè)計,在本發(fā)明中,將所有參考幀的4類信息進行打包,統(tǒng)一存放到一塊靜態(tài)存儲器sram中,存儲格式如圖3所示。

h.264解碼過程中,最多有16個參考幀,加上當前解碼輸出幀,故共有17個解碼緩沖區(qū)dpb,每個解碼緩沖區(qū)dpb占用5個word,偏移地址0用來存放poc信息,如果當前解碼圖像結(jié)構(gòu)為幀或幀場自適應(yīng)mbaff時,只有bit31:16用到,用于存放當前幀或幀場自適應(yīng)mbaff的poc信息,如果當前解碼圖像結(jié)構(gòu)為場時,bit31:16用于存放頂場的poc信息,bit15:0用于存放底場的poc信息。偏移地址1用于存放參考幀的屬性信息,bit1:0用于表示頂場是否用于短期參考,還是長期參考以及不用做參考,bit3:2表示底場是否用于短期參考,還是長期參考以及不用做參考,bit5:4表示參考幀圖像結(jié)構(gòu),是幀、場還是幀場自適應(yīng)mbaff。偏移地址2用于存放參考幀的亮度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址。偏移地址3用于存放參考幀的色度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址。偏移地址4用于存放參考幀的運動向量及相關(guān)信息數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址,如果參考幀圖像結(jié)構(gòu)是場,則底場的運動向量及相關(guān)信息數(shù)據(jù)存放在動態(tài)存儲器ddr的基地址通過頂場的基地址加一個固定的偏移即可。

實施例1

本實施例實現(xiàn)對宏塊類型為非b_direct和非b_skip的其他幀間inter宏塊類型進行插值運算的計算方法。

視頻圖像解碼時,首先進行熵解碼,解碼得到當前block的參考幀索引,如果當前block類型為前向宏塊,則解碼得到ref0_idx,如果為后向宏塊,則解碼得到ref1_idx,如果是雙向宏塊,則解碼得到ref0_idx和ref1_idx。同時,根據(jù)mb類型解碼得到當前宏塊x分量和y分量的運動向量殘差,同樣,如果為前向宏塊,解碼得到運動向量殘差mvd0_x和mvd0_y,如果為后向宏塊,解碼得到mvd1_x和mvd1_y,如果是雙向宏塊,則得到前后向運動向量殘差mvd0_x、mvd0_y和mvd1_x、mvd1_y。為了描述方便,下面以當前block類型為前向宏塊進行描述。

在熵解碼得到了前向宏塊的參考幀索引ref0_idx和運動向量殘差mvd0_x和mvd0_y后,根據(jù)h.264運動向量預(yù)測算法,采用周邊宏塊進行預(yù)測見圖8,從當前mb左邊的宏塊lefta,上邊的宏塊topb,上右邊的宏塊top_rightc以及上左邊的宏塊top_leftd預(yù)測得到當前宏塊的運動向量預(yù)測值mvp_x和mvp_y,加上運動向量殘差mvd0_x和mvd0_y,從而得到當前宏塊的最終的運動向量mv_x和mv_y:

mv_x=mvd0_x+mvp_x(式1)

mv_y=mvd0_y+mvp_y(式2)

同時,根據(jù)熵解碼得到的參考幀索引ref0_idx,從圖1參考幀列表中找到list0[ref0_idx],進而從圖2中可以得到此參考幀索引ref0_idx對應(yīng)解碼緩沖區(qū)的dpb_idx,進而根據(jù)dpb_idx從圖3中,得到參考幀的亮度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址以及色度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址,再根據(jù)當前block的運動向量mv_x和mv_y就可以定位當前block的參考塊數(shù)據(jù),根據(jù)圖9和圖10,亮度和色度的插值運算算法計算得到當前block的插值結(jié)果。

根據(jù)dpb_idx得到參考幀的運動向量及相關(guān)信息數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址后,就可以訪問得到參考幀的運動向量及相關(guān)信息數(shù)據(jù),參考幀的運動向量及相關(guān)信息數(shù)據(jù)根據(jù)從序列參數(shù)集sps頭解碼得到的語法direct_8x8_inference_flag是否為1采用下面2種格式存放。

1)direct_8x8_inference_flag為1時,為了壓縮參考幀的運動向量及相關(guān)信息數(shù)據(jù),只存儲每個宏塊mb的左邊一列和右邊一列的4x4小塊block的運動向量及相關(guān)信息數(shù)據(jù),存放順序如圖4所示,每個宏塊只需要存儲8個4x4小塊block的運動向量及相關(guān)信息數(shù)據(jù),相比原來每個宏塊需要存儲16個4x4小塊block的運動向量及相關(guān)信息數(shù)據(jù),節(jié)省了一半的存儲空間,大大節(jié)省了帶寬。運動向量及相關(guān)信息數(shù)據(jù)的存儲格式如下圖5所示。

每個宏塊占用9個word,第一個word存放mbinfo數(shù)據(jù),后面8個word存放8個4x4小塊block的運動向量數(shù)據(jù)。其中mbinfo意義如下:bit0用來表示當前宏塊是否為inter(如果為宏塊類型為inter設(shè)置為0,否則設(shè)置為1),bit1表示當前宏塊是否是場宏塊(幀宏塊設(shè)置為0,場宏塊設(shè)置為1),bit16到bit31分別表示block0到block15的參考幀索引refidxlx是否為0(如果refidxlx為0,設(shè)置為1,否則設(shè)置為0)。8個4x4小塊block的運動向量數(shù)據(jù)采用同樣的格式存放,低5bit即bit4:0用來存放dpb_idx,即當前塊參考幀在解碼緩沖區(qū)dpb的幀索引,bit5用來進一步區(qū)分參考的是頂場還是底場,bit19:6用來存放當前4x4小塊block的運動向量的x分量mv_x,bit31:20用來存放當前4x4小塊block的運動向量的y分量mv_y。

2)direct_8x8_inference_flag為0時,每個宏塊的16個4x4小塊block的運動向量及相關(guān)信息數(shù)據(jù)都需要存儲,存放順序如圖6所示。運動向量及相關(guān)信息數(shù)據(jù)的存儲格式如下圖7所示。

每個宏塊占用17個word,第一個word存放mbinfo數(shù)據(jù),后面16個word存放16個block的運動向量及相關(guān)信息數(shù)據(jù)。每個word的具體意義和上面相同,不再累述。

由于h.264在pslice和bslice時,宏塊的分塊類型非常多,包括16x16、16x8、8x16、8x8、8x4、4x8、4x4,如果根據(jù)宏塊的分塊類型來存儲運動向量及相關(guān)信息數(shù)據(jù),不僅要存儲每個宏塊的分塊類型,而且由于每個宏塊的分塊類型不一樣,導致每個宏塊占用的空間不固定,在解碼過程中,當解碼宏塊類型為b_direct或b_skip時,需要訪問對應(yīng)位置4x4block的運動向量及相關(guān)信息數(shù)據(jù)時會非常的麻煩,需要遍歷整個宏塊的分塊類型,才能定位對應(yīng)位置4x4block的位置,進而讀取對應(yīng)位置4x4block的運動向量數(shù)據(jù)等相關(guān)信息,極大增加了硬件解碼的設(shè)計難度。采用上面的存儲格式,在direct_8x8_inference_flag為1時每個宏塊固定9個word,direct_8x8_inference_flag為0時固定17個word存放,不需要去考慮每個宏塊的分塊類型,當解碼宏塊類型為b_direct或b_skip時,硬件解碼器可以很方便的根據(jù)direct_8x8_inference_flag直接訪問對應(yīng)位置4x4block的運動向量數(shù)據(jù)等相關(guān)信息,大大簡化了硬件設(shè)計。

實施例2

本實施例實現(xiàn)當序列參數(shù)集sps語法direct_spatial_mv_pred_flag為1時,對宏塊類型為b_direct或b_skip采用空域預(yù)測方式推導運動向量及進行插值運算的計算方法。

空域預(yù)測方式就是根據(jù)周邊宏塊的信息預(yù)測得到當前宏塊的參考幀索引和運動向量,首先根據(jù)圖8當前宏塊周邊a、b、c、d宏塊的信息進行計算,得到refidxl0_temp和refidxl1_temp,計算公式如下:

refidxl0_temp=minpositive(refidxl0a,minpositive(refidxl0b,refidxl0c))(式3)

refidxl1_temp=minpositive(refidxl1a,minpositive(refidxl1b,refidxl1c))(式4)

其中:

上述式子中,refidxl0a、refidxl0b和refidxl0c分別表示周邊宏塊a、b、c的前向參考幀索引,refidxl1a、refidxl1b和refidxl1c分別表示周邊宏塊a、b、c的后向參考幀索引。

然后根據(jù)得到的refidxl0_temp和refidxl1_temp得到當前宏塊的參考幀索引refidxl0和refidxl1,計算公式如下:

if(refidxl0_temp<0&&refidxl1_temp<0)

refidxl0=0;refidxl1=0;(式5)

else

refidxl0=refidxl0_temp;refidxl1=refidxl1_temp(式6)

下面計算當前宏塊的運動向量數(shù)據(jù)。首先從后向參考幀列表list1[0]中找到和當前block對應(yīng)位置的co-locatedblock,如圖11所示。同時,從圖2中可以得到后向參考幀list1[0]在解碼緩沖區(qū)的索引dpb_idx及頂?shù)讏鲂畔?,進而根據(jù)dpb_idx從圖3中,得到后向參考幀list1[0]的運動向量存放在動態(tài)存儲器ddr中的基地址,以及同時得到參考幀list1[0]是否是短期參考幀,進而根據(jù)參考幀list1[0]的運動向量基地址以及得到的當前block對應(yīng)位置的co-locatedblock,從圖5或圖7中可以得到對應(yīng)位置co-locatedblock的mv_x和mv_y以及refidxlx是否為0信息。根據(jù)上面得到的信息就可以計算moving_block,moving_block在下面3個條件都滿足的情況下被設(shè)置為1:

1)list1[0]是短期參考幀;

2)對應(yīng)位置co-locatedblock的mv_x和mv_y均在[-1/4,+1/4]區(qū)間內(nèi);

3)對應(yīng)位置co-locatedblock的refidxlx為0。

此外,還需要根據(jù)周邊a、b、c、d宏塊預(yù)測得到當前宏塊的前向運動向量預(yù)測值mvp0_x和mvp0_y,以及后向運動向量預(yù)測值mvp1_x和mvp1_y,最后根據(jù)下面公式得到當前block的前向運動向量mv0_x和mv0_y。

if(refidxl0_temp<0)

{mv0_x=0;mv0_y=0;}(式7)

elseif(refidxl0_temp==0&moving_block)

{mv0_x=0;mv0_y=0;}(式8)

else

{mv0_x=mvp0_x;mv0_y=mvp0_y;}(式9)

后向運動向量mv1_x和mv1_y采用同樣的公式得到,只需要將上式中的refidxl0_temp改為refidxl1_temp即可。

經(jīng)過上面運算得到當前block的前后向參考幀索引refidxl0和refidxl1,從圖1中可以得到list0[refidxl0]和list1[refidxl1],進而從圖2中可以得到前向后參考幀索引refidxl0和refidxl1對應(yīng)解碼緩沖區(qū)的dpb_idx,進而根據(jù)dpb_idx從圖3中,可以得到前后向參考幀的亮度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址以及色度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址,再根據(jù)當前block的前向運動向量mv0_x和mv0_y,以及后向運動向量mv1_x和mv1_y,就可以定位當前block的前向參考塊數(shù)據(jù)和后向參考塊數(shù)據(jù),根據(jù)圖9和圖10,亮度和色度的插值運算算法計算得到當前block的前向插值結(jié)果和后向插值結(jié)果。最后按照h.264的標準插值運算算法得到當前block的最終插值結(jié)果。

實施例3

本實施例實現(xiàn)當序列參數(shù)集sps語法direct_spatial_mv_pred_flag為0時,對宏塊類型為b_direct或b_skip采用時域預(yù)測方式推導運動向量及進行插值運算的計算方法。

時域預(yù)測方式就是根據(jù)時間軸上后向參考幀和前向參考幀的相關(guān)信息推導得到當前宏塊的參考幀索引和運動向量。首先從后向參考幀列表list1[0]中找到和當前block對應(yīng)位置的co-locatedblock,如圖6所示。同時,從圖2中可以得到后向參考幀list1[0]在解碼緩沖區(qū)的索引dpb_idx及頂?shù)讏鲂畔?,進而根據(jù)dpb_idx從圖3中,可以得到后向參考幀list1[0]的運動向量存放在動態(tài)存儲器ddr中的基地址,以及同時得到參考幀list1[0]的poc(如果當前解碼圖像結(jié)構(gòu)為幀或幀場自適應(yīng)mbaff或是場且list1[0]的bit7為0,則取幀或頂場的poc,如果如果當前解碼圖像結(jié)構(gòu)為場且list1[0]的bit7為1,則取底場的poc),標記為poc1,進而根據(jù)參考幀list1[0]的運動向量基地址以及找到的當前block對應(yīng)位置的co-locatedblock,從圖5或圖7中可以得到對應(yīng)位置co-locatedblock的運動向量等信息,包括是否是intra宏塊、是否是場、運動向量數(shù)據(jù)mv_x和mv_y,以及參考解碼緩沖器索引dpb_idx和頂場底場信息。如果對應(yīng)位置co-locatedblock是intra宏塊,則當前block的前后向參考幀索引refidxl0和refidxl1均為0,前向運動向量mv0_x和mv0_y和后向運動向量mv1_x和mv1_y也均為0;否則,如果對應(yīng)位置co-locatedblock不是intra宏塊,首先根據(jù)已經(jīng)得到的對應(yīng)位置co-locatedblock的dpb_idx和頂場底場信息,從圖3中可以得到相應(yīng)對應(yīng)位置co-locatedblock的參考幀的poc信息,標記為refidxcol_poc,同時得到此參考幀是否為長期參考幀,然后從前向參考幀列表list0[32]中找出其poc信息和refidxcol_poc相同的參考幀,將其參考幀索引號標記為refidx_map,至此,當前block的前向參考幀索引refidxl0即為refidx_map,后向參考幀索引refidxl1為0。

下面計算當前block的前向運動向量mv0_x和mv0_y和后向運動向量mv1_x和mv1_y。上面描述中已經(jīng)得到后向參考幀refidxl1的poc為poc1,前向參考幀refidxl0的poc為refidxcol_poc,且同時得到了前向參考幀refidxl0是否為長期參考幀,如果poc1和refidxcol_poc之間的差值為0或者前向參考幀refidxl0為長期參考幀,則前向運動向量mv0_x和mv0_y即為對應(yīng)位置co-locatedblock的運動向量數(shù)據(jù)mv_x和mv_y,后向運動向量mv1_x和mv1_y均為0。否則,如圖12采用下面計算公式計算得到前后向運動向量:

tx=(16384+abs(td/2))/td(式10)

distscalefactor=clip3(-1024,1023,(tb*tx+32)>>6)(式11)

mv0_x=(distscalefactor*mvcol_x+128)>>8(式12)

mv1_x=mv0_x–mvcol_x(式13)

mv0_y=(distscalefactor*mvcol_y+128)>>8(式14)

mv1_y=mv0_y–mvcol_y(式15)

其中:

tb=clip3(-128,127,(currpic_poc-refidxcol_poc))(式16)

td=clip3(-128,127,(poc1-refidxcol_poc))(式17)

mvcol_x,mvcol_y為對應(yīng)位置co-locatedblock的運動向量數(shù)據(jù),currpic_poc為當前解碼圖像的poc。

經(jīng)過上面運算得到當前block的前后向參考幀索引refidxl0和refidxl1,從圖1中可以得到list0[refidxl0]和list1[refidxl1],進而從圖2中可以得到此前向后參考幀索引refidxl0和refidxl1對應(yīng)解碼緩沖區(qū)的dpb_idx,進而根據(jù)dpb_idx從圖3中,可以得到前后向參考幀的亮度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址以及色度數(shù)據(jù)存放在動態(tài)存儲器ddr中的基地址,再根據(jù)當前block的前向運動向量mv0_x和mv0_y,以及后向運動向量mv1_x和mv1_y,就可以定位當前block的前向參考塊數(shù)據(jù)和后向參考塊數(shù)據(jù),根據(jù)圖9和圖10,亮度和色度的插值運算算法得到當前block的前向插值結(jié)果和后向插值結(jié)果。最后按照h.264的標準插值運算算法得到當前block的最終插值結(jié)果。

最后需要強調(diào)的是,本發(fā)明不限于上述實現(xiàn)方式,如參考幀列表的存放格式變化,參考幀信息數(shù)據(jù)存放格式變化,運動向量數(shù)據(jù)存放格式的變化等都應(yīng)該包含在本發(fā)明權(quán)利要求的保護范圍內(nèi)。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
桐柏县| 浠水县| 西吉县| 太原市| 金乡县| 积石山| 霍城县| 乐业县| 长白| 阿拉善右旗| 东港市| 赫章县| 宝丰县| 黄石市| 什邡市| 马山县| 元谋县| 建平县| 略阳县| 越西县| 岱山县| 儋州市| 手游| 井研县| 将乐县| 仲巴县| 盘锦市| 敖汉旗| 湘乡市| 金坛市| 淮滨县| 当阳市| 项城市| 巴林左旗| 应城市| 沾化县| 高雄市| 洛宁县| 平武县| 张掖市| 油尖旺区|