被这个问题纠结了一天,我的山寨zc301摄像头只能输出mjpeg压缩的数据帧,然而网上绝大多数人都是yuv,教程大多是yuv转rgb24,mjpeg转rgb24的几乎没有,反正我是没找到,被逼的走投无路,尝试了下面的方法。
解决方法:
如果你已经了解了v4l2处理usb摄像头的步骤,就会知道有一个VIDIOC_DQBUF指令可以获取当前数据帧的缓冲区编号,通过这个编号,我们就可以找到这一帧的起始地址以及长度,观察QPixmap这个类,我们会发现它的其中一个构造函数就是使用内存的起始地址以及长度,事实证明,这是可以正确转换的,目前还不知道原理,难道mjpeg有特殊优待?下面附上与之相关的代码。
QPixmap m_pixmap;
m_pixmap.loadFromData(frame_data, frame_len);
ui->label->setPixmap(m_pixmap);