本發(fā)明涉及視頻編解碼技術(shù)領(lǐng)域,特別涉及一種邊界濾波強(qiáng)度的確定方法及裝置。
背景技術(shù):
在現(xiàn)代視頻編解碼領(lǐng)域中,基于塊的變換編碼在圖像壓縮編碼中得到廣泛應(yīng)用,隨著碼率的降低,量化變得粗糙,在塊的邊界會出現(xiàn)不連續(xù),形成重建圖像的明顯缺陷,稱為塊效應(yīng)。
在現(xiàn)代視頻編解碼標(biāo)準(zhǔn)中,通常會增加去塊效應(yīng)的模塊,用于減少塊效應(yīng),例如h.264、h.265、avs、vpx系列等都內(nèi)置有去塊效應(yīng)濾波器。去塊效應(yīng)濾波器的作用為確定濾波強(qiáng)度,以及根據(jù)確定的濾波強(qiáng)度對變換塊的邊界進(jìn)行濾波。其中,在h.264標(biāo)準(zhǔn)中,視頻的編碼單元塊為16*16大小的宏塊,其對應(yīng)的一組變換塊可以為4個8*8大小的變換塊或16個4*4大小的變換塊;在h.265標(biāo)準(zhǔn)中,視頻的編碼單元塊為64*64、32*32、16*16或8*8大小的編碼單元cu(codingunit),其對應(yīng)的一組變換塊可以為其本身或四叉樹劃分得到的、且存在未被劃分的各層變換單元tu(transformunit)。
目前,現(xiàn)有的邊界濾波強(qiáng)度是根據(jù)變換塊的編碼參數(shù)確定的,如邊界兩側(cè)的變換塊是否有幀內(nèi)編碼模式,邊界兩側(cè)變換塊是否有非零dct(discretecosinetransform,離散余弦變換)系數(shù)或邊界兩側(cè)變換塊的運(yùn)動參數(shù)是不是差別較大等等。其中,對于1個變換塊,若該變換塊存在非零dct系數(shù),則將其對應(yīng)的cbf(codedblockflag,編碼塊標(biāo)志)的值設(shè)為1,否則設(shè)為0,并將cbf存儲在提前開辟的緩存區(qū)中。
當(dāng)決定一個變換塊邊界的去塊效應(yīng)濾波強(qiáng)度時,例如針對一個長度為32的邊界,需要將該邊界劃分為8個長度為4的邊界,針對8個邊界,逐個判斷長度為4的邊界相鄰兩側(cè)的變換塊對應(yīng)的cbf值,是否至少有一個為1。如果至少有一個為1,將去塊效應(yīng)濾波器的濾波強(qiáng)度確定為1(對h.265標(biāo)準(zhǔn)而言)或2(對h.264標(biāo)準(zhǔn)而言),否則設(shè)為0??梢?,現(xiàn)有的方法,是串行判斷并確定出這8個長度為4的邊界的濾波強(qiáng)度的,導(dǎo)致濾波強(qiáng)度的確定過程所消耗的時間較多,降低了視頻的編解碼速度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的在于提供一種邊界濾波強(qiáng)度的確定方法及裝置,以減少濾波強(qiáng)度確定過程所消耗的時間。
為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種邊界濾波強(qiáng)度的確定方法,應(yīng)用于視頻編解碼設(shè)備,方法包括:
獲得目標(biāo)視頻編解碼過程中得到的重建圖像中每個編碼單元塊對應(yīng)的一組變換塊;
獲得該組變換塊中每個變換塊對應(yīng)的cbf值;
將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,其中,所述cbf碼字的每一位對應(yīng)一個變換塊的cbf值;
并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,分別得到每個所述邊界對應(yīng)的運(yùn)算結(jié)果;所述的邊界常量表中的每一項(xiàng)為每個邊界的常量值,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的;
根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。
較佳的,當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:宏塊;
所述cbf碼字的位數(shù)根據(jù)每組變換塊中變換塊的數(shù)量確定。
較佳的,所述將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,包括:
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為4,則將該組變換塊分別對應(yīng)的4個cbf值以及4個0作為8個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個1字節(jié)大小的cbf碼字;
或,
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為16,則將該16個變換塊各自對應(yīng)的16個cbf值作為16個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個2字節(jié)大小的cbf碼字。
較佳的,當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:編碼單元cu;
所述將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,包括:
如果未對所述編碼單元進(jìn)行四叉樹劃分,則將自身作為所述一組變換塊,利用該編碼單元對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組合為一個1字節(jié)大小的cbf碼字;
或,
將利用四叉樹劃分得到的各層變換單元tu作為所述一組變換塊,利用各層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序組合為1個cbf碼字,其中,被劃分了的該層tu對應(yīng)的cbf值設(shè)為0,且四叉樹劃分的tu總層數(shù)不大于3。
較佳的,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的,具體包括:
當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,判斷該邊界與所述一組變換塊中的1個變換塊是否相鄰;
如果是,則將(1<<(k-1))確定為該邊界的常量值,其中,k為與該邊界相鄰的變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
否則,將(1<<(m-1))+(1<<(n-1)),確定為該邊界的常量值,其中,m為與該邊界相鄰的2個變換塊中1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù),n為與該邊界相鄰的2個變換塊中另1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù)。
較佳的,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的,具體包括:
當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,針對每一條邊界,初始化該邊界的常量值為0;
逐層遍歷每一層中所有的變換單元tu,以判斷所述邊界是否為其中一個tu的邊界;
如果是,將所述邊界的當(dāng)前常量值加(1<<(a-1)),其中,a為該邊界所屬的tu對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
將遍歷完成得到的常量值,確定為所述邊界的常量值。
較佳的,所述指定運(yùn)算為:與運(yùn)算,
所述根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度,包括:
針對每個所述邊界,若所述邊界對應(yīng)的運(yùn)算結(jié)果為0,則將0確定為所述邊界的濾波強(qiáng)度,否則,將1確定為該邊界的濾波強(qiáng)度。
為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種邊界濾波強(qiáng)度的確定裝置,應(yīng)用于視頻編解碼設(shè)備,裝置包括:
第一獲得模塊,用于獲得目標(biāo)視頻編解碼過程中得到的重建圖像中每個編碼單元塊對應(yīng)的一組變換塊;
第二獲得模塊,用于獲得該組變換塊中每個變換塊對應(yīng)的cbf值;
組合模塊,用于將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,其中,所述cbf碼字的每一位對應(yīng)一個變換塊的cbf值;
運(yùn)算模塊,用于并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,分別得到每個所述邊界對應(yīng)的運(yùn)算結(jié)果;所述的邊界常量表中的每一項(xiàng)為每個邊界的常量值,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的;
確定模塊,用于根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。
較佳的,當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:宏塊;
所述cbf碼字的位數(shù)根據(jù)每組變換塊中變換塊的數(shù)量確定。
較佳的,所述組合模塊,具體用于:
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為4,則將該組變換塊分別對應(yīng)的4個cbf值以及4個0作為8個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個1字節(jié)大小的cbf碼字;
或,
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為16,則將該16個變換塊各自對應(yīng)的16個cbf值作為16個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個2字節(jié)大小的cbf碼字。
較佳的,當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:編碼單元cu;
所述組合模塊,具體用于:
如果未對所述編碼單元進(jìn)行四叉樹劃分,則將自身作為所述一組變換塊,利用該編碼單元對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組合為一個1字節(jié)大小的cbf碼字;
或,
將利用四叉樹劃分得到的各層變換單元tu作為所述一組變換塊,利用各層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序組合為1個cbf碼字,其中,被劃分了的該層tu對應(yīng)的cbf值設(shè)為0,且四叉樹劃分的tu總層數(shù)不大于3。
較佳的,所述運(yùn)算模塊,具體用于:
當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,判斷該邊界與所述一組變換塊中的1個變換塊是否相鄰;
如果是,則將(1<<(k-1))確定為該邊界的常量值,其中,k為與該邊界相鄰的變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
否則,將(1<<(m-1))+(1<<(n-1)),確定為該邊界的常量值,其中,m為與該邊界相鄰的2個變換塊中1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù),n為與該邊界相鄰的2個變換塊中另1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù)。
較佳的,所述運(yùn)算模塊,具體用于:
當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,針對每一條邊界,初始化該邊界的常量值為0;
逐層遍歷每一層中所有的變換單元tu,以判斷所述邊界是否為其中一個tu的邊界;
如果是,將所述邊界的當(dāng)前常量值加(1<<(a-1)),其中,a為該邊界所屬的tu對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
將遍歷完成得到的常量值,確定為所述邊界的常量值。
較佳的,所述指定運(yùn)算為:與運(yùn)算,
所述確定模塊,具體用于:
針對每個所述邊界,若所述邊界對應(yīng)的運(yùn)算結(jié)果為0,則將0確定為所述邊界的濾波強(qiáng)度,否則,將1確定為該邊界的濾波強(qiáng)度。
由上述的技術(shù)方案可見,本發(fā)明實(shí)施例提供了一種邊界濾波強(qiáng)度的確定方法及裝置,應(yīng)用于視頻編解碼設(shè)備,獲得目標(biāo)視頻編解碼過程中得到的重建圖像中每個編碼單元塊對應(yīng)的一組變換塊;獲得該組變換塊中每個變換塊對應(yīng)的cbf值;將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,其中,所述cbf碼字的每一位對應(yīng)一個變換塊的cbf值;并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,分別得到每個所述邊界對應(yīng)的運(yùn)算結(jié)果;所述的邊界常量表中的每一項(xiàng)為每個邊界的常量值,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的;根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。
本發(fā)明實(shí)施例中,將一組中每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,再根據(jù)運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。由于整個運(yùn)算過程是并行進(jìn)行的,無需串行判斷并確定出各個邊界的濾波強(qiáng)度,從而減少濾波強(qiáng)度的確定過程所消耗的時間,提高了視頻的編解碼速度。
當(dāng)然,實(shí)施本發(fā)明的任一產(chǎn)品或方法并不一定需要同時達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的邊界濾波強(qiáng)度的確定方法的一種流程示意圖;
圖2為一種16個4*4大小的變換塊的組成示意圖;
圖3為本發(fā)明實(shí)施例提供的一種編碼單元cu的劃分示意圖;
圖4為本發(fā)明實(shí)施例提供的邊界濾波強(qiáng)度的確定裝置的一種結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
下面首先對本發(fā)明實(shí)施例提供的一種邊界濾波強(qiáng)度的確定方法進(jìn)行詳細(xì)說明。
需要說明的是,本發(fā)明實(shí)施例優(yōu)選適用于視頻編解碼設(shè)備。例如,基于h.264視頻編解碼標(biāo)準(zhǔn)或h.265視頻編解碼標(biāo)準(zhǔn)的視頻編解碼設(shè)備。
參見圖1,圖1為本發(fā)明實(shí)施例提供的邊界濾波強(qiáng)度的確定方法的一種流程示意圖,可以包括如下步驟:
s101,獲得目標(biāo)視頻編解碼過程中得到的重建圖像中每個編碼單元塊對應(yīng)的一組變換塊;
具體的,當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:大小為16*16的宏塊,其對應(yīng)的一組變換塊可以是4個大小為8*8的變換塊,或者16個大小為4*4的變換塊。
具體的,當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊稱為:編碼單元cu,大小可以為64*64、32*32、16*16或者8*8,其對應(yīng)的變換塊稱為變換單元tu。
s102,獲得該組變換塊中每個變換塊對應(yīng)的cbf值;
具體的,對于1個變換塊,若該變換塊存在非零dct系數(shù),則將其對應(yīng)的cbf的值設(shè)為1,否則設(shè)為0,并將cbf存儲在提前開辟的緩存區(qū)中。在實(shí)際應(yīng)用中,可以從該緩存區(qū)中,獲得上述一組變換塊中每個變換塊對應(yīng)的cbf值。
s103,將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,其中,所述cbf碼字的每一位對應(yīng)一個變換塊的cbf值;
具體的,所述cbf碼字的位數(shù)是根據(jù)每組變換塊中變換塊的數(shù)量確定的。
具體的,在h.264視頻編解碼標(biāo)準(zhǔn)中,所述將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,可以針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為4,則將該組變換塊分別對應(yīng)的4個cbf值以及4個0作為8個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個1字節(jié)大小的cbf碼字,其中,按照預(yù)設(shè)順序進(jìn)行組合,可以為:將4個8*8的變換塊的cbf值置于1個字節(jié)的最后4個比特(即第1位到第4位),該字節(jié)的前4個比特置0(即第5位到第8位),此時cbf碼字的位數(shù)是8(cbf碼字的大小不夠一個1字節(jié)的,可以將比特位置0,使其大小達(dá)到1字節(jié));
或,
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為16,則將該16個變換塊各自對應(yīng)的16個cbf值作為16個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個2字節(jié)大小的cbf碼字。其中,預(yù)設(shè)順序,可以是16個4*4的變換塊的排序。
示例性的,圖2為一種16個4*4大小的變換塊的組成示意圖。如圖2所示,每1個面積最小的正方形代表1個4*4的邊界塊,是由1個的16*16的宏塊劃分而成。變換塊中心的數(shù)字序號0、1、2……14、15,分別代表變換塊0、變換塊1、變換塊2……變換塊14和變換塊15。
該16個4*4的變換塊排序依次為:變換塊0(對應(yīng)的cbf值為c0)、變換塊1(對應(yīng)的cbf值為c1)、變換塊2(對應(yīng)的cbf值為c2)、……、變換塊14(對應(yīng)的cbf值為c14)、變換塊15(對應(yīng)的cbf值為c15)。由變換塊排序,對應(yīng)得到該16個變換塊分別對應(yīng)的cbf值的預(yù)設(shè)順序?yàn)椋篶15(置于2個字節(jié)的第16個比特位)、c14(置于2個字節(jié)的第15個比特位)、……、c2(置于2個字節(jié)的第3個比特位)、c1(置于2個字節(jié)的第25個比特位)、c0(置于2個字節(jié)的第1個比特位)。按照該預(yù)設(shè)順序,組合成1個2字節(jié)大小的cbf碼字,該cbf碼字為:c15c14c13c12c11c10c9c8c7c6c5c4c3c2c1c0。
另外,位于變換塊邊界上的數(shù)字序號0、1、2、……、38、39,分別代表邊界0、邊界1、邊界2、……、邊界38和邊界39,共40個長度為4的邊界。
具體的,在h.265視頻編解碼標(biāo)準(zhǔn)中,所述將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,如果未對所述編碼單元進(jìn)行四叉樹劃分,則將自身作為所述一組變換塊,利用該編碼單元對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組合為一個1字節(jié)大小的cbf碼字,其中,按照預(yù)設(shè)順序組合成一個1字節(jié)大小的cbf碼字,可以為:將該編碼單元cu對應(yīng)的cbf值置于1個字節(jié)的第1個比特位,該字節(jié)的其余比特位置0;
或,
將利用四叉樹劃分得到的各層變換單元tu作為所述一組變換塊,利用各層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序組合為1個cbf碼字,其中,被劃分了的該層tu對應(yīng)的cbf值設(shè)為0,且四叉樹劃分的tu總層數(shù)不大于3。
具體的,當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,針對每個編碼單元塊cu,如果利用四叉樹將所述cu劃分為兩層,則將所述cu對應(yīng)的第二層4個變換單元tu,作為所述一組變換塊,并利用第二層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組成一個1字節(jié)大小的cbf碼字。
其中,由于第一層cu被劃分成4個tu,可以把第一層cu對應(yīng)的cbf值設(shè)為0,將其放在1個字節(jié)的第1位,將第二層4個tu對應(yīng)的4個cbf值依次放在第2位至第5位,字節(jié)的其余比特位置0,以組成一個1字節(jié)大小的cbf碼字。
如果,利用四叉樹將所述cu劃分為三層且存在未被劃分的第二層tu,則將所述cu對應(yīng)的、存在的第二層tu和第三層tu,作為所述一組變換塊,并利用存在的各層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組成一個3字節(jié)大小的cbf碼字。
其中,由于第一層cu被劃分為4個tu,可以將第一層cu對應(yīng)的cbf值設(shè)為0,將其放在3個字節(jié)的第1個比特位,將第二層tu分別對應(yīng)的cbf值放在該3個字節(jié)的第2位至第5位,其中,將第二層4個tu中、被劃分了的tu對應(yīng)的cbf值設(shè)為0。然后,將劃分到的第三層tu對應(yīng)的cbf值,可以從第6位開始依次放置完,最后將該3個字節(jié)的其余比特位置0,以組成1個3字節(jié)大小的cbf碼字。或者,將劃分到的第三層tu對應(yīng)的cbf值,可以從第9位開始依次放置完,最后將該3個字節(jié)的空余比特位置0。
示例性的,圖3為本發(fā)明實(shí)施例提供的一種編碼單元cu的劃分示意圖。如圖3所示,0、1、2、3、4、5、6、7、8、9、10、……、14、15、16、17、18、19、20、21、……、30、31、32、33、34、35分別代表邊界的序號,a、b、c、d、e、f、g、h、i、j、k、l、m分別代表劃分得到的變換單元tu,其中,第一層cu被劃分為4個第二層tu,第二層tu中的3個tu又被劃分為第三層12個tu,變換單元i未被劃分。
由前述可知,利用四叉樹將所述cu劃分為三層且存在未被劃分的第二層tu的情況下,組成的一個3字節(jié)大小的cbf碼字可以為:000cmclckcj0000chcgcfcecdcccbca0ci000,或者cmclckcj0000chcgcfcecdcccbca0000ci000。其中,cm、cl、ck、cj、ch、cg、cf、ce、cd、cc、cb、ca、ci分別為變換單元m、l、k、j、h、g、f、e、d、c、b、a、i分別對應(yīng)的cbf值。
并且,該cbf碼字的第1比特位的0表示第一層tu(即cu本身)對應(yīng)的cbf值,第2比特位的0表示a、b、c、d組成的第二層1個tu(即該tu被劃分為了第三層的變換單元a、b、c、d)所對應(yīng)的cbf值,第3比特位的0表示e、f、g、h組成的第二層另個tu對應(yīng)的cbf值,第5比特位的0表示表示j、k、l、m組成的第二層再一個tu對應(yīng)的cbf值,位于cj和ch中間的4個0表示由于第二層變換單元i未被四叉樹劃分、導(dǎo)致未劃分到的4個不存在的第三層tu所對應(yīng)的cbf值,其余比特位的0均無實(shí)際意義。
如果,利用四叉樹將所述cu劃分為三層且不存在未被劃分的第二層tu,則將所述cu對應(yīng)的第三層16個tu,作為所述一組變換塊,并利用第三層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組成一個3字節(jié)大小的cbf碼字。
其中,由于第一層cu被劃分為4個tu,該4個第二層的tu又被劃分成總共16個第三層的tu,則可以將第一層tu對應(yīng)的1個cbf值設(shè)為0,將其放在3個字節(jié)的第1個比特位,將第二層tu對應(yīng)的4個cbf值也設(shè)為0,將該4個0放在該3個字節(jié)的第2位至第5位,將第三層16個tu分別對應(yīng)的cbf值依次放在該3個字節(jié)的第6位至第21位,其余比特位置0,以組成一個3字節(jié)大小的cbf碼字。
需要說明的是,將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,具體按照哪種預(yù)設(shè)順序,需要根據(jù)所使用的視頻編解碼標(biāo)準(zhǔn),以及每組變換塊或每組變換單元tu的劃分情況來確定,上述所給出的預(yù)設(shè)順序僅僅作為示例,并不應(yīng)該構(gòu)成對本發(fā)明實(shí)施例的限定。
s104,并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,分別得到每個所述邊界對應(yīng)的運(yùn)算結(jié)果;所述的邊界常量表中的每一項(xiàng)為每個邊界的常量值,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的;
具體的,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的,具體包括:
當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,判斷該邊界與所述一組變換塊中的1個變換塊是否相鄰;
其中,該組變換塊為4個,該邊界可以與其中的1個變換塊相鄰(可理解為該邊界僅屬于其中1個變換塊的邊界),或者與其中的2個變換塊相鄰(可理解為該邊界屬于這2個變換塊的共有邊界)。
如果是,則將(1<<(k-1))確定為該邊界的常量值,其中,k為與該邊界相鄰的變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
否則,將(1<<(m-1))+(1<<(n-1)),確定為該邊界的常量值,其中,m為與該邊界相鄰的2個變換塊中1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù),n為與該邊界相鄰的2個變換塊中另1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù)。
示例性的,如圖2所示,在一組變換塊為16個4*4變換塊的情況下,由上述可知,組合得到的cbf碼字為c15c14c13c12c11c10c9c8c7c6c5c4c3c2c1c0。其中,邊界29相鄰的2個變換塊為變換塊3和變換塊9,分別對應(yīng)的cbf值在cbf碼字中比特位數(shù),分別是4和10,即m=4、n=10,或者m=10、n=4。則確定出,邊界29的常量值(1<<(m-1))+(1<<(n-1))=(1<<3)+(1<<9)。同理,可確定邊界34的常量值為(1<<12)+(1<<14),邊界1的常量值(1<<(k-1))=(1<<2)。
具體的,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的,具體可以包括:
當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,針對每一條邊界,初始化該邊界的常量值為0;
逐層遍歷每一層中所有的變換單元tu,以判斷所述邊界是否為其中一個tu的邊界;
如果是,將所述邊界的當(dāng)前常量值加(1<<(a-1)),其中,a為該邊界所屬的tu對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
將遍歷完成得到的常量值,確定為所述邊界的常量值。
示例性的,如圖3所示,在將所述cu劃分為三層且存在未被劃分的第二層tu的情況下,組成的cbf碼字可以為:000cmclckcj0000chcgcfcecdcccbca0ci000,或者cmclckcj0000chcgcfcecdcccbca0000ci000。
以組成的cbf碼字為000cmclckcj0000chcgcfcecdcccbca0ci000為例進(jìn)行說明。針對邊界0,初始化其在常量表中的常量值為0,逐層遍歷每一層中的所有tu,首先判斷出該邊界0是其中第一層最大的tu(其對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為1)的邊界,則將邊界0的當(dāng)前常量值加上1,得到常量值為1。然后,判斷出該邊界是其中第二層第1個被劃分了的tu(其對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為2)的邊界,則將當(dāng)前常量值1再加上(1<<1),得到常量值為1+(1<<1)。最后,又判斷出邊界0是第三層第1個tu(其對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為6)的邊界,則將當(dāng)前常量值1+(1<<1)再加上(1<<5),最終遍歷完成,得到的邊界0在邊界常量表中的常量值即為1+(1<<1)+(1<<5)。
同理,可得到其他任一邊界的常量值。例如,邊界2或3是第一層1個tu、第二層1個未被劃分的tu所共有的邊界,其所屬的第一層tu對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為1,該邊界所屬的第二層變換單元i對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為4。并且,邊界2還是第二層變換單元i對應(yīng)的、沒劃分到的第三層四個tu中第一個tu(i沒被劃分到第三層,沒劃分到的第三層4個tu類似于a、b、c、d,第一個tu類似于a、e、j,圖3中未示出)的邊界,該第一個tu對應(yīng)的cbf值(由于該tu沒劃分到,其cbf值設(shè)為0)在cbf碼字中的比特位數(shù)為14,則將1+(1<<3)+(1<<13),確定為邊界2的常量值。然而,邊界3屬于第二層變換單元i對應(yīng)的、沒劃分到的第三層四個tu中的第三個tu(類似于c、g、l,圖中未示出),其對應(yīng)的cbf值在cbf碼字中的位數(shù)為16,故將1+(1<<3)+(1<<15)確定為邊界3的常量值。
邊界4只是第三層變換單元a和b共有的邊界,其中,變換單元a和b分別對應(yīng)的cbf值在cbf碼字中的比特位數(shù)分別是6和7,則將(1<<5)+(1<<6)確定為邊界4的常量值。
邊界5所屬的第三層變換單元c對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為8,該邊界所屬的第三層變換單元d對應(yīng)的cbf值在cbf碼字中的比特位數(shù)為9,則將(1<<7)+(1<<8),確定為邊界5的常量值。
同時,針對邊界7,它是第二層2個tu、第三層2個tu共4個tu所共有的邊界。其所屬的第二層被劃分了的2個tu所分別對應(yīng)的cbf值在cbf碼字中的比特位數(shù)分別是2和3,所屬的第三層的2個tu所分別對應(yīng)的cbf值在cbf碼字中的比特位數(shù)分別是9和12,則最終邊界7的常量值是(1<<1)+(1<<2)+(1<<8)+(1<<11)。
再如,邊界8在第二層是塊i和塊jklm(被劃分為了j、k、l、m四個第三層的塊)的共有邊界,塊i和塊jklm對應(yīng)的cbf值在cbf碼字中的比特位數(shù)分別為4和5。在第三層,它是變換單元i對應(yīng)的、沒劃分到的第三層四個tu中的第二個tu(類似于b、f、k,圖中未示出)和塊j的公共邊界,塊i對應(yīng)的、未劃分到的第三層第二個tu和塊j對應(yīng)的cbf值在cbf碼字中的位數(shù)分別是15和18,則將(1<<3)+(1<<4)+(1<<14)+(1<<17),確定為邊界8的常量值。
s105,根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。
具體的,所述指定運(yùn)算為:與運(yùn)算,
所述根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度,包括:
針對每個所述邊界,若所述邊界對應(yīng)的運(yùn)算結(jié)果為0,則將0確定為所述邊界的濾波強(qiáng)度,否則,將1確定為該邊界的濾波強(qiáng)度。
示例性的,如圖3所示,以cbf碼字為000cmclckcj0000chcgcfcecdcccbca0ci000=000000000000000000001000為例,并行將該cbf碼字與每個邊界的常量值進(jìn)行與運(yùn)算,分別得到每個邊界對應(yīng)的運(yùn)算結(jié)果,在根據(jù)所述運(yùn)算結(jié)果,分別確定每個邊界的濾波強(qiáng)度。例如,將該cbf碼字與邊界2的常量值1+(1<<3)+(1<<13)進(jìn)行與運(yùn)算,運(yùn)算結(jié)果為000000000000000000001000,可見不為0,此時可以將1確定為邊界2的濾波強(qiáng)度。同理,可以同時確定出其他每個邊界的濾波強(qiáng)度。
可見,將一組中每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,在根據(jù)運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。由于整個運(yùn)算過程是并行進(jìn)行的,無需串行判斷并確定出各個邊界的濾波強(qiáng)度,從而減少濾波強(qiáng)度的確定過程所消耗的時間,提高了視頻的編解碼速度。
參見圖4,圖4為本發(fā)明實(shí)施例提供的邊界濾波強(qiáng)度的確定裝置的一種結(jié)構(gòu)示意圖,與圖1所示的流程相對應(yīng),該確定裝置可以包括:第一獲得模塊401、第二獲得模塊402、組合模塊403、運(yùn)算模塊404和確定模塊405。
第一獲得模塊401,用于獲得目標(biāo)視頻編解碼過程中得到的重建圖像中每個編碼單元塊對應(yīng)的一組變換塊;
第二獲得模塊402,用于獲得該組變換塊中每個變換塊對應(yīng)的cbf值;
組合模塊403,用于將每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,其中,所述cbf碼字的每一位對應(yīng)一個變換塊的cbf值;
運(yùn)算模塊404,用于并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,分別得到每個所述邊界對應(yīng)的運(yùn)算結(jié)果;所述的邊界常量表中的每一項(xiàng)為每個邊界的常量值,所述邊界常量表中的常量值為預(yù)先根據(jù)邊界相鄰的塊對應(yīng)的cbf值在cbf碼字中的位置確定的;
確定模塊405,用于根據(jù)所述運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。
具體的,當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:宏塊;
所述cbf碼字的位數(shù)根據(jù)每組變換塊中變換塊的數(shù)量確定。
具體的,所述組合模塊403,具體用于:
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為4,則將該組變換塊分別對應(yīng)的4個cbf值以及4個0作為8個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個1字節(jié)大小的cbf碼字;
或,
針對每個編碼單元塊對應(yīng)的一組變換塊,如果該組變換塊的個數(shù)為16,則將該16個變換塊各自對應(yīng)的16個cbf值作為16個比特位數(shù)據(jù),按照預(yù)設(shè)順序,組合成一個2字節(jié)大小的cbf碼字。
具體的,當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,所述編碼單元塊為:編碼單元cu;
所述組合模塊403,具體用于:
如果未對所述編碼單元進(jìn)行四叉樹劃分,則將自身作為所述一組變換塊,利用該編碼單元對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序,組合為一個1字節(jié)大小的cbf碼字;
或,
將利用四叉樹劃分得到的各層變換單元tu作為所述一組變換塊,利用各層tu分別對應(yīng)的cbf值以及0,按照預(yù)設(shè)順序組合為1個cbf碼字,其中,被劃分了的該層tu對應(yīng)的cbf值設(shè)為0,且四叉樹劃分的tu總層數(shù)不大于3。
具體的,所述運(yùn)算模塊404,具體用于:
當(dāng)利用h.264標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,判斷該邊界與所述一組變換塊中的1個變換塊是否相鄰;
如果是,則將(1<<(k-1))確定為該邊界的常量值,其中,k為與該邊界相鄰的變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
否則,將(1<<(m-1))+(1<<(n-1)),確定為該邊界的常量值,其中,m為與該邊界相鄰的2個變換塊中1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù),n為與該邊界相鄰的2個變換塊中另1個變換塊對應(yīng)的cbf值在cbf碼字中的比特位數(shù)。
具體的,所述運(yùn)算模塊404,具體用于:
當(dāng)利用h.265標(biāo)準(zhǔn),對目標(biāo)視頻進(jìn)行編解碼時,針對每一條邊界,初始化該邊界的常量值為0;
逐層遍歷每一層中所有的變換單元tu,以判斷所述邊界是否為其中一個tu的邊界;
如果是,將所述邊界的當(dāng)前常量值加(1<<(a-1)),其中,a為該邊界所屬的tu對應(yīng)的cbf值在cbf碼字中的比特位數(shù);
將遍歷完成得到的常量值,確定為所述邊界的常量值。
具體的,所述指定運(yùn)算為:與運(yùn)算,
所述確定模塊405,具體用于:
針對每個所述邊界,若所述邊界對應(yīng)的運(yùn)算結(jié)果為0,則將0確定為所述邊界的濾波強(qiáng)度,否則,將1確定為該邊界的濾波強(qiáng)度。
可見,將一組中每個變換塊對應(yīng)的cbf值按預(yù)設(shè)順序組合為一個cbf碼字,并行將所述cbf碼字與預(yù)先構(gòu)建的邊界常量表中的每一項(xiàng)進(jìn)行指定運(yùn)算,在根據(jù)運(yùn)算結(jié)果,分別確定每個所述邊界的濾波強(qiáng)度。由于整個運(yùn)算過程是并行進(jìn)行的,無需串行判斷并確定出各個邊界的濾波強(qiáng)度,從而減少濾波強(qiáng)度的確定過程所消耗的時間,提高了視頻的編解碼速度。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實(shí)體或者操作與另一個實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個實(shí)施例均采用相關(guān)的方式描述,各個實(shí)施例之間相同相似的部分互相參見即可,每個實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施方式中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于計(jì)算機(jī)可讀取存儲介質(zhì)中,這里所稱得的存儲介質(zhì),如:rom/ram、磁碟、光盤等。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。