【发布时间】:2014-11-15 11:30:44
【问题描述】:
我使用QVideoProbe 访问相机帧。我的平台是安卓。
我已将每个相机帧转换为QImage,然后像素映射并显示在QLabel 上。
我的问题是这个过程很慢。
帧显示非常缓慢。
我可以将QVideoFrame 直接转换为QPixmap 或其他更快的方式来显示相机帧吗?
这是我的代码:
QCamera *camera = new QCamera(this);
camera->setCaptureMode(QCamera::CaptureViewfinder);
QVideoProbe *videoProbe = new QVideoProbe(this);
bool ret = videoProbe->setSource(camera);
qDebug() <<"videoProbe->setSource(camera):" << ret;
if (ret) {
connect(videoProbe, SIGNAL(videoFrameProbed(const QVideoFrame &)),
this, SLOT(present(const QVideoFrame &)));
}
camera->start();
...
...
bool MainWindow::present(const QVideoFrame &frame)
{
qDebug() <<"counter:" << ++counter;
QVideoFrame cloneFrame(frame);
if(cloneFrame.map(QAbstractVideoBuffer::ReadOnly))
{
QImage img(
cloneFrame.size(), QImage::Format_ARGB32);
qt_convert_NV21_to_ARGB32(cloneFrame.bits(),
(quint32 *)img.bits(),
cloneFrame.width(),
cloneFrame.height());
label->setPixmap(QPixmap::fromImage(img));
cloneFrame.unmap();
}
return true;
}
【问题讨论】:
-
图片的分辨率是多少?你是在安卓上做的吗?
-
感谢您的回复。是的,我在安卓上做。 img 大小为:QSize(640, 480)
-
我使用了 QPainter 并通过了 QImage / OPixmap 并使用了painter.drawImage 和painter.drawPixmap。但是在 QPainter 中静止的相机帧显示非常缓慢。
-
我没有使用Qt的实现,而是使用andrechen/yuv2rgb将NV12转换为QImage。但是,转换仍然使用大量 CPU,并且对于实时流式传输来说不够快。
-
认为您需要视频播放器小部件而不是 QLabel。