【发布时间】:2017-04-19 10:48:20
【问题描述】:
我正在使用独立的硬件开发板来执行计算机视觉操作。这是一个示例,用于将 YUV 帧存储到 DDR 内存中。但是我对声明如下的 YUV 帧缓冲区代码有点困惑:
extern U8 inputFrame
void InitTestBuffers(int width, int height)
{
testFrameSpec.width = width;
testFrameSpec.height = height;
testFrameSpec.stride = width;
testFrameSpec.type = YUV420p;
testFrameSpec.bytesPP = 1;
inBuffer.spec = testFrameSpec;
//******************NEED TO KNOW THE BELOW PART***************
inBuffer.p1 = (u8*)(&inputFrame);
inBuffer.p2 = (u8*)((u32)(&inputFrame) + width * height);
inBuffer.p3 = (u8*)((u32)(&inputFrame) + width * height + width * height / 4);
//p1,p2,p3 are pointers to 1,2 and 3 image plane
//*************************************************************
return;
}
即使在某些地方,它也会为缓冲帧声明以下内容
static u8 FRAMES outputFrame[FRAME_WIDTH * FRAME_HEIGHT * 3 / 2];
以下是他们使用这些概念但方式不同的一个示例:
我的问题不是关于代码理解,而是我不明白为什么需要这种计算(概念上)。
【问题讨论】:
-
搜索一下YUV420P格式的定义你应该明白为什么存储是这样的了。
-
是的,我搜索了它并发现了一些不同的计算。这就是我感到困惑的地方。一个例子我提供了提到 YUV 的链接。
标签: c++ c video framebuffer yuv