一種視頻幀的編碼及解碼方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及視頻壓縮技術(shù)領(lǐng)域,更具體的說(shuō)是涉及一種視頻幀的編碼及解碼方法和裝置。
【背景技術(shù)】
[0002]在視頻數(shù)據(jù)傳輸之前,一般需要對(duì)視頻數(shù)據(jù)進(jìn)行壓縮編碼。目前的視頻編碼標(biāo)準(zhǔn)中,原始視頻幀被分為:幀內(nèi)編碼幀,也稱為I幀(Intra-fram);單向預(yù)測(cè)幀,也稱為P幀(Predictive-frame);以及雙向預(yù)測(cè)巾貞,也稱為 B (Bidirect1nally predicted-frame)三種類型。
[0003]為了提高這三種視頻幀的壓縮比,人們提出了幀內(nèi)塊復(fù)制編碼模式(Mode_INTRABC, Mode_Intra Block Copy),即在視頻幀編碼時(shí),也允許為當(dāng)前編碼塊在其相鄰區(qū)域中找到一個(gè)匹配塊。雖然Mode_INTRABC的提出在一定程度上提高了視頻幀的壓縮比,但是目前基于Mode_INTRABC模式對(duì)視頻幀進(jìn)行編碼,卻可能存在著編碼效率低的問(wèn)題,進(jìn)而也影響到后續(xù)解碼出的視頻質(zhì)量。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本申請(qǐng)?zhí)峁┮环N視頻幀的編碼及解碼方法和裝置,在編碼過(guò)程中,保證視頻幀的壓縮比的前提下,提高對(duì)視頻幀編碼的編碼效率,并提高解碼出的視頻質(zhì)量。
[0005]為實(shí)現(xiàn)上述目的,本申請(qǐng)?zhí)峁┤缦录夹g(shù)方案:一種視頻幀的解碼方法,包括:
[0006]獲取待解碼的視頻幀中當(dāng)前待解碼的當(dāng)前編碼單元;
[0007]確定所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值;
[0008]對(duì)所述當(dāng)前編碼單元進(jìn)行解析,得到所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量差值;
[0009]根據(jù)所述運(yùn)動(dòng)矢量差值和所述運(yùn)動(dòng)矢量預(yù)測(cè)值,確定所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量;
[0010]當(dāng)所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量為(0,0)時(shí),則確定所述當(dāng)前編碼單元為所述運(yùn)動(dòng)向量指向的參考單元,為所述參考單元分配初始值,并設(shè)定所述當(dāng)前編碼單元的殘差為零;
[0011]依據(jù)所述參考單元的初始值和所述殘差,將所述參考單元的初始值確定為所述當(dāng)前編碼單元的重建值。
[0012]優(yōu)選的,所述確定所述當(dāng)前編碼單元的初始運(yùn)動(dòng)矢量預(yù)測(cè)值,包括:
[0013]將所述視頻幀中,在所述當(dāng)前編碼單元之前最近一個(gè)解碼出的采用幀內(nèi)塊復(fù)制M0DE_INTRABC編碼模式編碼的編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值。
[0014]優(yōu)選的,所述確定所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值,包括:
[0015]當(dāng)所述視頻幀中與所述當(dāng)前編碼單元相鄰且已被解碼的指定編碼單元中,不存在采用所述M0DE_INTRABC編碼模式編碼的編碼單元時(shí),則將所述運(yùn)動(dòng)矢量預(yù)測(cè)值設(shè)定為(O, O) 0
[0016]優(yōu)選的,所述當(dāng)所述視頻幀中與所述當(dāng)前編碼單元相鄰且已被解碼的指定編碼單元中,不存在采用所述M0DE_INTRABC編碼模式進(jìn)行解碼的編碼單元,包括:
[0017]當(dāng)所述視頻幀中與所述當(dāng)前編碼單元相鄰且位于所述當(dāng)前編碼單元上方和左側(cè)的已被解碼的編碼單兀中,不存在米用所述M0DE_INTRABC編碼模式進(jìn)行編碼的編碼單兀。
[0018]優(yōu)選的,還包括:
[0019]當(dāng)所述指定編碼單元中存在采用所述M0DE_INTRABC編碼模式編碼的編碼單元時(shí),則對(duì)與所述當(dāng)前編碼單元相鄰且已被解碼的所有編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量取中值,將所述中值作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值;或者,將所述視頻幀中,在所述當(dāng)前編碼單元之前最近一個(gè)解碼出的采用所述M0DE_INTRABC編碼模式編碼的編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值。
[0020]優(yōu)選的,所述為所述參考單元分配初始值,包括:
[0021]將所述視頻幀中與所述參考單元緊鄰且位于所述參考單元上方的編碼單元中最下一行的重建值作為所述參考單元中各行的初始值;
[0022]或者,將所述視頻幀中與所述參考單元緊鄰且位于所述參考單元左側(cè)的編碼單元中最右一列的重建值作為所述參考單元中各列的初始值;
[0023]或者,將所述視頻幀中與所述參考單元緊鄰且已被解碼的目標(biāo)編碼單元運(yùn)動(dòng)矢量的橫坐標(biāo)和縱坐標(biāo)進(jìn)行比較,如果所述橫坐標(biāo)大于所述縱坐標(biāo),則將所述視頻幀中與所述參考單元緊鄰且位于所述參考單元左方編碼單元最右一列的重建值作為所述參考單元中各列的重建值;如果所述橫坐標(biāo)小于所述縱坐標(biāo),則將所述視頻幀中與所述參考單元緊鄰且位于所述參考單元上方的編碼單元最下一行的重建值作為所述參考單元中各行的重建值;如果所述橫坐標(biāo)等于所述縱坐標(biāo),則根據(jù)與所述參考單元緊鄰且位于所述參考單元上方的編碼單元中最下一行中各像素點(diǎn)的重建值,以及與所述參考單元緊鄰且位于所述參考單元左側(cè)的編碼單元中最右一列中各像素點(diǎn)的重建值,對(duì)所述參考單元中各像素點(diǎn)進(jìn)行二維平面插值,確定出所述參考單元的重建值;其中,所述目標(biāo)編碼單元為位于所述當(dāng)前編碼單元上方或者左側(cè)的編碼單元。
[0024]優(yōu)選的,當(dāng)所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量不為(0,O)時(shí),則對(duì)所述當(dāng)前編碼單元進(jìn)行解析,得到所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量差值的同時(shí),還得到所述當(dāng)前編碼單元對(duì)應(yīng)的殘差;
[0025]則確定所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量之后,還包括:確定所述運(yùn)動(dòng)矢量所指向的參考單元,并獲取解碼出的所述參考單元的重建值;
[0026]根據(jù)所述參考單元的重建值和所述解析出的殘差,構(gòu)建所述當(dāng)前編碼單元的重建值。
[0027]另一方面,本申請(qǐng)還提供了一種視頻幀的編碼方法,包括:
[0028]獲取視頻幀中當(dāng)前待編碼的當(dāng)前編碼單元;
[0029]確定所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值;
[0030]從所述視頻幀中確定包含所述當(dāng)前編碼單元的參考區(qū)域,并為所述當(dāng)前編碼單元分配初始值;
[0031]根據(jù)所述參考區(qū)域中當(dāng)前編碼單元的初始值以及當(dāng)前編碼單元之外的其他編碼單元的重建值,在所述參考區(qū)域內(nèi)進(jìn)行運(yùn)動(dòng)估計(jì),確定出所述當(dāng)前編碼對(duì)應(yīng)的運(yùn)動(dòng)矢量差值;
[0032]根據(jù)所述運(yùn)動(dòng)矢量預(yù)測(cè)值和所述運(yùn)動(dòng)矢量差值,確定所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量;
[0033]根據(jù)所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量和所述運(yùn)動(dòng)矢量差值,對(duì)所述當(dāng)前編碼單元進(jìn)行編碼。
[0034]優(yōu)選的,在從當(dāng)前編碼單元所在的視頻幀中,確定包含所述當(dāng)前編碼單元的參考區(qū)域之前,還包括:
[0035]當(dāng)所述視頻幀中與所述當(dāng)前編碼單元相鄰且已被編碼的指定編碼單元中,不存在采用幀內(nèi)塊復(fù)制M0DE_INTRABC編碼模式進(jìn)行編碼的編碼單元時(shí),則將所述運(yùn)動(dòng)矢量預(yù)測(cè)值修改為(O, O)。
[0036]優(yōu)選的,所述根據(jù)所述運(yùn)動(dòng)矢量和所述運(yùn)動(dòng)矢量差值,對(duì)所述當(dāng)前編碼單元進(jìn)行編碼,包括:
[0037]當(dāng)所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量為(0,O)時(shí),將所述當(dāng)前編碼單元對(duì)應(yīng)的殘差設(shè)置為O ;
[0038]根據(jù)所述運(yùn)動(dòng)矢量差值和所述殘差,對(duì)所述當(dāng)前編碼單元進(jìn)行編碼。
[0039]優(yōu)選的,所述確定所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值,包括:
[0040]將所述視頻幀中,在所述當(dāng)前編碼單元之前最近一個(gè)采用M0DE_INTRABC編碼模式進(jìn)行編碼的編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值;
[0041]或者,將與所述當(dāng)前編碼單元相鄰且已被編碼的所有編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量取中值,將所述中值作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值。
[0042]優(yōu)選的,所述為所述當(dāng)前編碼單元分配初始值,包括:
[0043]將所述視頻幀中與所述當(dāng)前編碼單元緊鄰且位于所述當(dāng)前編碼單元上方的編碼單元中最下一行的重建值作為所述當(dāng)前編碼單元中各行的初始值;
[0044]或者,將所述視頻幀中與所述當(dāng)前編碼單元緊鄰且位于所述當(dāng)前編碼單元左側(cè)的編碼單元中最右一列的重建值作為所述當(dāng)前編碼單元中各列的初始值;
[0045]或者,將所述視頻幀中與所述當(dāng)前編碼單元緊鄰且已被編碼的目標(biāo)編碼單元運(yùn)動(dòng)矢量的橫坐標(biāo)和縱坐標(biāo)進(jìn)行比較,如果所述橫坐標(biāo)大于所述縱坐標(biāo),則將所述視頻幀中與所述當(dāng)前編碼單元緊鄰且位于所述當(dāng)前編碼單元左側(cè)的編碼單元最右一列的重建值作為所述當(dāng)前編碼單元各列的初始值;如果所述橫坐標(biāo)小于所述縱坐標(biāo),則將所述視頻幀中與所述當(dāng)前編碼單元緊鄰且位于所述當(dāng)前編碼單元上方的編碼單元最下一行的重建值作為所述當(dāng)前編碼單元各行的初始值;如果所述橫坐標(biāo)等于所述縱坐標(biāo),則根據(jù)與所述參考單元緊鄰且位于所述參考單元上方的編碼單元中最下一行中各像素點(diǎn)的重建值,以及與所述參考單元緊鄰且位于所述參考單元左側(cè)的編碼單元中最右一列中各像素點(diǎn)的中間值,對(duì)所述參考單元中各像素點(diǎn)進(jìn)行二維平面插值,確定所述當(dāng)前編碼單元的初始值;其中,所述目標(biāo)編碼單元為位于所述當(dāng)前編碼單元上方或者左側(cè)的編碼單元。
[0046]另一方面,本申請(qǐng)還提供了一種視頻幀的解碼裝置,包括:
[0047]獲取單元,用于獲取待解碼的視頻幀中當(dāng)前待解碼的當(dāng)前編碼單元;
[0048]預(yù)測(cè)單元,用于確定所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值;
[0049]解析單元,用于對(duì)所述當(dāng)前編碼單元進(jìn)行解析,得到所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量差值;
[0050]矢量確定單元,用于根據(jù)所述運(yùn)動(dòng)矢量差值和所述運(yùn)動(dòng)矢量預(yù)測(cè)值,確定所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量;
[0051]參考確定單元,用于當(dāng)所述當(dāng)前編碼單元對(duì)應(yīng)的運(yùn)動(dòng)矢量為(0,0)時(shí),則確定所述當(dāng)前編碼單元為所述運(yùn)動(dòng)向量指向的參考單元,為所述參考單元分配初始值,并設(shè)定所述當(dāng)前編碼單元的殘差為零;
[0052]解碼單元,用于依據(jù)所述參考單元的初始值和所述殘差,將所述參考單元的初始值確定為所述當(dāng)前編碼單元的重建值。
[0053]優(yōu)選的,所述解析單元,包括:
[0054]第一解析單元,用于將所述視頻幀中,在所述當(dāng)前編碼單元之前最近一個(gè)解碼出的采用幀內(nèi)塊復(fù)制M0DE_INTRABC編碼模式編碼的編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值。
[0055]優(yōu)選的,所述預(yù)測(cè)單元,包括:
[0056]第一預(yù)測(cè)單元,用于當(dāng)所述視頻幀中與所述當(dāng)前編碼單元相鄰且已被解碼的指定編碼單元中,不存在采用所述M0DE_INTRABC編碼模式編碼的編碼單元時(shí),則將所述運(yùn)動(dòng)矢量預(yù)測(cè)值設(shè)定為(0,O)。
[0057]優(yōu)選的,所述第一預(yù)測(cè)單元,包括:
[0058]第一預(yù)測(cè)子單元,用于當(dāng)所述視頻幀中與所述當(dāng)前編碼單元相鄰且位于所述當(dāng)前編碼單元上方和左側(cè)的已被解碼的編碼單元中,不存在采用所述M0DE_INTRABC編碼模式進(jìn)行編碼的編碼單元時(shí),將所述運(yùn)動(dòng)矢量預(yù)測(cè)值設(shè)定為(0,O)。
[0059]優(yōu)選的,還包括:
[0060]第二預(yù)測(cè)單元,用于當(dāng)所述指定編碼單元中存在采用所述M0DE_INTRABC編碼模式編碼的編碼單元時(shí),則對(duì)與所述當(dāng)前編碼單元相鄰且已被解碼的所有編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量取中值,將所述中值作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值;
[0061]或者,第三預(yù)測(cè)單元,用于當(dāng)所述指定編碼單元中存在采用所述M0DE_INTRABC編碼模式編碼的編碼單元時(shí),將所述視頻幀中,在所述當(dāng)前編碼單元之前最近一個(gè)解碼出的采用所述M0DE_INTRABC編碼模式編碼的編碼單元所對(duì)應(yīng)的運(yùn)動(dòng)矢量作為所述當(dāng)前編碼單元的運(yùn)動(dòng)矢量預(yù)測(cè)值。
[0062]優(yōu)選的,所述參考確定單元為所述參考單元分配初始值包括:
[0063]將所述視頻幀中與所述參考單元緊鄰且位于所述參考單元上方的編碼