1、vi的帧场数据格式为VIDEO_FIELD_INTERLACED(3)
顶场底场数据按行交错排列。
top line0
bot line0
top line1
bot line1
...
1700输出的1D1,16个通道,通道0~7在顶场,8~15在底场
所以从vi获取ch0的yuv数据时,需要丢弃偶数场
2、VO的帧场数据格式为VIDEO_FIELD_TOP或者VIDEO_FIELD_BOTTOM
先顶场再底场
top line0
top line1
...
bot line0
bot line1
...
所以从v0获取ch0的yuv数据时,不需要丢弃偶数场
3、YUV的数据格式,stVFrameInfo.stVFrame.enPixelFormat==PIXEL_FORMAT_YUV_SEMIPLANAR_420
stVFrameInfo.stVFrame.u32PhyAddr[0]:保存Y数据(每像素8bit)
stVFrameInfo.stVFrame.u32PhyAddr[1]:保存UV数据(每像素2bit U,2bit V)
stVFrameInfo.stVFrame.u32Stride[0]和stVFrameInfo.stVFrame.u32Stride[1]是跨度。
yuv数据保存格式如下:
stVFrameInfo.stVFrame.u32PhyAddr[0]地址:
Y00 Y01 Y02 Y03 ...
Y10 Y11 Y12 Y13 ...
stVFrameInfo.stVFrame.u32PhyAddr[1]地址:
U00 V11 U02 V13 ...
还原出像素:
(Y00 U00 V11),(Y01 U00 V11),(Y02 U02 V13),(Y03 U02 V13)...
(Y10 U00 V11),(Y11 U00 V11),(Y12 U02 V13),(Y13 U02 V13)...
4、打印信息如下:
printf("w=%d,h=%d,Field=%d,format=%d,s0=%x,%d,s1=%x,%d,s2=%x,%d\n",
stVFrameInfo.stVFrame.u32Width,stVFrameInfo.stVFrame.u32Height,
stVFrameInfo.stVFrame.u32Field,stVFrameInfo.stVFrame.enPixelFormat,
stVFrameInfo.stVFrame.u32PhyAddr[0],stVFrameInfo.stVFrame.u32Stride[0],
stVFrameInfo.stVFrame.u32PhyAddr[1],stVFrameInfo.stVFrame.u32Stride[1],
stVFrameInfo.stVFrame.u32PhyAddr[2],stVFrameInfo.stVFrame.u32Stride[2]);
8104(3515):
w=352,h=288,Field=4,format=19,s0=c8df8000,352,s1=c8e10c00,352,s2=0,0
7016(3515):
w=720,h=576,Field=3,format=19,s0=cc686200,720,s1=cc6eb600,720,s2=0,0
7032(3520,从VI获取数据):
w=352,h=4636,Field=3,format=19,s0=c3ab4e00,384,s1=c3c67800,384,s2=0,0
7032(3520,从VO获取数据):
w=352,h=2318,Field=2,format=19,s0=c40ef980,768,s1=c42a2380,768,s2=0,0
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)