音视频编解码——视频数据格式

YUV采样

code:https://blog.csdn.net/byhook/article/details/84037338

YUV模型是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间

YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。

YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。

YUV 4:2:0采样,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。

常见的YUV420P和YUV420SP都是基于4:2:0采样的,所以如果图片的宽为width,高为heigth,在内存中占的空间为width * height * 3 / 2,其中前width * height的空间存放Y分量,接着width * height / 4存放U分量,最后width * height / 4存放V分量。

RGB与YUV转换:

xml 复制代码
Y      =  (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V =  (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

R = 1.164(Y - 16) + 1.596(V - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
B = 1.164(Y - 16) + 2.018(U - 128)

1. YUV420

1.1 YUV420P

YUV420P又叫plane平面模式,Y , U , V分别在不同平面,也就是有三个平面,它是YUV标准格式4:2:0,主要分为:YU12和YV12

1.1.1 YU12(I420)

在android平台下也叫作I420格式,首先是所有Y值,然后是所有U值,最后是所有V值。

YU12:亮度(行×列) + U(行×列/4) + V(行×列/4)

1.1.2 YV12

YV12格式与YU12基本相同,首先是所有Y值,然后是所有V值,最后是所有U值。只要注意从适当的位置提取U和V值,YU12和YV12都可以使用相同的算法进行处理。

YV12:亮度Y(行×列) + V(行×列/4) + U(行×列/4)

1.2 YUV420SP

YUV420SP格式的图像阵列,首先是所有Y值,然后是UV或者VU交替存储

所以如果图片的宽为width,高为heigth,在内存中占的空间为width * height * 3 / 2,其中前width * height的空间存放Y分量,接着width * height / 4存放U分量,最后width * height / 4存放V分量。

NV12和NV21属于YUV420SP格式,是一种two-plane模式,即Y和UV分为两个plane,但是UV(CbCr)为交错存储,而不是分为三个平面。

1.2.1 NV12

android手机从摄像头采集的预览数据一般都是NV21,存储顺序是先存Y,再VU交替存储,NV21存储顺序是先存Y值,再VU交替存储:YYYYVUVUVU

1.2.2 NV21

NV12与NV21类似,也属于YUV420SP格式,NV12存储顺序是先存Y值,再UV交替存储:YYYYUVUVUV

2. YUV422

2.1 YUY2

YUV 4:2:2采样

在YUY2格式中,数据可以被视为一个无符号字符值的数组,其中第一个字节包含第一个Y样本,第二个字节包括第一个U(Cb)样本,第三个字节包含第二个Y样本和第四个字节包含首个V(Cr)样本

3. YUV444

3.1 YUV444(I444)

2*2像素

3.2 YUV444(YV24)

4*4像素

相关推荐
俊俊谢3 小时前
华大HC32F460配置JTAG调试引脚为普通GPIO(PB03、PA15等)
嵌入式硬件·嵌入式·arm·嵌入式软件·hc32f460
无人装备硬件开发爱好者3 天前
深度解析:STM32 MDK 工程 HEX 文件转 BIN 文件 —— 原理、方法、优缺点与实战指南(中)
stm32·嵌入式软件·hex2bin
无人装备硬件开发爱好者3 天前
深度解析:STM32 MDK 工程 HEX 文件转 BIN 文件 —— 原理、方法、优缺点与实战指南(下)
stm32·嵌入式软件·mdk·hex2bin
轻微的风格艾丝凡3 天前
浅谈哈佛结构与冯诺依曼结构
嵌入式硬件·嵌入式软件
rechol6 天前
CPU中断异常
单片机·异常·嵌入式软件·中断
高旭的旭11 天前
一文读懂RDS AF跳转与EON TA跳转:广播信号的“稳定器”与“交通摆渡车”
嵌入式软件·fm·rds·radio
无人装备硬件开发爱好者11 天前
Doxygen 在嵌入式软件开发中的深度应用(中):从基础到无人机电调 / 汽车 FOC 控制器实战
嵌入式软件·doxygen·无人机电调·汽车 foc 控制器
炸膛坦客15 天前
FreeRTOS 学习:(十二)“任务创建” 和 “堆栈” 的动静态区分
freertos·实时操作系统·嵌入式软件
Meraki.Zhang16 天前
【STM32实践篇】:STM32CubeMX 的使用
stm32·单片机·嵌入式软件
顾晨阳——1 个月前
MQTT协议
mqtt·tcp·嵌入式软件