音视频原理图像相关概念 ⑦ ( YUV 跨距 Stride 对齐 | YUV 跨距 概念 | YUV 跨距对齐 概念 | YUV 跨距 Stride 对齐示例 )

文章目录

  • 一、 YUV 跨距 ( Stride ) 对齐
    • 1、YUV 跨距 概念
    • 2、YUV 跨距对齐 概念
  • 二、 YUV 跨距 ( Stride ) 对齐示例
    • 1、YUV420P 数据存储
    • 2、跨距对齐分析

一、 YUV 跨距 ( Stride ) 对齐


1、YUV 跨距 概念

Stride 跨距 , 指的是 在 内存中 每行像素 占用的空间 , 由于 系统 对 图像有 跨距对齐 的要求 , 这个 Stride 跨距 可能 大于等于 实际的 图像像素 所占用的 宽度 ;

分辨率为 638 x 480 的 RGB24 格式的图片 , 内存处理时 以 16 字节对齐 ;

RGB24 格式中 R ( 红 ) / G ( 绿 ) / B ( 蓝 ) 每个分量占用 8 位 ( 1 字节 ) , 一个像素总共占用 24 位 ( 3 字节 ) ;

每一行的 实际像素 所占用的内存是 638 * 3 = 1914 字节 ;

需要以 16 字节对齐 , 最后一个字节占用的实际 内存大小 是 1914 % 16 = 10 字节 ,

因此 还需要 额外补充 16 - 10 = 6 字节的填充字节 ,

最终达到 638 * 3 + 6 = 1920 字节 ;

在这里插入图片描述

2、YUV 跨距对齐 概念

YUV 跨距 ( Stride ) 对齐 是 图像处理 过程中 内存对齐 概念 ;

在 处理 YUV 格式的 图像 时 , 系统 或 硬件设备 要求 , YUV 图像的 每一行 像素 , 在 内存空间 中 需要 进行对齐操作 ;

Stride 跨距对齐 是 为了满足 特定 的 内存访问模式 的要求 , 有些系统要求 进行 跨距对齐 ,

  • 要求 YUV 图像 的 每行内存宽度 必须是 " 内存对齐长度 " 的整数倍 ,
  • 如果 YUV 图像 的 每行内存宽度 不是 " 内存对齐长度 " 的整数倍 , 就需要在 每行 的末尾添加 填充字节 , 以达到 跨距对齐 要求 ;
  • 被填充的字节 , 没有实际意义 , 不包含图像数据 ;
  • 这个 " 内存对齐长度 " 可能是 16 字节 / 32 字节 / 64 字节 等 ;

二、 YUV 跨距 ( Stride ) 对齐示例


要求 内存处理 YUV 图像时 , 以 16 字节对齐 , 现在有一张图片 638 x 480 像素的 YUV420P 图片 ;

1、YUV420P 数据存储

YUV420P 数据存储 格式如下图所示 , 不同类型的分量放在不同的数组中 ,

在这里插入图片描述

  • Y 灰度值 分量 , 存储在 最上面的数组中 , 在下图的 Y0 ~ Y7 的 灰度值 就是存放在一个数组中 ;
  • U 色度值 分量 , 存储在 中间数组中 , 在下图的 U0 ~ U3 的 色度值 就是存放在一个数组中 , U 的个数只有 4 个 , 是 Y 分量个数的一半 ;
  • V 色度值 分量 , 存储在 最下面的数组中 , 在下图的 V0 ~ V3 的 色度值 就是存放在一个数组中 , V 分量 的个数只有 4 个 , 是 Y 分量 个数的一半 ;

上面的 YUV 图像 内存数据 中 ,

  • Y0 , Y1 , Y4 , Y5 灰度值 使用 U0V0 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;
  • Y2 , Y3 , Y6 , Y7 灰度值 使用 U1V1 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;
  • Y8 , Y9 , Y12 , Y13 灰度值 使用 U2V2 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;
  • Y10 , Y11 , Y14 , Y15 灰度值 使用 U3V3 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;

该图像是一个 4 x 4 大小的图片 , 每一行 占 4 字节 ;
在这里插入图片描述

2、跨距对齐分析

图片的像素格式是 638 x 480 像素 ;

在上面 YUV420P 格式的图像中 , 每一行 每个像素 只占 1 字节 , 那么 该图像 在内存中 , 每行的长度 是 638 字节 ;

每一行的 实际像素 所占用的内存是 638 字节 ;

需要以 16 字节对齐 , 最后一个字节占用的实际 内存大小 是 638 % 16 = 14 字节 ,

因此 每行 还需要 额外补充 16 - 14 = 2 字节的填充字节 ,

最终达到 638 + 2 = 640 字节 ;

在这里插入图片描述