LibVLC into an opengl QGraphicsScene



  • Greetings cute community,

    I'm currently trying to render a VLC video inside a QGraphicsScene.

    I'm using the following code:
    @//------------------------------------------------------------------------------------------
    // VLC callbacks
    //------------------------------------------------------------------------------------------

    /* static */ void * Player::lock(void * data, void ** buffer)
    {
    Player * player = static_cast<Player *> (data);

    *buffer = player->_image.bits();
    
    return NULL;
    

    }

    /* static */ void Player::unlock(void * data, void *, void * const *)
    {
    Player * player = static_cast<Player *> (data);

    QCoreApplication::postEvent(player, new QEvent(QEvent::User));
    

    }

    //------------------------------------------------------------------------------------------

    bool Player::event(QEvent * event)
    {
    if (event->type() == QEvent::User)
    {
    update();

        return true;
    }
    else return QObject::event(event);
    

    }

    void Player::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget)
    {
    painter->setRenderHint(QPainter::SmoothPixmapTransform, true);

    painter->setBrush(Qt::black);
    
    painter->drawRect(option->rect);
    
    painter->drawImage(0, 0, _image);
    
    // The next call is very slow, even using an Opengl viewport
    painter->drawImage(_targetRect, _image, QRectF(0, 0, _image.width(), _image.height()));
    

    }@

    I'm testing with a 1080p video. For some reason the drawImage call seems to slow things down. This is not a surprise in software, but it's also pretty slow in Opengl.

    My question is, assuming I want to use Opengl, is there a faster way to render a video frame into a QGraphicsScene using Qt 4.8 ?

    Thanks.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.