2017-04-05 4 views
0

Wir erhalten ein unerwartetes Verhalten, wenn videoconvert mit gst-launch mit:GStreamer Verhandlungen mit videoconvert

On-Option zu tun (1) Im Folgenden Fehler erhalten:

gst-launch-1.0 v4l2src ! 'video/x-raw, width=640, height=480, framerate=30/1' ! autovideosink 

Die erros ist:

ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error. Additional debug info: gstbasesrc.c(2865): gst_base_src_loop():/GstPipeline:pipeline0/GstV4l2Src:v4l2src0: streaming task paused, reason not-negotiated (-4) 

Der Fehler macht Sinn, weil das Format des Filters wahrscheinlich nicht dem Format v4l2src oder dem Formatentspricht.

Aber videoconvert in beiden Optionen (2 & 3) unter Verwendung, es funktioniert ohne Fehler OK:

ich diese Option sehe (2) unter Arbeiten ohne Fehler:

gst-launch-1.0 v4l2src ! videoconvert ! 'video/x-raw, width=640, height=480, framerate=30/1' ! autovideosink 

I siehe auch die entsprechende Option (3) unter Arbeiten ohne Fehler:

gst-launch-1.0 v4l2src ! 'video/x-raw, width=640, height=480, framerate=30/1' ! videoconvert ! autovideosink 

Die Frage ist, warum funktioniert in beiden Fällen (2 & 3).

Ich würde davon ausgehen, dass es nur in einem von ihnen funktionieren sollte, wenn src v4l2src Filter nicht passt (width = 640, height = 480) dann müssen wir das Format von v4l2src zu Filter umwandeln.

Auf der anderen Seite, wenn das Format autovideosink Filter nicht passt (Breite = 640, Höhe = 480) dann müssen wir die Konvertierung direkt nach dem Filter tun.

Also würde ich annehmen, dass nur (2) oder (3) funktionieren sollte, aber nicht beides.

Antwort

1

(2) und (3) kann funktionieren, weil dies tatsächlich ein Problem mit dem Format Ihres Videos sein könnte. Der wahrscheinlichste Grund ist, dass Ihre Kamera ein bestimmtes Format produziert und Ihre Video-Senke es nicht akzeptieren kann. Hinzufügen von videoconvert in der Mitte macht es von einem zum anderen konvertieren und sie sind glücklich.

Um zu verhandeln, erhält videoconvert die Downstream-Caps und propagiert sie upstream, außer dass es mehr Formate injiziert als Downstream verarbeiten kann, weil es einen anderen akzeptieren und dann einfach konvertieren kann. Die Dimension und die Framerate werden beibehalten, da nichts in dieser Pipeline die Rate skalieren oder ändern kann.

Wenn Sie die Arbeits Pipeline mit -v Flagge laufen sollte es die tatsächlichen Verhandlungs Kappen drucken und dann können Sie sehen, was v4l2src auf seinem Source-Pad produziert und was das Video Enke empfängt in seiner Spüle Pad. Dann können Sie sehen, was genau Videoconvert konvertiert.

+0

Ich bin mir nicht sicher, warum die Option (3) zum Beispiel funktioniert. Wenn v4l2src keine Option zur Ausgabe des Caps-Filterformats (width = 640, height = 480) und des Konverters * erst danach * hat, warum sollte die Pipeline dann den Caps-Filter passieren? – ransh

+0

Der Caps-Filter gibt kein Format an. Nur die Auflösung wird erzwungen und Ihre Kamera arbeitet damit. – thiagoss

+0

Sie können 'gst-inspect-1.0 videokonvert' überprüfen, um die verschiedenen Formate zu sehen, die videoconvert unterstützt und von/in konvertieren kann. – thiagoss