原始yuv420p数据上的sws_scale

我正在从树莓派获取yuv420p格式的相机数据。我正在尝试使用sws_scale将它们转换为RGBA格式。这就是我初始化上下文的方式:

_sws_context = sws_getcontext(CAMERA_WIDTH,CAMERA_HEIGHT,AV_PIX_FMT_YUV420P,CAMERA_WIDTH,AV_PIX_FMT_RGBA,nullptr,nullptr);

我现在对如何为sws_scale设置数据和行大小感到困惑。从相机中,我得到的是字节的简单数组,而没有进一步的结构。我认为我必须以某种方式将其细分为飞机。我的第一种方法是根本不分离它,本质上是这样的(基于以下事实:

const uint8_t *src_data[] = {data.data()};
const int src_strides[] = {(int) std::ceil((CAMERA_WIDTH * 6) / 8)};

这是基于:

  

2x2像素网格有12位

所以我假设一行将使用其中一半。但这会导致分段错误。因此,我认为我必须以某种方式将src_datasrc_strides分成各自的YUV平面,但是我不确定该怎么做,尤其是因为YUV420数据的一个像素每个平面使用的字节数少于一个。 ..

guolihongnanjing 回答:原始yuv420p数据上的sws_scale

事实证明,它比我想象的要简单!飞机是一架又一架,这也使步伐变得很明显:

        const auto y = data.data();
        const auto u = y + CAMERA_WIDTH * CAMERA_HEIGHT;
        const auto v = u + (CAMERA_WIDTH * CAMERA_HEIGHT) / 4;

        const auto stride_y = CAMERA_WIDTH;
        const auto stride_u = CAMERA_WIDTH / 2;
        const auto stride_v = CAMERA_WIDTH / 2;
本文链接:https://www.f2er.com/3132422.html

大家都在问