在下在用QLabel实时显示camera视频
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update())); //通过update来调用paintEvent
connect(timer,SIGNAL(timeout()),this,SLOT(rundecoder()));//rundecoder是自定义的槽函数
//timer->start(30);
timer->start(1000);
paintEvent函数如下
void ProcessImage::paintEvent(QPaintEvent *)
{
rs = vd->get_frame((void **)&p,&len);//获取视频的一帧数据,通过p和len传回参数
convert_yuv_to_rgb_buffer(p,pp,VIDEOWIDTH,VIDEOHIGHT/*QWidget::width(),QWidget::height()*/);
frame->loadFromData((uchar *)pp,/*len*/VIDEOWIDTH * VIDEOHIGHT * 3 * sizeof(char)); //frame为一个QImage对象
label->setPixmap(QPixmap::fromImage(*frame,Qt::AutoColor).scaled(640,480,Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
rs = vd->unget_frame();
}
现在问题是:
定时器对自定义的槽函数作用很明显,1s调用一次
但是视频显示不论设置30还是1000,还是10000视频都很流畅,按道理不是应该1s或10s显示一帧吗,应该会明显卡顿的,求解?
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update())); //通过update来调用paintEvent
connect(timer,SIGNAL(timeout()),this,SLOT(rundecoder()));//rundecoder是自定义的槽函数
//timer->start(30);
timer->start(1000);
paintEvent函数如下
void ProcessImage::paintEvent(QPaintEvent *)
{
rs = vd->get_frame((void **)&p,&len);//获取视频的一帧数据,通过p和len传回参数
convert_yuv_to_rgb_buffer(p,pp,VIDEOWIDTH,VIDEOHIGHT/*QWidget::width(),QWidget::height()*/);
frame->loadFromData((uchar *)pp,/*len*/VIDEOWIDTH * VIDEOHIGHT * 3 * sizeof(char)); //frame为一个QImage对象
label->setPixmap(QPixmap::fromImage(*frame,Qt::AutoColor).scaled(640,480,Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
rs = vd->unget_frame();
}
现在问题是:
定时器对自定义的槽函数作用很明显,1s调用一次
但是视频显示不论设置30还是1000,还是10000视频都很流畅,按道理不是应该1s或10s显示一帧吗,应该会明显卡顿的,求解?

