XDM_BufDesc结构体定义在xdm.h中:
typedef struct XDM_BufDesc{
// 结构体维护的Buffer的数量,视频处理中可认为是帧的数量。不得大于XDM_MAX_IO_BUFFERS
XDAS_Int32 numBufs;
// 存放XDM_BufDesc维护的每个Buffer的大小,单位8bit
// 即bufSize[n]等于 第n个Buffer的大小 n 小于numBufs-1
XDAS_Int32* bufSizes;
// 指向一个指针数组,该数组每个元素指向XDM_BufDesc维护的每个Buffer
// 对于视频处理,第n帧的数据存放在地址 XDM_BufDesc->bufs[n]
XDAS_Int8** bufs;
}XDM_BufDesc;
XDM_BufDesc完整描述了n帧图像数据组成的一段视频流。
对于视频应用,可以认为XDM_BufDesc 完整描述了 XDM_BufDesc.numBufs 帧图像组成的一段视频流(输入或输出), 至于XDM_BufDesc有多少帧,则由arm端的程序控制。每一个buf(即每一帧)中数据是怎么存放的呢?
如果是YUV 4:2:0,假设一帧为 2*2像素分辨率,XDM_BufDesc.numBufs = 4 ; (4帧),则内存中数据如下:
XDM_BufDesc.bufSizes[0]=XDM_BufDesc.bufSizes[1]=XDM_BufDesc.bufSizes[2]=XDM_BufDesc.bufSizes[3]=8
XDM_BufDesc.bufs[0] 指向第1帧的 U0 Y0 V1 Y1 U2 Y2 V3 Y3
XDM_BufDesc.bufs[1] 指向第2帧的 U0 Y0 V1 Y1 U2 Y2 V3 Y3
XDM_BufDesc.bufs[2] 指向第3帧的 U0 Y0 V1 Y1 U2 Y2 V3 Y3
XDM_BufDesc.bufs[3] 指向第4帧的 V3 Y0 V1 Y1 U2 Y2 V3 Y3