video4linux und QGlWidget

Alles rund um die Programmierung mit Qt
Antworten
flo_weitweg
Beiträge: 33
Registriert: 14. Januar 2005 15:11

video4linux und QGlWidget

Beitrag 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]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und Du bist sicher dass deine Daten bei loadFromData() so vorliegen das Qt sie auch laden kann??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
flo_weitweg
Beiträge: 33
Registriert: 14. Januar 2005 15:11

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das musst Du wohl selbst wissen...
Siehe Doku:

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

'Funktioniert nicht' ist keine Fehlerbeschreibung
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

evtl. hilft Dir auch der Thread hier weiter: http://qtforum.de/forum/viewtopic.php?t=2908
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
flo_weitweg
Beiträge: 33
Registriert: 14. Januar 2005 15:11

Beitrag 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]
Dateianhänge
ersteBild.jpg
ersteBild.jpg (39.55 KiB) 4311 mal betrachtet
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
moviemax
Beiträge: 56
Registriert: 10. März 2008 09:49
Wohnort: München

Beitrag 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
Antworten