亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

視頻編碼方法和視頻編碼器與流程

文檔序號(hào):12498248閱讀:636來(lái)源:國(guó)知局
視頻編碼方法和視頻編碼器與流程
本發(fā)明實(shí)施例涉及視頻編碼技術(shù),尤其涉及一種視頻編碼方法和視頻編碼器。
背景技術(shù)
:視頻編碼是指通過(guò)特定的壓縮技術(shù),將某個(gè)視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件,用于減少視頻容量的大小,提高傳輸效率。其中,視頻編碼具體包括預(yù)測(cè)編碼、殘差編碼、變換、量化、熵編碼等多個(gè)步驟。目前,為了提高視頻編碼的效率,常用的視頻編碼有幀間并行視頻編碼和幀內(nèi)并行視頻編碼,其中,幀內(nèi)并行視頻編碼具體為片級(jí)并行編碼,該視頻編碼的方式是將一幀圖像在橫向上劃分成多個(gè)片,多個(gè)片之間并行進(jìn)行編碼。但是,由于上述多個(gè)片之間在進(jìn)行并行編碼的過(guò)程中,易導(dǎo)致無(wú)法為每個(gè)片內(nèi)的宏塊找到最佳預(yù)測(cè)像素值,使得宏塊的碼率偏高,進(jìn)而導(dǎo)致視頻編碼后的圖像的碼率偏高。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種視頻編碼方法和視頻編碼器,以解決現(xiàn)有技術(shù)中視頻編碼后的圖像的碼率偏高的技術(shù)問(wèn)題。本發(fā)明第一方面提供一種視頻編碼方法,包括:確定待編碼視頻圖像數(shù)據(jù)的待編碼陣列,其中,所述待編碼陣列包括m×n個(gè)宏塊,m和n均為大于1的整數(shù);對(duì)所述待編碼陣列中的宏塊進(jìn)行分組,其中,在分組過(guò)程中,將前一個(gè)宏塊組的宏塊作為參考幀,確定所述前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀,將所述前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊;啟動(dòng)N個(gè)進(jìn)程并行對(duì)所述待編碼陣列中的宏塊進(jìn)行編碼,其中,所述N 個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,每一輪編碼過(guò)程中每個(gè)進(jìn)程對(duì)所述宏塊組中的至少一個(gè)宏塊進(jìn)行編碼。如上所述,所述對(duì)所述待編碼陣列中的宏塊進(jìn)行分組,具體包括:將所述待編碼陣列中的第一列宏塊作為參考幀,并將所述第一列宏塊的編號(hào)設(shè)置為從小到大的連續(xù)奇數(shù)或連續(xù)偶數(shù);將所述第一列宏塊的編號(hào)加1作為相鄰的后一宏塊的編號(hào),其中,所述相鄰的后一宏塊為所述第一列宏塊對(duì)應(yīng)的預(yù)測(cè)幀;對(duì)所述待編碼陣列中的其他宏塊進(jìn)行編號(hào),其中,所述其他宏塊的編號(hào)為相鄰的前一宏塊的編號(hào)加1,所述相鄰的前一宏塊為所述其他宏塊對(duì)應(yīng)的參考幀;將所述待編碼陣列中編號(hào)相同的宏塊劃分到一個(gè)宏塊組中;則所述啟動(dòng)N個(gè)進(jìn)程并行對(duì)所述待編碼陣列中的宏塊進(jìn)行編碼,具體包括:所述N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,各輪之間按照所述待編碼陣列中所述宏塊組中的宏塊對(duì)應(yīng)的編號(hào)由小到大執(zhí)行。如上所述,所述啟動(dòng)N個(gè)進(jìn)程并行對(duì)所述待編碼陣列中的宏塊進(jìn)行編碼,包括:針對(duì)第i個(gè)宏塊,當(dāng)所述第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型為幀內(nèi)預(yù)測(cè)編碼時(shí),則確定所述第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式;根據(jù)確定的所述第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,從已經(jīng)編碼的宏塊中確定所述第i個(gè)宏塊的預(yù)測(cè)像素值;所述第i個(gè)宏塊為所述待編碼陣列中的宏塊中的任意一個(gè)宏塊;確定所述第i個(gè)宏塊和所述預(yù)測(cè)像素值的殘差;對(duì)所述第i個(gè)宏塊和所述預(yù)測(cè)像素值的殘差進(jìn)行變換;確定所述第i個(gè)宏塊的量化步長(zhǎng),根據(jù)所述第i個(gè)宏塊的量化步長(zhǎng)對(duì)變換后的數(shù)據(jù)進(jìn)行量化;對(duì)量化后的數(shù)據(jù)進(jìn)行熵編碼得到所述第i個(gè)宏塊的編碼數(shù)據(jù)。如上所述,所述待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)為預(yù)先設(shè)定的常數(shù),所述方法還包括:在對(duì)所述第i個(gè)宏塊進(jìn)行熵編碼完成后,根據(jù)所述第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng),確定所述第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差 值;將所述第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值寫(xiě)入所述第i個(gè)宏塊的編碼數(shù)據(jù)中;將所述第i個(gè)宏塊的編碼數(shù)據(jù)寫(xiě)入所述碼流緩沖區(qū)中。如上所述,所述方法還包括:在所述待編碼陣列的所有宏塊都進(jìn)行熵編碼完成后,確定每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值;將每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值分別寫(xiě)入每個(gè)宏塊的編碼數(shù)據(jù)中;將所述待編碼陣列的所有宏塊的編碼數(shù)據(jù)寫(xiě)入所述碼流緩存區(qū)中。本發(fā)明第二方面提供一種視頻編碼器,包括:確定模塊,用于確定待編碼視頻圖像數(shù)據(jù)的待編碼陣列,其中,所述待編碼陣列包括m×n個(gè)宏塊,m和n均為大于1的正整數(shù);分組模塊,用于對(duì)所述待編碼陣列中的宏塊進(jìn)行分組,其中,在分組過(guò)程中,將前一個(gè)宏塊組的宏塊作為參考幀,確定所述前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀,將所述前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊;編碼模塊,用于啟動(dòng)N個(gè)進(jìn)程并行對(duì)所述待編碼陣列中的宏塊進(jìn)行編碼,其中,所述N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,每一輪編碼過(guò)程中每個(gè)進(jìn)程對(duì)所述宏塊組中的至少一個(gè)宏塊進(jìn)行編碼。如上所述,所述分組模塊,用于對(duì)所述待編碼陣列中的宏塊進(jìn)行分組,具體為:所述分組模塊,具體用于將所述待編碼陣列中的第一列宏塊作為參考幀,并將所述第一列宏塊的編號(hào)設(shè)置為從小到大的連續(xù)奇數(shù)或連續(xù)偶數(shù);將所述第一列宏塊的編號(hào)加1作為相鄰的后一宏塊的編號(hào),其中,所述相鄰的后一宏塊為所述第一列宏塊對(duì)應(yīng)的預(yù)測(cè)幀;對(duì)所述待編碼陣列中的其他宏塊進(jìn)行編號(hào),其中,所述其他宏塊的編號(hào)為相鄰的前一宏塊的編號(hào)加1,所述相鄰的前一宏塊為所述其他宏塊對(duì)應(yīng)的參考幀;將所述待編碼陣列中編號(hào)相同的宏塊劃分到一個(gè)宏塊組中;則所述編碼模塊,用于啟動(dòng)N個(gè)進(jìn)程并行對(duì)所述待編碼陣列中的宏塊進(jìn) 行編碼,具體為:所述編碼模塊,具體用于啟動(dòng)N個(gè)進(jìn)程并行對(duì)所述待編碼陣列中的宏塊進(jìn)行編碼,所述N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,各輪之間按照所述待編碼陣列中所述宏塊組中的宏塊對(duì)應(yīng)的編號(hào)由小到大執(zhí)行。如上所述,所述編碼模塊,具體包括:確定單元,用于針對(duì)第i個(gè)宏塊,當(dāng)所述第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型為幀內(nèi)預(yù)測(cè)編碼時(shí),則確定所述第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,根據(jù)確定的所述第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,從已經(jīng)編碼的宏塊中確定所述第i個(gè)宏塊的預(yù)測(cè)像素值,并確定所述第i個(gè)宏塊和所述預(yù)測(cè)像素值的殘差;其中,所述第i個(gè)宏塊為所述待編碼陣列中的宏塊中的任意一個(gè)宏塊;變換單元,用于對(duì)所述第i個(gè)宏塊和所述預(yù)測(cè)像素值的殘差進(jìn)行變換;確定單元,還用于確定所述第i個(gè)宏塊的量化步長(zhǎng);量化單元,用于根據(jù)所述第i個(gè)宏塊的量化步長(zhǎng)對(duì)變換后的數(shù)據(jù)進(jìn)行量化;熵編碼單元,用于對(duì)量化后的數(shù)據(jù)進(jìn)行熵編碼得到所述第i個(gè)宏塊的編碼數(shù)據(jù)。如上所述,所述待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)為預(yù)先設(shè)定的常數(shù),所述視頻編碼器還包括:第一確定模塊,用于在對(duì)所述第i個(gè)宏塊進(jìn)行熵編碼完成后,根據(jù)所述第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng),確定所述第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值;第一寫(xiě)入模塊,用于將所述第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值寫(xiě)入所述第i個(gè)宏塊的編碼數(shù)據(jù)中;并將所述第i個(gè)宏塊的編碼數(shù)據(jù)寫(xiě)入所述碼流緩沖區(qū)中。如上所述,所述視頻編碼器還包括:第二確定模塊,用于在所述待編碼陣列的所有宏塊都進(jìn)行熵編碼完成后,確定每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值;第二寫(xiě)入模塊,用于將每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值分別寫(xiě)入每個(gè)宏塊的編碼數(shù)據(jù)中;并將所述待編碼陣列的所有宏塊的編碼數(shù)據(jù)寫(xiě)入所述碼流緩存區(qū)中。本發(fā)明所提供的視頻編碼方法和視頻編碼器,通過(guò)將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊的分組方式,且通過(guò)同一宏塊組的宏塊并行進(jìn)行視頻編碼的方式,使得在對(duì)待編碼陣列中每個(gè)宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼時(shí),該宏塊左側(cè)的宏塊、左上方的宏塊、正上方的宏塊和右上方的宏塊(即該宏塊的參考幀)的視頻編碼均已完成,這樣不僅可以使用宏塊左側(cè)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,還可以使用該宏塊左上方的宏塊、正上方的宏塊和右上方的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,在實(shí)現(xiàn)了幀內(nèi)并行視頻編碼的基礎(chǔ)上,大大提高了為宏塊找到最佳預(yù)測(cè)像素值的概率,進(jìn)而降低了宏塊視頻編碼后的碼率,提高了視頻編碼的速度,從而降低了視頻編碼后的視頻圖像數(shù)據(jù)的碼率,提高了視頻編碼的速度。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明提供的視頻編碼方法實(shí)施例一的流程示意圖;圖2為本發(fā)明提供的視頻編碼方法實(shí)施例二的流程示意圖;圖3為本發(fā)明提供的視頻編碼方法實(shí)施例三的流程示意圖;圖4為本發(fā)明提供的視頻編碼方法實(shí)施例四的流程示意圖;圖5為本發(fā)明提供的視頻編碼方法實(shí)施例五的流程示意圖;圖6為本發(fā)明提供的視頻編碼器實(shí)施例一的結(jié)構(gòu)示意圖;圖7為本發(fā)明提供的視頻編碼器實(shí)施例二的結(jié)構(gòu)示意圖;圖8為本發(fā)明提供的視頻編碼器實(shí)施例三的結(jié)構(gòu)示意圖;圖9為本發(fā)明提供的視頻編碼器實(shí)施例四的結(jié)構(gòu)示意圖。具體實(shí)施方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于 本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。為了便于對(duì)本發(fā)明涉及的方法的理解,下面先對(duì)現(xiàn)有技術(shù)中的視頻編碼的具體過(guò)程進(jìn)行簡(jiǎn)單的介紹。幀內(nèi)視頻編碼是指以一幀圖像中的每個(gè)宏塊為基本單位,通過(guò)對(duì)每個(gè)宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼、殘差編碼、變換、量化、熵編碼等,將一幀圖像進(jìn)行壓縮,以減少該圖像的容量,提高視頻傳輸效率。目前,幀內(nèi)視頻編碼具體為片級(jí)并行編碼,該幀內(nèi)視頻編碼的方式是將一幀圖像在橫向上劃分成多個(gè)片,每個(gè)片包括多個(gè)宏塊,多個(gè)片之間并行進(jìn)行編碼。但是,由于上述多個(gè)片之間在進(jìn)行并行編碼的過(guò)程中,易導(dǎo)致無(wú)法為每個(gè)片內(nèi)的宏塊找到最佳預(yù)測(cè)像素值,使得宏塊的碼率偏高,進(jìn)而導(dǎo)致視頻編碼后的圖像的碼率偏高。本發(fā)明涉及的方法可以用于幀內(nèi)視頻編碼,旨在解決現(xiàn)有技術(shù)中視頻編碼后的圖像的碼率偏高的技術(shù)問(wèn)題。下面以具體地實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。下面這幾個(gè)具體的實(shí)施例可以相互結(jié)合,對(duì)于相同或相似的概念或過(guò)程可能在某些實(shí)施例不再贅述。圖1為本發(fā)明提供的視頻編碼方法實(shí)施例一的流程示意圖。本實(shí)施例一的執(zhí)行主體為視頻編碼器,本實(shí)施例一涉及的是視頻編碼器如何根據(jù)接收的待編碼視頻圖像數(shù)據(jù),對(duì)該待編碼視頻圖像數(shù)據(jù)進(jìn)行幀內(nèi)并行視頻編碼的具體過(guò)程。如圖1所示,該方法包括:S101:確定待編碼視頻圖像數(shù)據(jù)的待編碼陣列,其中,待編碼陣列包括m×n個(gè)宏塊,m和n均為大于1的整數(shù)。具體的,上述待編碼視頻圖像數(shù)據(jù)可以為任意一幀發(fā)送給視頻編碼器的待編碼的視頻圖像。在本實(shí)施例中,當(dāng)上述視頻編碼器在接收到該待編碼視頻圖像數(shù)據(jù)后,就可以根據(jù)現(xiàn)有視頻編碼規(guī)范中所規(guī)定的宏塊的大小,以宏塊為基本單位,確定該待編碼視頻圖像數(shù)據(jù)的待編碼陣列,其中,該待編碼陣列包括m×n個(gè)宏塊,其中,該m×n個(gè)宏塊的數(shù)量具體可以根據(jù)該待編碼視頻圖像數(shù)據(jù)的大小和宏塊的大小確定,即根據(jù)該幀圖像數(shù)據(jù)的長(zhǎng)和寬、以及宏塊的長(zhǎng)和寬確定。S102:對(duì)待編碼陣列中的宏塊進(jìn)行分組,其中,在分組過(guò)程中,將前一 個(gè)宏塊組的宏塊作為參考幀,確定前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀,將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊。具體的,根據(jù)現(xiàn)有的視頻編碼方法,為了降低視頻編碼后的視頻圖像數(shù)據(jù)的碼率,在對(duì)待編碼陣列中的每個(gè)宏塊執(zhí)行視頻編碼的幀內(nèi)預(yù)測(cè)編碼動(dòng)作時(shí),需要參考該宏塊相鄰的宏塊的編碼后的重建數(shù)據(jù),以去除所編碼的宏塊中的冗余信息,進(jìn)而達(dá)到降低宏塊的碼流的目的。其中,上述在為該宏塊執(zhí)行幀內(nèi)預(yù)測(cè)編碼時(shí)所需要參考的宏塊即為該宏塊的參考幀,該宏塊的參考幀具有可以為該宏塊相鄰的左側(cè)宏塊、該宏塊相鄰的左上方的宏塊、該宏塊相鄰的正上方的宏塊、該宏塊相鄰的右上方的宏塊,則對(duì)應(yīng)的,該宏塊即為該宏塊參考幀的預(yù)測(cè)幀,即該宏塊為該宏塊相鄰的左側(cè)宏塊、該宏塊相鄰的左上方的宏塊、該宏塊相鄰的正上方的宏塊、該宏塊相鄰的右上方的宏塊的預(yù)測(cè)幀。在本實(shí)施例中,通過(guò)上述對(duì)待編碼陣列中的宏塊進(jìn)行分組的方式,可以將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊,從而使得在對(duì)當(dāng)前宏塊組的宏塊進(jìn)行視頻編碼時(shí),該當(dāng)前宏塊組的每個(gè)宏塊的參考幀均已完成視頻編碼,從而使得在對(duì)當(dāng)前宏塊組的每個(gè)宏塊進(jìn)行視頻編碼時(shí),可以使用該宏塊的所有參考幀對(duì)其進(jìn)行幀內(nèi)預(yù)測(cè)編碼,從而可以為該宏塊找到最佳預(yù)測(cè)像素值,進(jìn)而可以通過(guò)該最佳預(yù)測(cè)像素值去除該宏塊的冗余信息,進(jìn)而達(dá)到降低宏塊的碼流的目的。S103:?jiǎn)?dòng)N個(gè)進(jìn)程并行對(duì)待編碼陣列中的宏塊進(jìn)行編碼,其中,N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,每一輪編碼過(guò)程中每個(gè)進(jìn)程對(duì)宏塊組中的至少一個(gè)宏塊進(jìn)行編碼。具體的,上述進(jìn)程為視頻編碼器中用于對(duì)宏塊進(jìn)行編碼的進(jìn)程,當(dāng)上述視頻編碼器對(duì)待編碼陣列中的宏塊進(jìn)行分組之后,就可以按照每個(gè)宏塊組的宏塊對(duì)應(yīng)的預(yù)測(cè)幀,向后追溯至最后一組宏塊,并按照這個(gè)順序,每一輪啟動(dòng)N個(gè)進(jìn)程對(duì)一個(gè)宏塊組并行進(jìn)行編碼,從而可以確保進(jìn)程在對(duì)每一個(gè)宏塊組進(jìn)行編碼時(shí),該宏塊組的每個(gè)宏塊對(duì)應(yīng)的參考幀均已完成視頻編碼。以此類(lèi)推,直至最后一輪完成最紅一個(gè)宏塊組的視頻編碼,至此就完成了該待編碼陣列中的所有宏塊的編碼。需要說(shuō)明的是,上述每一輪視頻編碼器所使用的N個(gè)進(jìn)程的個(gè)數(shù)可以相 同,也可以不同,該N的大小具體可以根據(jù)每個(gè)宏塊組的宏塊的個(gè)數(shù)、以及視頻編碼器所支持的同時(shí)用于編碼的進(jìn)程的最大個(gè)數(shù)確定。若某一組宏塊的個(gè)數(shù)大于視頻編碼器所支持的同時(shí)用于編碼的進(jìn)程的最大個(gè)數(shù)時(shí),則視頻編碼器在對(duì)該宏塊組中的宏塊進(jìn)行并行編碼時(shí),其中一個(gè)或多個(gè)進(jìn)程可以用于對(duì)宏塊組中的多個(gè)宏塊進(jìn)行視頻編碼。現(xiàn)有技術(shù)中,幀內(nèi)并行視頻編碼為片級(jí)并行編碼,該視頻編碼的方式是將一幀圖像在橫向上劃分成多個(gè)片,多個(gè)片之間并行進(jìn)行編碼,即啟動(dòng)多個(gè)進(jìn)程同時(shí)分別對(duì)每個(gè)片內(nèi)的宏塊執(zhí)行幀內(nèi)預(yù)測(cè)編碼、殘差編碼、變換、量化、熵編碼等多個(gè)步驟。然而,由于上述多個(gè)進(jìn)程同時(shí)對(duì)每個(gè)片內(nèi)的宏塊進(jìn)行編碼,所以上述進(jìn)程在對(duì)每個(gè)片內(nèi)的宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼時(shí),無(wú)法跨越劃分后的片為宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼,也就是說(shuō),進(jìn)程無(wú)法獲知該宏塊上方片內(nèi)的宏塊的編碼重建結(jié)果,所以進(jìn)程無(wú)法使用該宏塊上方片內(nèi)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,也就是說(shuō),只能將該宏塊相鄰的左側(cè)宏塊作為該宏塊的參考幀,不能將該宏塊相鄰的正上方的宏塊、該宏塊相鄰的右上方的宏塊作為該宏塊的參考幀,使得進(jìn)程只能使用該宏塊左側(cè)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,從而使得進(jìn)程可能無(wú)法為宏塊找到最佳預(yù)測(cè)像素值,導(dǎo)致宏塊在編碼后的碼率偏高,進(jìn)而導(dǎo)致視頻編碼后的圖像的碼率偏高。而本實(shí)施例所提供的視頻編碼方法,通過(guò)將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊的分組方式,使得進(jìn)程在對(duì)每個(gè)宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼時(shí),該宏塊的所有參考幀均已完成視頻編碼,即該宏塊相鄰的左側(cè)的宏塊、左上方的宏塊、正上方的宏塊和右上方的宏塊的視頻編碼均已完成,這樣進(jìn)程不僅可以使用宏塊左側(cè)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,還可以使用該宏塊左上方的宏塊、正上方的宏塊和右上方的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,使得在實(shí)現(xiàn)了幀內(nèi)并行視頻編碼的基礎(chǔ)上,大大提高了為宏塊找到最佳預(yù)測(cè)像素值的概率,進(jìn)而降低了宏塊編碼后的碼率,提高了編碼的速度,從而降低了視頻編碼后的圖像的碼率,提高了視頻編碼的速度。本發(fā)明所提供的視頻編碼方法,通過(guò)將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊的分組方式,且通過(guò)同一宏塊組的宏塊并行進(jìn)行視頻編碼的方式,使得在對(duì)待編碼陣列中每個(gè)宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼時(shí),該 宏塊左側(cè)的宏塊、左上方的宏塊、正上方的宏塊和右上方的宏塊(即該宏塊的參考幀)的視頻編碼均已完成,這樣不僅可以使用宏塊左側(cè)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,還可以使用該宏塊左上方的宏塊、正上方的宏塊和右上方的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,在實(shí)現(xiàn)了幀內(nèi)并行視頻編碼的基礎(chǔ)上,大大提高了為宏塊找到最佳預(yù)測(cè)像素值的概率,進(jìn)而降低了宏塊視頻編碼后的碼率,提高了視頻編碼的速度,從而降低了視頻編碼后的視頻圖像數(shù)據(jù)的碼率,提高了視頻編碼的速度。圖2為本發(fā)明提供的視頻編碼方法實(shí)施例二的流程示意圖,本實(shí)施例二的執(zhí)行主體為視頻編碼器,本實(shí)施例二涉及的是視頻編碼器如何對(duì)待編碼陣列中的宏塊進(jìn)行分組的具體過(guò)程。如圖2所示,該方法包括:S201:確定待編碼視頻圖像數(shù)據(jù)的待編碼陣列。其中,S201的具體執(zhí)行過(guò)程可以參見(jiàn)上述S101的描述,在此不再贅述。S202:將待編碼陣列中的第一列宏塊作為參考幀,并將第一列宏塊的編號(hào)設(shè)置為從小到大的連續(xù)奇數(shù)或連續(xù)偶數(shù);將第一列宏塊的編號(hào)加1作為相鄰的后一宏塊的編號(hào),其中,相鄰的后一宏塊為第一列宏塊對(duì)應(yīng)的預(yù)測(cè)幀;對(duì)待編碼陣列中的其他宏塊進(jìn)行編號(hào),其中,其他宏塊的編號(hào)為相鄰的前一宏塊的編號(hào)加1,相鄰的前一宏塊為所述其他宏塊對(duì)應(yīng)的參考幀;將待編碼陣列中編號(hào)相同的宏塊劃分到一個(gè)宏塊組中。具體的,以上述待編碼陣列中第一列宏塊的編號(hào)為連續(xù)的奇數(shù)為例,上述待編碼陣列中第一列宏塊的編號(hào)可以為從1到2m-1的連續(xù)奇數(shù),也可以為從3到2m+1的連續(xù)奇數(shù),還可以為其他任意連續(xù)的奇數(shù)段,本實(shí)施例對(duì)此不進(jìn)行贅述。在本實(shí)施例中,上述待編碼陣列中除第一列宏塊之外的其他宏塊的編號(hào)均為相鄰的前一宏塊的編號(hào)加1,其中,這里所說(shuō)的每個(gè)宏塊的相鄰的前一宏塊為即為該宏塊相鄰的左側(cè)宏塊,通過(guò)這種方式,可以使得待編碼陣列中的每個(gè)宏塊組中的宏塊的編號(hào)相同,且使得每個(gè)宏塊組中的宏塊的參考幀所在的宏塊組的編號(hào)均小于該宏塊組中的宏塊對(duì)應(yīng)的編號(hào),這樣,在對(duì)該待編碼陣列中的宏塊進(jìn)行分組時(shí),可以?xún)H根據(jù)每個(gè)宏塊對(duì)應(yīng)的編號(hào),將相同編號(hào)的宏塊劃分到一個(gè)宏塊組即可,降低了劃分待編碼陣列的分組的工作量,提高了分組效率。示例性的,以上述待編碼陣列中第一列宏塊的編號(hào)為從1到2m-1的連續(xù)奇數(shù)為例,則上述待編碼陣列中的每個(gè)宏塊的編號(hào)方式可以如表1所示:表11234567891011…345678910111213…56789101112131415…7891011121314151617…910111213141516171819…1112131415161718192021…………………………………可選的,在本實(shí)施例的另一種實(shí)現(xiàn)方式中,上述待編碼陣列中第一列宏塊的編號(hào)還可以為連續(xù)的偶數(shù),具體實(shí)現(xiàn)時(shí),上述待編碼陣列中第一列宏塊的編號(hào)可以為從0到2m-2的連續(xù)偶數(shù),也可以為從2到2m的連續(xù)偶數(shù),還可以為其他任意連續(xù)的偶數(shù)段,本實(shí)施例對(duì)此不進(jìn)行贅述。S203:?jiǎn)?dòng)N個(gè)進(jìn)程并行對(duì)待編碼陣列中的宏塊進(jìn)行編碼,其中,N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,各輪之間按照待編碼陣列中宏塊組中的宏塊對(duì)應(yīng)的編號(hào)由小到大執(zhí)行。具體的,當(dāng)上述視頻編碼器將相同編號(hào)的宏塊劃分到同一個(gè)宏塊組之后,就可以按照每一個(gè)宏塊組的宏塊所對(duì)應(yīng)的編號(hào)的大小,以編號(hào)從小到大的順序?qū)Ω鱾€(gè)宏塊組進(jìn)行排序,并按照該順序,每一輪啟動(dòng)N個(gè)進(jìn)程對(duì)每一個(gè)宏塊組的宏塊并行進(jìn)行編碼,即相同編號(hào)的宏塊同時(shí)進(jìn)行編碼,也就是說(shuō),第一輪對(duì)所有編號(hào)為1的宏塊進(jìn)行編碼,第二輪對(duì)所有編號(hào)為2的宏塊進(jìn)行編碼,第三輪對(duì)所有編碼為3的宏塊進(jìn)行編碼,第四輪對(duì)所有編號(hào)為4的宏塊進(jìn)行編碼,以此類(lèi)推,直至最后一輪對(duì)所有最后一個(gè)編號(hào)(即待編碼陣列中的宏塊對(duì)應(yīng)的最大編號(hào))的宏塊進(jìn)行編碼,至此就完成了該待編碼陣列中的所有宏塊的編碼。本發(fā)明所提供的視頻編碼方法,通過(guò)上述對(duì)待編碼陣列中各宏塊進(jìn)行編號(hào)的方式,可以使得同一個(gè)宏塊組中的宏塊對(duì)應(yīng)的編號(hào)相同,進(jìn)而使得在對(duì)該待編碼陣列中的宏塊進(jìn)行分組時(shí),可以?xún)H根據(jù)每個(gè)宏塊對(duì)應(yīng)的編號(hào),將相同編號(hào)的宏塊劃分到一個(gè)宏塊組即可,在降低了視頻編碼后的視頻圖像數(shù)據(jù) 的碼率的基礎(chǔ)上,降低了劃分待編碼陣列的分組的工作量,提高了分組效率,從而提高了視頻編碼的速度。圖3為本發(fā)明提供的視頻編碼方法實(shí)施例三的流程示意圖。本實(shí)施例三的執(zhí)行主體為視頻編碼器,本實(shí)施例三以待編碼陣列中的宏塊中的任意一個(gè)宏塊,即第i個(gè)宏塊為例,重點(diǎn)介紹視頻編碼器如何對(duì)待編碼陣列中的第i個(gè)宏塊進(jìn)行編碼的具體過(guò)程。為了便于對(duì)本實(shí)施例的理解,本實(shí)施例將以下述示例對(duì)本實(shí)施例的每個(gè)步驟進(jìn)行詳細(xì)解釋和說(shuō)明,在該示例中,視頻編碼器將待編碼視頻圖像數(shù)據(jù)劃分成由5×3個(gè)宏塊組成的待編碼陣列,其中,該待編碼陣列中的每個(gè)宏塊的編號(hào)具體如下述表2所示,視頻編碼器中存儲(chǔ)的每一個(gè)宏塊組的宏塊具體可以如表3所示:表2123453456756789表3以上述表2中所示的第五組的其中一個(gè)宏塊為第i個(gè)宏塊為例,其中,第五組的宏塊為第四組的宏塊對(duì)應(yīng)的預(yù)測(cè)幀,第四組的宏塊為第五組的宏塊的參考幀。具體實(shí)施本方法之前,需要先做如下準(zhǔn)備,具體地,由于第五組包括的宏塊的個(gè)數(shù)多于第四組包括的宏塊的個(gè)數(shù),因此,在主進(jìn)程和第一子進(jìn)程(即用于與主進(jìn)程并行對(duì)第四組的宏塊進(jìn)行編碼的進(jìn)程)對(duì)第四組的宏塊進(jìn)行編碼完成后,主進(jìn)程可以喚醒第二子進(jìn)程,以共同對(duì)第五組的宏塊進(jìn)行編碼。其中,主進(jìn)程喚醒第二子進(jìn)程的具體實(shí)現(xiàn)方式可以參見(jiàn)現(xiàn)有技術(shù)。上述用于執(zhí)行第五組的宏塊的編碼的進(jìn)程數(shù)量與第五組的宏塊的數(shù)量相同,即主進(jìn)程、第一子進(jìn)程和第二子進(jìn)程可以分別執(zhí)行一個(gè)宏塊的編碼。例如,可以采用主進(jìn)程對(duì)第一排的第五個(gè)宏塊(編號(hào)為5)進(jìn)行編碼,第一子進(jìn)程對(duì)第二排的第三個(gè)宏塊(編號(hào)為5)進(jìn)行編碼,第二子進(jìn)程對(duì)第三排的第一個(gè)宏塊(編號(hào)為5)進(jìn)行編碼的方式;或者,采用主進(jìn)程對(duì)第三排的第一個(gè)宏塊(編號(hào)為5)進(jìn)行編碼,第一子進(jìn)程對(duì)第一排的第五個(gè)宏塊(編號(hào)為5)進(jìn)行編碼,第二子進(jìn)程對(duì)第二排的第三個(gè)宏塊(編號(hào)為5)進(jìn)行編碼的方式等。具體實(shí)施時(shí),視頻編碼器可以預(yù)先分別為主進(jìn)程、第一子進(jìn)程和第二子進(jìn)程分配其所需要為哪組哪個(gè)宏塊執(zhí)行編碼。本實(shí)施例中,以第i個(gè)宏塊為上述表2中的第二排的第三個(gè)宏塊(編號(hào)為5)為例,其中,第一子進(jìn)程用于對(duì)第二排的第三個(gè)宏塊(編號(hào)為5)進(jìn)行編碼,如圖3所示,上述方法可以包括如下步驟:S301:確定第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型是否為幀內(nèi)預(yù)測(cè)編碼,若是,則執(zhí)行S302,若否,則結(jié)束流程。具體的,上述第一子進(jìn)程在對(duì)第二排的第三個(gè)宏塊(編號(hào)為5)進(jìn)行編碼時(shí),首先需要先確定第二排的第三個(gè)宏塊(編號(hào)為5)的預(yù)測(cè)編碼的類(lèi)型,即該第二排的第三個(gè)宏塊(編號(hào)為5)的預(yù)測(cè)編碼的類(lèi)型為幀間預(yù)測(cè)編碼還是為幀內(nèi)預(yù)測(cè)編碼。若為幀內(nèi)預(yù)測(cè)編碼,則執(zhí)行S302,若為幀間預(yù)測(cè)編碼,則結(jié)束流程。其中,上述確定第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型是否為幀內(nèi)預(yù)測(cè)編碼,也可以使用現(xiàn)有技術(shù)中的確定方式,本實(shí)施對(duì)此不再贅述。S302:根據(jù)第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型,確定第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式。其中,上述如何根據(jù)第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型,確定第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,可以參見(jiàn)現(xiàn)有技術(shù),本實(shí)施對(duì)此不再贅述。S303:根據(jù)確定的第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,從已經(jīng)編碼的宏塊中確定第i個(gè)宏塊的預(yù)測(cè)像素值。具體的,繼續(xù)參照上述表2和表3所示的示例,上述第一子進(jìn)程可以根據(jù)上述確定的幀內(nèi)預(yù)測(cè)編碼模式,通過(guò)該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)左側(cè)的宏塊(第二排的第二個(gè)宏塊,編號(hào)為4)、左上方的宏塊(第一排第二個(gè)宏塊,編碼為2)、正上方的宏塊(第一排的第三個(gè)宏塊,編號(hào)為3)以及右上方的宏塊(第一排的第四個(gè)宏塊,編號(hào)為4),即該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)的參考幀對(duì)該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)進(jìn)行幀內(nèi)預(yù)測(cè)編碼,以獲取該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)的預(yù)測(cè)像素值,即與該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)的像素值最接近的像素值,其中,該預(yù)測(cè)像素值具體可以為一16乘16的像素值矩陣。與現(xiàn)有技術(shù)中的幀內(nèi)預(yù)測(cè)方法相比,在該種情況下,由于無(wú)法跨越劃分后的片內(nèi)的宏塊的編碼重建結(jié)果為該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)進(jìn)行幀內(nèi)預(yù)測(cè)編碼,即,不能使用該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)左上方的宏塊(第一排第二個(gè)宏塊,編碼為2)、正上方的宏塊(第一排的第三個(gè)宏塊,編號(hào)為3)以及右上方的宏塊(第一排的第四個(gè)宏塊,編號(hào)為4)對(duì)該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)作為該宏塊的參考幀進(jìn)行幀內(nèi)預(yù)測(cè)編碼相比,本實(shí)施例提供的視頻編碼方法,大大提高了進(jìn)程為宏塊找到最佳預(yù)測(cè)像素值的概率,降低了宏塊視頻編碼后的碼率,提高了視頻編碼的速度,從而降低了視頻編碼后的視頻圖像數(shù)據(jù)的碼率,提高了視頻編碼的速度。需要說(shuō)明的是,上述根據(jù)確定的第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,從已經(jīng)編碼的宏塊中確定第i個(gè)宏塊的預(yù)測(cè)像素值,也可以使用現(xiàn)有技術(shù)中的確定宏塊的預(yù)測(cè)像素值的方式,本實(shí)施例對(duì)此不再贅述。S304:確定第i個(gè)宏塊和預(yù)測(cè)像素值的殘差。具體的,該步驟具體用于去除所編碼的宏塊中的冗余信息,繼續(xù)參照上述表2和表3所示的示例,當(dāng)上述第一子進(jìn)程為第二排的第三個(gè)宏塊(編號(hào)為5)確定預(yù)測(cè)像素值之后,第一子進(jìn)程就可以將該宏塊(第二排的第三個(gè) 宏塊,編號(hào)為5)與預(yù)測(cè)像素值中相同位置的像素值相減,將像素值中相同的部分去除,以獲取該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)與預(yù)測(cè)像素值的殘差,該殘差的具體表現(xiàn)形式可以為一16乘16的矩陣陣列(簡(jiǎn)稱(chēng)為殘差矩陣),其中,該殘差矩陣中部分位置的像素值為0(即說(shuō)明宏塊與預(yù)測(cè)像素值在該位置的像素值相同)。需要說(shuō)明的是,上述確定第i個(gè)宏塊和預(yù)測(cè)像素值的殘差,也可以使用現(xiàn)有技術(shù)中的確定宏塊和預(yù)測(cè)像素值的殘差的方式,本實(shí)施例對(duì)此不再贅述。S305:對(duì)第i個(gè)宏塊和預(yù)測(cè)像素值的殘差進(jìn)行變換。具體的,該步驟具體用于進(jìn)一步去除所編碼的宏塊中的冗余信息,繼續(xù)參照上述表2和表3所示的示例,當(dāng)上述第一子進(jìn)程確定第二排的第三個(gè)宏塊(編號(hào)為5)和預(yù)測(cè)像素值的殘差矩陣之后,就可以對(duì)該殘差矩陣進(jìn)行變換,該變換具體可以為離散余弦變換,殘差矩陣進(jìn)行變換后為一16乘16的系數(shù)矩陣(簡(jiǎn)稱(chēng)系數(shù)矩陣),相比于殘差矩陣,該系數(shù)矩陣中的像素值為0的個(gè)數(shù)進(jìn)一步增多。其中,上述對(duì)第i個(gè)宏塊和預(yù)測(cè)像素值的殘差進(jìn)行變換,也可以使用現(xiàn)有技術(shù)中的對(duì)宏塊和預(yù)測(cè)像素值的殘差進(jìn)行變換的方式,本實(shí)施例對(duì)此不再贅述。S306:確定第i個(gè)宏塊的量化步長(zhǎng),根據(jù)第i個(gè)宏塊的量化步長(zhǎng)對(duì)變換后的數(shù)據(jù)進(jìn)行量化。具體的,該步驟具體用于進(jìn)一步去除所編碼的宏塊中的冗余信息,即去除系數(shù)矩陣中的較小值,以及減少系數(shù)矩陣中的其他像素值的大小,達(dá)到減少編碼的比特?cái)?shù),壓縮碼流的效果。繼續(xù)參照上述表2和表3所示的示例,當(dāng)上述第一子進(jìn)程確定第二排的第三個(gè)宏塊(編號(hào)為5)和預(yù)測(cè)像素值的殘差進(jìn)行變換之后,就可以根據(jù)變換矩陣中的各像素值確定該宏塊(第二排的第三個(gè)宏塊,編號(hào)為5)的量化步長(zhǎng),并根據(jù)確定的量化步長(zhǎng),對(duì)系數(shù)矩陣進(jìn)行量化,即將系數(shù)矩陣中的每個(gè)像素值均除以該量化步長(zhǎng),得到量化后的矩陣(簡(jiǎn)稱(chēng)量化矩陣)。其中,上述確定第i個(gè)宏塊的量化步長(zhǎng),以及根據(jù)第i個(gè)宏塊的量化步長(zhǎng)對(duì)變換后的數(shù)據(jù)進(jìn)行量化,也可以使用現(xiàn)有技術(shù)中的確定第i個(gè)宏塊的量化步長(zhǎng),以及根據(jù)第i個(gè)宏塊的量化步長(zhǎng)對(duì)變換后的數(shù)據(jù)進(jìn)行量化的方式,本實(shí)施例對(duì)此不再贅述。S307:對(duì)量化后的數(shù)據(jù)進(jìn)行熵編碼得到第i個(gè)宏塊的編碼數(shù)據(jù)。具體的,該步驟具體用于進(jìn)一步去除所編碼的宏塊中的冗余信息,達(dá)到減少編碼的比特?cái)?shù),壓縮碼流的效果,其中,上述對(duì)量化后的數(shù)據(jù)進(jìn)行熵編碼得到第i個(gè)宏塊的編碼數(shù)據(jù),具體可以參見(jiàn)現(xiàn)有技術(shù)。執(zhí)行完S307之后,則結(jié)束,至此就完成了該第i個(gè)宏塊的編碼。本發(fā)明所提供的視頻編碼方法,通過(guò)將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊的分組方式,且通過(guò)同一宏塊組的宏塊并行進(jìn)行視頻編碼的方式,使得在對(duì)待編碼陣列中每個(gè)宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼時(shí),該宏塊左側(cè)的宏塊、左上方的宏塊、正上方的宏塊和右上方的宏塊(即該宏塊的參考幀)的視頻編碼均已完成,這樣不僅可以使用宏塊左側(cè)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,還可以使用該宏塊左上方的宏塊、正上方的宏塊和右上方的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,在實(shí)現(xiàn)了幀內(nèi)并行視頻編碼的基礎(chǔ)上,大大提高了為宏塊找到最佳預(yù)測(cè)像素值的概率,進(jìn)而降低了宏塊視頻編碼后的碼率,提高了視頻編碼的速度,從而降低了視頻編碼后的視頻圖像數(shù)據(jù)的碼率,提高了視頻編碼的速度。進(jìn)一步地,在上述實(shí)施例的基礎(chǔ)上,本實(shí)施例涉及的是視頻編碼器如何將宏塊的量化步長(zhǎng)的差值寫(xiě)入宏塊的編碼數(shù)據(jù)中的具體過(guò)程?,F(xiàn)有技術(shù)中,為了進(jìn)一步去除所編碼的宏塊中的冗余信息,因此,視頻編碼器在每個(gè)宏塊的編碼數(shù)據(jù)中,并不會(huì)寫(xiě)入每個(gè)宏塊的量化步長(zhǎng),而是將每個(gè)宏塊與上一宏塊的量化步長(zhǎng)之間的差值寫(xiě)入編碼數(shù)據(jù)中。繼續(xù)參照上述表2和表3所述的示例,以第三排的第一個(gè)宏塊(編號(hào)為5)為例,其中,第二子進(jìn)程用于對(duì)第三排的第一個(gè)宏塊(編號(hào)為5)進(jìn)行編碼,該宏塊(第三排的第一個(gè)宏塊,編號(hào)為5)的前一個(gè)宏塊為第二排的第五個(gè)宏塊(編號(hào)為7),但是根據(jù)本實(shí)施例所提供的編碼方法,第二子進(jìn)程在對(duì)第三排的第一個(gè)宏塊(編號(hào)為5)進(jìn)行編碼時(shí),還沒(méi)有進(jìn)程對(duì)第二排的第五個(gè)宏塊(編號(hào)為7)進(jìn)行編碼,也就是說(shuō),還沒(méi)有第二排的第五個(gè)宏塊(編號(hào)為7)的量化步長(zhǎng)的信息,因此,第二子進(jìn)程就無(wú)法將該宏塊(第三排的第一個(gè)宏塊,編號(hào)為5)與該宏塊的前一個(gè)宏塊(第二排的第五個(gè)宏塊,編號(hào)為7)的量化步長(zhǎng)的差值寫(xiě)入該宏塊的編碼數(shù)據(jù)中,為了確保對(duì)該宏塊的編碼順利進(jìn)行,有如下兩種解決方式:第一種:將待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)預(yù)先設(shè)定為一常數(shù),該預(yù)先設(shè)定的常數(shù)具體可以根據(jù)用戶(hù)需求確定。圖4為本發(fā)明提 供的視頻編碼方法實(shí)施例四的流程示意圖,如圖4所示,在上述S307之后,該方法還可以包括如下步驟:S401:在對(duì)第i個(gè)宏塊進(jìn)行熵編碼完成后,根據(jù)第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng),確定第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值。S402:將第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值寫(xiě)入第i個(gè)宏塊的編碼數(shù)據(jù)中。S403:將第i個(gè)宏塊的編碼數(shù)據(jù)寫(xiě)入碼流緩沖區(qū)中。具體的,在本實(shí)施例中,第i個(gè)宏塊即為第三排的第一個(gè)宏塊(編號(hào)為5)。繼續(xù)參照上述示例,上述第二排的第五個(gè)宏塊(編號(hào)為7)為第二排的最后一個(gè)宏塊,則對(duì)該第二排的第五個(gè)宏塊(編號(hào)為7)進(jìn)行編碼時(shí),會(huì)對(duì)該第二排的第五個(gè)宏塊(編號(hào)為7)使用預(yù)先設(shè)定的量化步長(zhǎng),這樣,當(dāng)?shù)诙舆M(jìn)程對(duì)第三排的第一個(gè)宏塊(編號(hào)為5)進(jìn)行編碼時(shí),即便還沒(méi)有進(jìn)程對(duì)第二排的第五個(gè)宏塊(編號(hào)為7)進(jìn)行編碼,但是由于視頻編碼器會(huì)對(duì)該第二排的第五個(gè)宏塊(編號(hào)為7)使用預(yù)先設(shè)定的量化步長(zhǎng),所以第二子進(jìn)程就可以根據(jù)為該第二排的第五個(gè)宏塊(編號(hào)為7)預(yù)先設(shè)定的量化步長(zhǎng),確定該宏塊(第三排的第一個(gè)宏塊,編號(hào)為5)與該宏塊的前一個(gè)宏塊(第二排的第五個(gè)宏塊,編號(hào)為7)的量化步長(zhǎng)的差值,并可以將確定量化步長(zhǎng)的差值再寫(xiě)入該宏塊(第三排的第一個(gè)宏塊,編號(hào)為5)的編碼數(shù)據(jù)中。這樣,第二子進(jìn)程就完成了該宏塊(第三排的第一個(gè)宏塊,編號(hào)為5)的編碼,從而就可以將該宏塊(第三排的第一個(gè)宏塊,編號(hào)為5)的編碼數(shù)據(jù)寫(xiě)入碼流緩存區(qū)中,以使得視頻編碼器在完成該宏塊所在的待編碼陣列中所有的宏塊的編碼之后,就可以發(fā)送該編碼數(shù)據(jù)。第二種:待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)為,視頻編碼器為該宏塊進(jìn)行編碼時(shí)所確定的量化步長(zhǎng)。圖5為本發(fā)明提供的視頻編碼方法實(shí)施例五的流程示意圖,如圖5所示,在本實(shí)施例中,上述視頻編碼器在對(duì)每個(gè)宏塊進(jìn)行編碼時(shí),均不對(duì)宏塊的量化步長(zhǎng)進(jìn)行熵編碼,而是在視頻編碼器對(duì)待編碼陣列的所有宏塊的其他部分(即除宏塊的量化步長(zhǎng)的所有部分)都進(jìn)行熵編碼完成后,也就是視頻編碼器對(duì)待編碼陣列的每個(gè)宏塊的其他部分都執(zhí)行完上述S307之后,即,在對(duì)所有宏塊編碼完成后,在將所有宏塊的熵編碼碼流拼接時(shí)再寫(xiě)入量化步長(zhǎng)信息(即每個(gè)宏塊與其相鄰的前一宏 塊的量化步長(zhǎng)的差值),該方法具體可以包括如下步驟:S501:確定每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值。S502:將每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值分別寫(xiě)入每個(gè)宏塊的編碼數(shù)據(jù)。S503:將待編碼陣列的所有宏塊的編碼數(shù)據(jù)寫(xiě)入碼流緩存區(qū)中。具體的,與上一實(shí)施例不同的是,本實(shí)施例并不預(yù)先設(shè)定待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng),而是在對(duì)待編碼陣列中每行宏塊的最后一個(gè)宏塊進(jìn)行編碼時(shí),才確定其量化步長(zhǎng),因此,本實(shí)施例中,視頻編碼器在對(duì)待編碼陣列中的每個(gè)宏塊進(jìn)行編碼時(shí),在每個(gè)宏塊的編碼數(shù)據(jù)中并不寫(xiě)入該宏塊與其前一個(gè)宏塊之間的量化步長(zhǎng)的差值,也不將每個(gè)宏塊的編碼數(shù)據(jù)寫(xiě)入最終的碼流緩沖區(qū),而是在視頻編碼器完成該待編碼陣列中的所有宏塊的編碼之后,即在視頻編碼器完成該待編碼陣列中的所有宏塊的其他部分都完成熵編碼之后,也就是說(shuō),所有宏塊的量化步長(zhǎng)均已知的情況下,包括待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)均已知的情況下,再確定每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值,并將確定的每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值再寫(xiě)入該宏塊的編碼數(shù)據(jù)中。這樣,視頻編碼器在將待編碼陣列中的每個(gè)宏塊的量化步長(zhǎng)的差值都寫(xiě)入到該宏塊對(duì)應(yīng)的編碼數(shù)據(jù)之后,就可以將該待編碼陣列中的所有宏塊的編碼數(shù)據(jù)寫(xiě)入碼流緩存區(qū)中,以使得視頻編碼器可以發(fā)送該編碼數(shù)據(jù),至此就完成了待編碼數(shù)據(jù)的編碼。本發(fā)明所提供的視頻編碼方法,通過(guò)將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊的分組方式,且通過(guò)同一宏塊組的宏塊并行進(jìn)行視頻編碼的方式,使得在對(duì)待編碼陣列中每個(gè)宏塊進(jìn)行幀內(nèi)預(yù)測(cè)編碼時(shí),該宏塊左側(cè)的宏塊、左上方的宏塊、正上方的宏塊和右上方的宏塊(即該宏塊的參考幀)的視頻編碼均已完成,這樣不僅可以使用宏塊左側(cè)的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,還可以使用該宏塊左上方的宏塊、正上方的宏塊和右上方的宏塊的編碼重建結(jié)果進(jìn)行幀內(nèi)預(yù)測(cè)編碼,在實(shí)現(xiàn)了幀內(nèi)并行視頻編碼的基礎(chǔ)上,大大提高了為宏塊找到最佳預(yù)測(cè)像素值的概率,進(jìn)而降低了宏塊視頻編碼后的碼率,提高了視頻編碼的速度,從而降低了視頻編碼后的視頻圖像數(shù)據(jù)的碼率,提高了視頻編碼的速度。本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。圖6為本發(fā)明提供的視頻編碼器實(shí)施例一的結(jié)構(gòu)示意圖,如圖6所示,本實(shí)施例提供的視頻編碼器可以包括:確定模塊11、分組模塊12和編碼模塊13,其中,確定模塊11,用于確定待編碼視頻圖像數(shù)據(jù)的待編碼陣列,其中,待編碼陣列包括m×n個(gè)宏塊,m和n均為大于1的正整數(shù);分組模塊12,用于對(duì)待編碼陣列中的宏塊進(jìn)行分組,其中,在分組過(guò)程中,將前一個(gè)宏塊組的宏塊作為參考幀,確定前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀,將前一個(gè)宏塊組的參考幀對(duì)應(yīng)的預(yù)測(cè)幀作為當(dāng)前宏塊組的宏塊;編碼模塊13,用于啟動(dòng)N個(gè)進(jìn)程并行對(duì)待編碼陣列中的宏塊進(jìn)行編碼,其中,N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,每一輪編碼過(guò)程中每個(gè)進(jìn)程對(duì)宏塊組中的至少一個(gè)宏塊進(jìn)行編碼。本實(shí)施例提供的視頻編碼器,可以用于執(zhí)行圖1所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。進(jìn)一步地,在上述實(shí)施例的基礎(chǔ)上,上述分組模塊12,用于對(duì)待編碼陣列中的宏塊進(jìn)行分組,具體為:上述分組模塊12,具體用于將待編碼陣列中的第一列宏塊作為參考幀,并將第一列宏塊的編號(hào)設(shè)置為從小到大的連續(xù)奇數(shù)或連續(xù)偶數(shù);將第一列宏塊的編號(hào)加1作為相鄰的后一宏塊的編號(hào),其中,相鄰的后一宏塊為第一列宏塊對(duì)應(yīng)的預(yù)測(cè)幀;對(duì)待編碼陣列中的其他宏塊進(jìn)行編號(hào),其中,其他宏塊的編號(hào)為相鄰的前一宏塊的編號(hào)加1,相鄰的前一宏塊為其他宏塊對(duì)應(yīng)的參考幀;將待編碼陣列中編號(hào)相同的宏塊劃分到一個(gè)宏塊組中;則上述編碼模塊13,用于啟動(dòng)N個(gè)進(jìn)程并行對(duì)待編碼陣列中的宏塊進(jìn)行編碼,具體為:上述編碼模塊13,具體用于啟動(dòng)N個(gè)進(jìn)程并行對(duì)待編碼陣列中的宏塊進(jìn)行編碼,N個(gè)進(jìn)程每一輪并行對(duì)一個(gè)宏塊組進(jìn)行編碼,各輪之間按照待編碼 陣列中宏塊組中的宏塊對(duì)應(yīng)的編號(hào)由小到大執(zhí)行。本實(shí)施例提供的視頻編碼器,可以用于執(zhí)行圖2所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。進(jìn)一步地,在上述實(shí)施例的基礎(chǔ)上,圖7為本發(fā)明提供的視頻編碼器實(shí)施例二的結(jié)構(gòu)示意圖,如圖7所示,上述編碼模塊13,具體可以包括確定單元131、變換單元132、量化單元133和熵編碼單元134;其中,確定單元131,用于針對(duì)第i個(gè)宏塊,當(dāng)所述第i個(gè)宏塊的預(yù)測(cè)編碼的類(lèi)型為幀內(nèi)預(yù)測(cè)編碼時(shí),則確定所述第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,根據(jù)確定的所述第i個(gè)宏塊的幀內(nèi)預(yù)測(cè)編碼模式,從已經(jīng)編碼的宏塊中確定第i個(gè)宏塊的預(yù)測(cè)像素值,并確定第i個(gè)宏塊和預(yù)測(cè)像素值的殘差;其中,第i個(gè)宏塊為待編碼陣列中的宏塊中的任意一個(gè)宏塊;變換單元132,用于對(duì)第i個(gè)宏塊和預(yù)測(cè)像素值的殘差進(jìn)行變換;確定單元131,還用于確定第i個(gè)宏塊的量化步長(zhǎng);量化單元133,用于根據(jù)第i個(gè)宏塊的量化步長(zhǎng)對(duì)變換后的數(shù)據(jù)進(jìn)行量化;熵編碼單元134,用于對(duì)量化后的數(shù)據(jù)進(jìn)行熵編碼得到所述第i個(gè)宏塊的編碼數(shù)據(jù)。本實(shí)施例提供的視頻編碼器,可以用于執(zhí)行圖3所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。在本實(shí)施例的一種實(shí)現(xiàn)方式中,圖8為本發(fā)明提供的視頻編碼器實(shí)施例三的結(jié)構(gòu)示意圖,如圖8所示,當(dāng)上述待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)為預(yù)先設(shè)定的常數(shù),上述視頻編碼器還可以包括:第一確定模塊14和第一寫(xiě)入模塊15;其中,第一確定模塊14,用于在對(duì)第i個(gè)宏塊進(jìn)行熵編碼完成后,根據(jù)第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng),確定第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值;第一寫(xiě)入模塊15,用于將第i個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值寫(xiě)入第i個(gè)宏塊的編碼數(shù)據(jù)中;并將第i個(gè)宏塊的編碼數(shù)據(jù)寫(xiě)入碼流緩沖區(qū)中。本實(shí)施例提供的視頻編碼器,可以用于執(zhí)行圖4所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。在本實(shí)施例的另一種實(shí)現(xiàn)方式中,圖9為本發(fā)明提供的視頻編碼器實(shí)施例四的結(jié)構(gòu)示意圖,如圖9所示,當(dāng)上述待編碼陣列中每行宏塊的最后一個(gè)宏塊的量化步長(zhǎng)為,視頻編碼器為該宏塊進(jìn)行編碼時(shí)所確定的量化步長(zhǎng)時(shí),上述視頻編碼器還可以包括:第二確定模塊16和第二寫(xiě)入模塊17;其中,第二確定模塊16,用于在待編碼陣列的所有宏塊都進(jìn)行熵編碼完成后,確定每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值;第二寫(xiě)入模塊17,用于將每個(gè)宏塊與相鄰的前一宏塊的量化步長(zhǎng)的差值分別寫(xiě)入每個(gè)宏塊的編碼數(shù)據(jù)中;并將待編碼陣列的所有宏塊的編碼數(shù)據(jù)寫(xiě)入碼流緩存區(qū)中。本實(shí)施例提供的視頻編碼器,可以用于執(zhí)行圖5所示方法實(shí)施例的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1