我正在从树莓派获取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_data
和src_strides
分成各自的YUV平面,但是我不确定该怎么做,尤其是因为YUV420数据的一个像素每个平面使用的字节数少于一个。 ..