導(dǎo)語
今天跟大家分享的這篇文章,也是之前自己總結(jié)的苛萎,大致就是想說明一下俯邓,視頻的裸數(shù)據(jù)yuv格式的各種分類。
剛開始接觸yuv的時(shí)候扎拣,筆者就被形形色色的各種各樣的yuv格式弄得一頭霧水赴肚。因此也決心好好梳理一下這部分知識。當(dāng)時(shí)感覺對各個(gè)格式已經(jīng)比較清楚了鹏秋。正好現(xiàn)在又要有相關(guān)的開發(fā)尊蚁,因此決定復(fù)習(xí)復(fù)習(xí)。
希望這篇總結(jié)能對大家有所幫助
內(nèi)容
? 對格式采樣的理解
提出yuv格式的原因侣夷,是為了解決彩色電視和黑白電視兼容性問題横朋,因此從rgb的顏色空間,轉(zhuǎn)換為yuv的顏色空間百拓,其中y代表亮度琴锭,u和v代表色度。
yuv種類分為很多衙传,可以理解是一個(gè)二維的决帖,即空間間,和空間內(nèi)蓖捶,這樣的表述地回,借鑒了h264中的幀間和幀內(nèi)的思想
為什么這么說呢?
下面分別從這兩種情況闡述一下這個(gè)觀點(diǎn):
空間-間:不同空間俊鱼,即描述一個(gè)像素的bit數(shù)不同刻像,比如yuv444,yuv422并闲,yuv411细睡,yuv420
空間-內(nèi):相同空間,即描述一個(gè)像素的bit數(shù)相同帝火,但是存儲方式不同溜徙,比如對于yuv420而言湃缎,又可細(xì)分為yuv420p,yuv420sp蠢壹,nv21嗓违,nv12,yv12知残,yu12靠瞎,I420
因此,我們在理解yuv格式時(shí)求妹,時(shí)刻需要記住要從bit數(shù)乏盐,和存儲結(jié)構(gòu)兩方面考察
? 對于4的理解
為什么yuv444,yuv420制恍,yuv422父能,yuv411都是用的4呢?
我仔細(xì)的研究了一下净神,
首先yuv的命名方式和rgb的命名方式是不相同的何吝,如果是rgb4444,這里的數(shù)字代表的是不同顏色分量所占的bit數(shù)
這里鹃唯,rgb4444代表alpha 4bit爱榕,red 4bit,green 4bit坡慌,blue 4bit黔酥,從宏觀上看,是16bit洪橘,也就是2字節(jié)跪者,但是從微觀上看,是以bit區(qū)分的
yuv的命名方式則不是這種情況熄求,yuv不會分細(xì)到bit級別渣玲,最低最低的單位,也是1字節(jié)弟晚,即8bit忘衍,說到這里,就會拋出一個(gè)問題卿城,
難道每個(gè)像素點(diǎn)都需要至少1字節(jié)的整數(shù)倍來描述嗎淑履?
如果說描述的最小單位是1字節(jié),那么每個(gè)像素都是由y藻雪,u,v共同描述的狸吞,難道說明每個(gè)像素點(diǎn)至少都是
1字節(jié)y+1字節(jié)u+1字節(jié)v = 3字節(jié)
來描述嗎勉耀?顯然這是不合理的指煎,因?yàn)槿搜蹖是很敏感的,但是u和v是可以在一定程度上壓縮的便斥,也就是說至壤,同一個(gè)像素點(diǎn),u和v的描述可以小于1字節(jié)枢纠,那么這是不是和最小單位為一字節(jié)矛盾呢像街?答案是不矛盾,因?yàn)橛玫搅斯蚕淼乃枷虢欤@是yuv和rgb的本質(zhì)區(qū)別
rgb是一個(gè)像素是一個(gè)家庭镰绎,家庭成員是r,g木西,b畴栖,但是yuv是若干像素是一個(gè)家庭,不同像素的y共享同一個(gè)u和v八千,這樣吗讶,引入了共享的思想,雖然最小單位是一個(gè)字節(jié)恋捆,但實(shí)際上描述一個(gè)像素點(diǎn)的字節(jié)照皆,不一定是字節(jié)的整數(shù)倍
該進(jìn)入正題了,為什么是4沸停?因?yàn)檫@個(gè)4膜毁,實(shí)際上表達(dá)了共享的最大單位!也就是最多4個(gè)像素進(jìn)行共享星立,因此4實(shí)際上是隱含的采樣全集
? 不同空間下yuv格式
這里從空間的角度考慮yuv格式
① yuv444
那么yuv444代表什么呢爽茴?就是最完整的最理想的最奢侈的狀態(tài),
[ y u v ] [ y u v ] [ y u v ] [ y u v ]
[ y u v ] [ y u v ] [ y u v ] [ y u v ]
[ y u v ] [ y u v ] [ y u v ] [ y u v ]
[ y u v ] [ y u v ] [ y u v ] [ y u v ]
這無疑是最理想的狀態(tài)了y绰垂,u室奏,v都為4,說明大家都是滿的
② yuv422
那么劲装,yuv422呢胧沫?說明這里,u由4變?yōu)?占业,v由4變?yōu)?绒怨,也就是在原來滿的情況下,每行需要去掉兩個(gè)u和兩個(gè)v
如何去掉呢谦疾?最簡單的方法就是第一個(gè)點(diǎn)保留u南蹂,第二個(gè)點(diǎn)保留v,第三個(gè)點(diǎn)保留u念恍,第四個(gè)點(diǎn)保留v ..
圖示如下:
[ y u ] [ y v ] [ y u ] [ y v ]
[ y v ] [ y u ] [ y v ] [ y u ]
[ y u ] [ y v ] [ y u ] [ y v ]
[ y v ] [ y u ] [ y v ] [ y u ]
在這張圖中六剥,顯然一個(gè)家庭的成員為
[ y u ] [ y v ]
也就是兩個(gè)像素點(diǎn)共享uv
③ yuv411
yuv411又是什么情況呢晚顷?顯然在原來yuv422的基礎(chǔ)上,每行再去掉一個(gè)u和一個(gè)v
圖示如下:
[ y u ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y v ] [ y ]
這個(gè)家庭的成員為
[ y u ] [ y ] [ y v ] [ y ]
也就是四個(gè)像素點(diǎn)共享uv
④ yuv420
yuv420的意思似乎是在yuv422的基礎(chǔ)上疗疟,再拿掉兩個(gè)v该默,這樣不就沒有v了嗎?
其實(shí)yuv420的取名方式不是很高明策彤,更確切的命名為yuv420yuv402
也就是第一行只有兩個(gè)u栓袖,而第二行只有兩個(gè)v
圖示如下:
[ y u ] [ y ] [ y u ] [ y ]
[ y v ] [ y ] [ y v ] [ y ]
[ y u ] [ y ] [ y u ] [ y ]
[ y v ] [ y ] [ y v ] [ y ]
仔細(xì)體會yuv420和yuv411的區(qū)別
對于yuv420而言,這個(gè)家庭的成員為
[ y u ] [ y ]
[ y v ] [ y ]
也是四個(gè)像素點(diǎn)共享uv店诗,但是這個(gè)家庭顯然比yuv411的家庭關(guān)系更近一些
思考:從這個(gè)課題討論來看裹刮,我們是否可以進(jìn)一步提高yuv的壓縮效率?可以更多y共享uv嗎必搞?可以自適應(yīng)嗎必指?
小結(jié):從這里可以看出,yuv211和yuv422顯然格式上是不一樣的恕洲,因此這里的數(shù)字不僅僅代表了比例塔橡,還代表了實(shí)際的值
? 三種格式packet,planar霜第,semi-plane
在這一課題葛家,我們探討一下相同bit數(shù)的不同存儲格式,主要討論yuv422和yuv420
packet是打包格式泌类,即存儲yuv癞谒,然后再存儲下一個(gè)yuv ..
planar是平面格式,即先存儲y平面刃榨,再存儲u平面弹砚,最后存儲v平面
semi-planar是兩個(gè)平面,正常的planar是三個(gè)平面枢希,即y平面桌吃,u平面,v平面苞轿,現(xiàn)在的semi-planar是兩個(gè)平面茅诱,也就是說uv為同一個(gè)平面,即一個(gè)y平面搬卒,一個(gè)uv平面
① yuv422
yuyv(yuy2)
[ y u ] [ y v ] [ y u ] [ y v ]
[ y u ] [ y v ] [ y u ] [ y v ]
[ y u ] [ y v ] [ y u ] [ y v ]
[ y u ] [ y v ] [ y u ] [ y v ]
uyvy
[ u y ] [ v y ] [ u y ] [ v y ]
[ u y ] [ v y ] [ u y ] [ v y ]
[ u y ] [ v y ] [ u y ] [ v y ]
[ u y ] [ v y ] [ u y ] [ v y ]
yuv422p(yu16)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u u u u ]
[ u u u u ]
[ v v v v ]
[ v v v v ]
或(yv16)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v v v v ]
[ v v v v ]
[ u u u u ]
[ u u u u ]
yuv422sp(nv16)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u v u v ]
[ u v u v ]
[ u v u v ]
[ u v u v ]
或(nv61)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v u v u ]
[ v u v u ]
[ v u v u ]
[ v u v u ]
② yuv420
yuv420p(yu12 / I420)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u u ]
[ u u ]
[ v v ]
[ v v ]
或(yv12)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v v ]
[ v v ]
[ u u ]
[ u u ]
yuv420sp(nv12)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ u v u v ]
[ u v u v ]
或(nv21)
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ y y y y ]
[ v u v u ]
[ v u v u ]
? 對nv系列理解
常見的有nv12瑟俭,nv21,nv16契邀,nv61等摆寄,這里代表什么意思呢?
其實(shí)nv系列,都屬于semi-plane系列
這里nv12表示正常的順序椭迎,即uv plane锐帜,先是u,然后是v
而nv21表示相反的順序畜号,即uv plane,先是v允瞧,然后是u
同樣简软,nv16和nv61的區(qū)別也是僅僅是uv的次序而已
這里的12和16又代表什么呢?實(shí)際上代表的是一個(gè)像素所占的位數(shù)述暂!
以nv12為例痹升,表示一個(gè)像素占用12bit,其中y是定死的占8bit畦韭,也就是u占2bit疼蛾,v占2bit,實(shí)際上就是yuv420格式艺配,具體而言是yuv420sp格式
nv16察郁,則表示一個(gè)像素占用16bit,其中y是定死的8bit转唉,也即是u占4bit皮钠,v占4bit,實(shí)際上就是yuv422格式赠法,具體而言是yuv422sp格式