2017-04-05 1 views
0

Nous devient un comportement inattendu lors de l'utilisation videoconvert avec gst-launch:négociation Gstreamer avec videoconvert

sur l'option de faire (1) ci-dessous, nous obtenons des erreurs:

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

Les erros est:

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) 

L'erreur a du sens, car probablement le format du filtre ne correspond pas au format v4l2src ou au format autovideosink.

Mais en utilisant videoconvert dans les deux options (2 & 3) ci-dessous, il fonctionne OK sans erreur:

Je vois que l'option (2) ci-dessous fonctionne sans erreur:

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

I voir aussi cette option (3) ci-dessous fonctionne sans erreur:

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

La question est de savoir pourquoi les travaux dans les deux cas (2 & 3).

Je suppose que cela ne devrait fonctionner que dans l'un d'entre eux car si src de v4l2src ne correspond pas au filtre (width = 640, height = 480) alors nous devons convertir le format de v4l2src pour correspondre au filtre. D'autre part, si le format de autovideosink ne correspond pas au filtre (largeur = 640, hauteur = 480), nous devons effectuer la conversion juste après le filtre. Donc, je suppose que seulement (2) ou (3) devraient fonctionner mais pas les deux.

Répondre

1

(2) et (3) peuvent fonctionner parce que cela pourrait effectivement être un problème avec le format de votre vidéo. La raison probable est que votre appareil photo produit un certain format et que votre récepteur vidéo ne peut pas l'accepter. En ajoutant videoconvert au milieu, il se convertit de l'un à l'autre et ils sont heureux.

Pour négocier, videoconvert récupère les majuscules en aval et les propage en amont, sauf qu'il injecte plus de formats que le flux aval peut gérer car il peut en accepter un autre et ensuite simplement convertir. La dimension et le framerate sont conservés tels quels parce que rien dans ce pipeline ne peut changer d'échelle ou changer le taux. Si vous exécutez le pipeline de travail avec le drapeau -v, il devrait imprimer les plafonds négociés réels et ensuite vous pouvez voir ce que produit v4l2src sur son pavé source et ce que le récepteur vidéo reçoit dans son pavé. Ensuite, vous pouvez voir ce que convertit exactement VideoConvert.

+0

Je ne sais pas pourquoi l'option (3) fonctionne par exemple. Si v4l2src n'a pas d'option pour sortir le format du filtre de majuscules (largeur = 640, hauteur = 480), et que le convertisseur est fait * seulement après *, alors pourquoi le pipeline devrait-il passer le filtre de majuscules? – ransh

+0

Le filtre de majuscules ne spécifie pas de format. Seule la résolution est appliquée et votre caméra fonctionne avec. – thiagoss

+0

Vous pouvez vérifier 'gst-inspect-1.0 videoconvert' pour voir les différents formats supportés par la vidéoconversion et convertis de/vers. – thiagoss