【问题标题】:YUV frame layer computation - Conceptual Understanding NeededYUV 帧层计算 - 需要概念性理解
【发布时间】: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];

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

YUV

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

【问题讨论】:

  • 搜索一下YUV420P格式的定义你应该明白为什么存储是这样的了。
  • 是的,我搜索了它并发现了一些不同的计算。这就是我感到困惑的地方。一个例子我提供了提到 YUV 的链接。

标签: c++ c video framebuffer yuv


【解决方案1】:

在这种情况下,您似乎处理的是平面 YCbCr。平面意味着每个颜色分量都存储在单独的数组(又名平面)中。这与打包格式相反,其中颜色分量都存储在一个数组中(Y Y Y Y Cb Cr 或类似模式)。 所以inBuffer.p1 将包含一个指向数组的指针,该数组包含width x height 的 Y 值。 inBuffer.p2inBuffer.p3 将包含一个指向数组的指针,该数组分别包含 width x height / 4 Cb 和 Cr 值。 / 4 是因为每 4 个 Y 值使用一个 Cb 和 Cr 值。

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多