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 + underlayBeim Test von
QGLWidget()
mitQGLFormat(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.