YUV框架层计算 - 所需的概念理解

YUV frame layer computation - Conceptual Understanding Needed

本文关键字:框架 计算 YUV      更新时间:2023-10-16

我正在使用独立的硬件开发板来执行计算机视觉操作。这是一个例子,以存储并将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];

以下是他们使用这些概念但以不同方式使用的一个示例:

yuv

我的问题不是关于代码理解,而是我不明白为什么需要此计算(概念上(。

在这种情况下,您似乎要处理平面YCBCR。平面表示每个颜色组件都存储在单独的阵列(又称平面(中。这与包装格式相反,其中颜色组件都存储在一个阵列中(y y y y y cb cr或类似的模式(。因此,inBuffer.p1将包含一个指向含有y值的width x height的数组。inBuffer.p2inBuffer.p3将分别包含包含width x height / 4 CB和Cr值的数组的指针。/ 4是因为一个CB和Cr值每4 Y值使用。