Seite 1 von 1

video4linux und QGlWidget

Verfasst: 27. Juni 2008 22:47
von flo_weitweg
Hallo Gemeinde!

Ich würde gerne aus der v4l2 API ein Frame von einer Kamera in einem QGL Widget darstellen. Das C-API Beispiel von v4l klappt so weit auch, jedoch krieg ich das Frame nicht in ein QGLWidget!

Mein Frame fange ich so:

Code: Alles auswählen

  unsigned char * frame = m_pCapture->getFrame();
mit:

Code: Alles auswählen

 unsigned char * CCapture::getFrame( void )
 {
   /* m_buffers = buffers aus dem C-Beipsiel */
   return (unsigned char *)m_buffers;
 }
Anschießend versuche ich:

Code: Alles auswählen

  m_pxMap->loadFromData( frame, sizeof( frame ) ); //frame an QPixmap
  glWidget->bindTexture( *m_pxMap );
  glWidget->updateGL();
Das wird mit:

Code: Alles auswählen

  QPixmap::fromImage: Cannot convert a null image
quittiert

Hat jemand von euch Ahnung bzw, ein Stk Code das er Posten kann!

Ich arbeite unter SuSE 10.3.

Ich freu mich über Antworten
Danke
Flo[/code]

Verfasst: 27. Juni 2008 23:01
von Christian81
Und Du bist sicher dass deine Daten bei loadFromData() so vorliegen das Qt sie auch laden kann??

Verfasst: 27. Juni 2008 23:49
von flo_weitweg
Und Du bist sicher dass deine Daten bei loadFromData() so vorliegen das Qt sie auch laden kann??
Nö - leider nicht!
Kann man die Daten prüfen? Wenn ja , wie?

Verfasst: 28. Juni 2008 09:21
von Christian81
Das musst Du wohl selbst wissen...
Siehe Doku:

http://doc.trolltech.com/4.4/qimage.html#loadFromData
bzw. einen der QImage ctors

Verfasst: 28. Juni 2008 11:03
von Volker
evtl. hilft Dir auch der Thread hier weiter: http://qtforum.de/forum/viewtopic.php?t=2908

Verfasst: 28. Juni 2008 23:41
von flo_weitweg
Super - Danke für die Antworten!

Ich bin nun einen Schritt weiter:
Folgendes hab ich gemacht (außer stundenlanges Quellcode lesen :-) ):

Ich hab mal das QL Widget bleiben lassen und mich auf eine einfacher Lösung konzentriert. Anstatt in ein QL Widget zu zeichnen benutze ich nun einfch ein QLabel:

Code: Alles auswählen

    unsigned char * frame = m_pCapture->getFrame();
    QImage * image = new QImage( frame, 340, 240, QImage::Format_RGB32 );

    m_lbl->setPixmap(QPixmap::fromImage(*image));
Angehängt hab ich mal das empfangene Bild!

Bleibt noch die Frage:
Was ist falsch an den Einstellungen?
Hab die Video Quelle geprüft und da kommt ein Bild!

Freu mich auf Anregungen!
Bei Erfolg geb ich auch ein Bier aus :-)
Flo[/code]

Verfasst: 30. Juni 2008 11:26
von Volker
Ist das Format der Bilddaten die Du bei getFrame() zurück bekommst auch wirklich RGB32? Und sind die Daten 32bit aligned (siehe Doku zu QImage)
data must be 32-bit aligned, and each scanline of data in the image must also be 32-bit aligned.

Verfasst: 30. Juni 2008 13:58
von moviemax
ich habe in der Richtung auch mal experimentiert.
Leider ohne Erfolg. ich habe es mit XV video overlay extension
probiert, weil ich es albern finde alle 1/25s ein neues QLabel zu malen.
Aslo das im QWidget ein eigebettes X11 Window mit xv extension läuft.

Mit QX11EmbedWidgetkann man aber nur eine "separate" Anwendung einbetten und scheinbar nicht ein XWindow.

Ich würde es dochnochmal mit einem eigene QGLWidget probieren,
darauf achten, das der X11 Ausgabetreiber dann auch auf gl(2) steht
(und nicht xv oder sonst.) und das Farbformat stimmt.

Bei video normalerweise YUV oder sowas.

moviemax