BrainStorm: OpenGL + Video dahinter



  • Hi, ich brauche ein Widget das im Hintergrund ein (2D) Video abspielt und davor (3D) OpenGL rendert. Das ganze soll markerbasiertes Tracking - welches parallel durch eine Kamera an einer definierten Position aufgenommen wurde- visualisieren. Hat jemand sowas schonmal gemacht und kann mir ein paar Fallstricke aufzeigen? Ich werde mich spontan in Phonon einlesen und versuchen wollen das mit einem qglwidget zu kombinieren.

    a) Pixmap vom QQLWidget nehmen und vor das Video pflastern: Phonon + Overlay
    b) das Video im Hintergrund des QGLWidgets abspielen: QGLWidget + underlay

    Beim Test von QGLWidget() mit

    QGLFormat(QGL::DoubleBuffer| QGL::DepthBuffer| QGL::Rgba| QGL::AlphaChannel| QGL::AccumBuffer| QGL::StencilBuffer| QGL::StereoBuffers| QGL::DirectRendering| QGL::SampleBuffers| QGL::HasOverlay,0)
    

    kam raus:

    no overlay
    no sample buffers
    no stereo buffers
    

    Wer hat Ideen?



  • Render To Texture auf eine Textur im Hintergrund?



  • Habe versucht Phonon einfach mal zum abspielen eines Videos zu nutzen, das kompiliert, startet aber nichts wird dargestellt (nicht zu Hause, nicht in der Arbeit: Ubuntu Intrepid & Hardy, 64&32bit:

    // myvideo.h

    #ifndef MYVIDEO_H
    #define MYVIDEO_H
    
    #include <QtGui/QWidget>
    
    namespace Phonon {
        class MediaSource;
        class MediaObject;
    };
    
    class myVideo : public QWidget
    {
    Q_OBJECT
    public:
        myVideo(QWidget * parent = 0 );
        ~myVideo();
    
    private slots:
        void playME();
        void stopME();
        QString state(int);
    
    private:
        Phonon::MediaSource * mediaSource;
        Phonon::MediaObject * media;
    };
    
    #endif // MYVIDEO_H
    

    // myvideo.cpp

    #include "myvideo.h"
    
    #include <Phonon/VideoPlayer>
    #include <Phonon/VideoWidget>
    #include <Phonon/MediaObject>
    #include <Phonon/AudioOutput>
    #include <Phonon/SeekSlider>
    #include <Phonon/VolumeSlider>
    
    #include <QtGui>
    #include <QDebug>
    
    using namespace Phonon;
    
    myVideo::myVideo(QWidget *parent)  : QWidget(parent)
    {
        // create source
        mediaSource = new Phonon::MediaSource(":/avi/video.avi");
    
        // create object for source
        media = new MediaObject(this);
        media->setCurrentSource(*mediaSource);
    
        // create player
        VideoWidget *player = new VideoWidget(this);
        player->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding);
        // path way to player
        createPath(media, player);
    
        // create sound output
        AudioOutput *audioOutput = new AudioOutput(Phonon::VideoCategory, this);
        // path way to audio
        createPath(media, audioOutput);
    
        SeekSlider *slider = new SeekSlider(this);
        slider->setMediaObject(media); // connects itself 
        slider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
    
        VolumeSlider *volumeSlider = new VolumeSlider(this);
        volumeSlider->setAudioOutput(audioOutput); // connects itself
        volumeSlider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
    
        // BUTTONS
        QPushButton *play = new QPushButton("PLAY");
        connect (play,SIGNAL(clicked()),this,SLOT(playME()));
    
        QPushButton *stop = new QPushButton("STOP");
        connect (stop,SIGNAL(clicked()),this,SLOT(stopME()));
    
        // GUI
        QGridLayout * controls = new QGridLayout;
        controls->addWidget(slider,1,1,1,2);
        controls->addWidget(volumeSlider,2,1,1,2);
        controls->addWidget(play,3,1,1,1);
        controls->addWidget(stop,3,2,1,1);
    
        QVBoxLayout * vbl = new QVBoxLayout(this);
        vbl->addWidget(player);
        vbl->addLayout(controls);
    }
    
    myVideo::~myVideo()
    {
        delete mediaSource;
    }
    
    QString myVideo::state(int i)
    {
        if (i==1) return "QVecPhonon::LoadingState"; 
        else if (i==2) return "Phonon::StoppedState"; 
        else if (i==3) return "Phonon::PlayingState"; 
        else if (i==4) return "Phonon::BufferingState";
        else if (i==5) return "Phonon::PausedState";
    
        return "Phonon::ErrorState";
    }
    
    void myVideo::playME()
    {
     qDebug() << "PLAY\nState: " << state(media->state());
     media->play();
    }
    
    void myVideo::stopME()
    {
     qDebug() << "STOP\nState: " << state(media->state());
     media->stop();
    }
    

    // main.cpp

    #include <QtGui/QApplication>
    #include "qglwrap.h"
    #include "myvideo.h"
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        a.setApplicationName("hihoBottleOfRum"); // for sound ?!
        myVideo v;
        v.resize(600,600);
        v.show();
        return a.exec();
    }
    

    // ress.qrc

    <RCC>
        <qresource prefix="/avi">
            <file alias="video.avi">meindemovideo.avi</file>
        </qresource>
    </RCC>
    

    // myvideo.pro

    // .pro
    QT += phonon
    TARGET = qogwidpick
    TEMPLATE = app
    SOURCES += main.cpp myvideo.cpp
    HEADERS += myvideo.h
    RESOURCES += ress.qrc
    


  • Scorcher24 schrieb:

    Render To Texture auf eine Textur im Hintergrund?

    Super, noch eine Idee zum überprüfen 🙂 da Phonon nicht tut, werd ich mich mal nach avi-decoder libs umschaun ... obwohl ... Qt müsste das selbst können? Ich such mal.


Anmelden zum Antworten