VLCPlayer继承自QWidget,用于播放视频,视频解码一帧后调用updatePicture函数执行update,
然后应该执行paintEvent函数,但是程序运行一段时间会无法执行paintEvent函数,导致VLCPlayer无法刷新
如果将程序最小化再最大化就可以刷新,但无法连续刷新,不知道为什么,我用QT5.7.0
void *VLCPlayer::lock(void *op, void **plane)
{
TCallbackParam *p = (TCallbackParam *)op;
p->mutex.lock();
*plane = p->pixels;
return NULL;
}
void VLCPlayer::unlock(void *op, void *pic, void * const *plane)
{
TCallbackParam *p = (TCallbackParam *)op;
uchar *pp = (uchar *)*plane;
unsigned char *data = (unsigned char *)*plane;
QImage a(data, p->width, p->height, QImage::Format_RGBA8888);
p->mutex.unlock();
p->wnd->updatePicture(a);
}
void VLCPlayer::display(void *op, void *pic)
{
// (void)op;
}
void VLCPlayer::updatePicture(const QImage& imageSrc)
{
this->image = imageSrc;
update();
}
void VLCPlayer::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawImage(this->rect(), image);
}