Man*_*mar 10 image-processing yuv image-formats nv12-nv21
我完全理解所讨论的NV12格式的大小
现在我正在阅读有关以这种格式存储UV平面的两个来源:一个是https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx
NV12
所有Y样本首先在内存中显示为具有偶数行的无符号字符值数组.Y平面后面紧跟着一组无符号字符值,其中包含打包的U(Cb)和V(Cr)样本.当组合的UV数组作为little-endian WORD值的数组寻址时,LSB包含U值,并且MSB包含V值.NV12是DirectX VA的首选4:2:0像素格式.预计这将是支持4:2:0视频的DirectX VA加速器的中期要求.下图显示了Y平面和包含U和V样本的数组.
我的理解是:在UV平面中,每个U和V都以单字节存储.
当我从维基百科阅读这篇文章时:https: //wiki.videolan.org/YUV#NV12
它说:
NV12
与I420相关,NV12具有一个亮度"亮度"平面Y和一个具有U和V值交错的平面.在NV12中,色度平面(蓝色和红色)在水平和垂直维度上进行二次采样,系数为2.对于2x2像素组,您有4个Y样本和1个U和1个样本.将NV12视为I420与U和V平面交错是有帮助的.这是NV12的图形表示.每个字母代表一位:对于1 NV12像素:YYYYYYYY UVUV对于2像素NV12帧:YYYYYYYYYYYYYYY UVUVUVUV对于50像素NV12帧:Y*8*50(UV)*2*50对于n像素NV12帧:Y*8*n(UV)*2*n
我在这里理解的是:每个U和V在每个字节中逐位交错.因此,UV平面的每个字节将包含4U位和4V位交错.
任何人都可以澄清我的怀疑吗?
ana*_*lyg 16
为了验证这一点(或者至少验证位级上没有交错),可以使用ffmpeg,这是一种广泛使用的视频工具.我做了以下实验:
ffmpeg它将其视为I420一些小尺寸的视频帧ffmpeg将其转换为NV12格式以下是(2)和(3)的示例命令行:
ffmpeg -s 96x4 -i example_i420.yuv -pix_fmt nv12 example_nv12.yuv
Run Code Online (Sandbox Code Playgroud)
这是我在输出中得到的:
Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Excepteur sint occaecat cupidatat non proident,s utnett uirn acduilppias cqiunig oeflfiitc,i as edde sdeor uenitu smmooldl itte mapnoirm iindc iedsitd ulnatb ourtu ml.a bLoorree me ti pdsoulmo rdeo lmoarg nsai ta laimqeuta,.cUotn seenci
我用粗体标记了色度(U和V)样本.很明显,这些是相同的值(ASCII字母),只是在加扰的顺序.如果执行任何比特交织,我会得到不同的值.
所以VLC维基(BTW 不是维基百科)中的描述是不正确的.有人名为"Edwardw补充说:""插图"提的像素在这里,后来又改成了"位" 在这里.我希望有人改变它以减少误导(维基需要注册,所以我无法编辑它).
| 归档时间: |
|
| 查看次数: |
15258 次 |
| 最近记录: |