2017-04-24 1 views
0

Ich schreibe eine Gstreamer-Sink basierend auf GSTBASESINK, die ein Fpga-Video durch einen NTSC-Video-Encoder wickeln wird. Ich habe meinen eigenen Treiber, der Anforderung (im Grunde vsync Signal) für Rahmendaten über IRQ sendet. Mit der gstreamer plugin sink, die als Benutzeranwendung fungiert, fragt sie nach Frame-Datenanforderungen über ioctl ab.Wie man mehr Puffer von der Quelle in gstreamer verlangt?

Die vsync ist auf 30fps festgelegt, und die Daten benötigt Interlaced-Daten mit 480x720 Größe, YUY2.

Die Quelle, die ich verwende, ist videotestsrc läuft mit 60fps progressiv.

Ich bin ein absoluter Anfänger in Gstreamer, was ich tun möchte, ist es, 2 Puffer zwischen vsync zu erhalten, und interlace es innerhalb render() -Methode. und senden Sie einen vollen Frame an das Gerät.

Ich bin bei Verlust, wie man die Quelle für 2 Puffer in einem vsync "fragt".

Antwort

0

Ich habe das Gefühl, du machst mehr Arbeit als du brauchst, aber vielleicht eine benutzerdefinierte appsink erstellen und gst_app_sink_pull_sample verwenden?

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html

+0

Wenn ich 30fps interlaced bin ausgibt, sollte ich nicht richtig brauchen 1 Frame 60fps progressive zeigen? ist nicht ein verschachtelter Rahmen, der ein geradzahliges Feld mit 240 Zeilen umfasst, und ein ungeradzahliges Feld mit 240 Zeilen, die zu unterschiedlichen Zeiten abgetastet werden? –

+0

Ich würde Pull-Mode-Senke für diese implementieren, mit queue2 Element, las ich irgendwo, dass es eine Pull-Mode-Source-Pad zur Verfügung stellen kann. z.B. 'Videotestsrc! Video/X-Raw, Format = YUY2, Breite = 720, Höhe = 480, Framerate = 30/1! Warteschlange2! appsink'. Wie auch immer, ich kann nicht herausfinden, warum basesink niemals als Pull-Modus aktiviert wird, obwohl ich die notwendige Funktion implementiert habe und 'can-activate-pull' auf TRUE setzen –

+0

Ich denke, es ist eher wie wenn man 30fps interlaced bekommt, Sie werden es durch einen Deinterlacer laufen lassen und 30fps progressiv ausgeben (oder vielleicht haben Sie einen Fernseher oder etwas, das im Interlaced-Modus angezeigt wird, so dass kein Deinterlacing stattfindet), es wird nur eine geringere Qualität haben und weniger Bandbreite benötigen. – mpr

Verwandte Themen