OpenGL renderer window..

Matthew Waters ystreet00 at gmail.com
Sat Feb 10 04:01:22 UTC 2018


On 10/02/18 10:29, Hans Hony wrote:
> Matt,
> Thanks for the response.
>
> I'm not sure I follow.. I already have an instance of Glib.MainLoop
> for the pipeline to run already.
>
> This is constructed on the main thread just after Gst.init(None) is
> called.
> But.. I am running GLib.MainLoop.run in it's own thread - is this okay?
> That Thread is started from the main application, just before the
> pipeline is started.

Unfortunately, no.  The CFRunLoop must be running on the main thread,
otherwise this will not work.

Cheers
-Matt

> What I have tried so far:
> import gi gi.require_version('GstGL', '1.0') from gi.repository import
> GstGL
> self._context = Gst.Context.new(GstGL.GL_DISPLAY_CONTEXT_TYPE, True)
> self._gldisplay = GstGL.GLDisplay() self._gldisplay.new()
> self._glwindow = self._gldisplay.create_window() self._glwindow.show()
> self._glcontext = GstGL.GLContext.new(self._gldisplay)
> GstGL.context_set_gl_display(self._context, self._gldisplay)
> outputsink = gst_elem.make('glimagesink')
> outputsink.set_context(self._context) print('----- context: %s' %
> str(outputsink.get_property('context')))
>
> What I notice is that the constructed Element 'glimagesink' has a
> context property which returns 'None' after construction.
>
> I can see that the python rocket bouncing.. so it's attempting to kick
> the display.. but no window.
>
> Do I need to override something with the GST_MESSAGE_NEED_CONTEXT,
> perhaps?
>
> I have attempted to connect this on the bus 'message::need-context',
> but get no signal..
>
>
>
> On Thu, Feb 8, 2018 at 1:21 AM, Matthew Waters <ystreet00 at gmail.com
> <mailto:ystreet00 at gmail.com>> wrote:
>
>     Mac OS X is special in that a CFRunLoop is required to be running
>     on the main thread in order for glimagesink (and other UI
>     operations) to perform correctly.
>
>     That either means you need to run one yourself, use a toolkit that
>     runs one or run a GMainLoop.
>
>     Running your gst-launch-1.0 command with GST_DEBUG=gl*:7 would
>     give you more information about what GStreamer is attempting to
>     do, specifically around
>     https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m#n105
>     <https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m#n105>.
>
>     On 08/02/18 06:49, Hans Hony wrote:
>>     I have a question about launching a simple video pipeline using
>>     'glimagesink' with the python3 gi.repository.Gst.ElementFactory..
>>
>>     On Mac OSX I can launch my pipeline with custom plugin:
>>     gst-launch-1.0 filesrc <avi> ! decodebin ! queue !
>>     my_custom_plugin <props> ! autovideosink
>>
>>     The output a default window titled 'OpenGL renderer'.. which I
>>     assume is gstglwindow_cocoa.m
>>     <https://github.com/GStreamer/gst-plugins-bad/blob/1.12/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m#L466> from
>>     gst-plugins-bad.. ?
>>
>>     Likewise, 'glimagesink' will also open the 'OpenGL renderer'
>>     window when used in a bash gst-launch-1.0 command in the same way
>>     as 'autovideosink'. Also I notice when I launch the pipeline
>>     under bash, I can see:
>>
>>         Setting pipeline to PAUSED ...
>>
>>         Pipeline is PREROLLING ...
>>
>>         Got context from element 'sink': gst.gl.GLDisplay=context,
>>     gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayCocoa\)\
>>     gldisplaycocoa0";
>>
>>
>>
>>     However, when I launch the pipeline for
>>     gi.repository.Gst.ElementFactory (in python3) I have issues:
>>
>>      1. It fails horribly for ElementFactory.make('autovideosink')
>>         with /Illegal instruction: 4/ when NULL to READY is
>>         propagated.. so to fix that I just didn't use 'autovideosink'..
>>
>>      2. It will propagate PLAY for
>>         ElementFactory.make('glimagesink').. but nothing actually
>>         plays.. probably because the chain isn't correct
>>
>>      3. I cannot figure out how to hook the 'sync_message' to an OSX
>>         window object with glimagesink from python?!? I see
>>         information in gst-inspect-1.0 glimagesink.. but I can't find
>>         any examples to do this specifically.
>>
>>      4. Secondarily, I see that I can use
>>         gi.repository.GstGL.GLDisplay().new() to create:
>>             <__gi__.GstGLDisplayCocoa object at 0x10e05eb88
>>         (GstGLDisplayCocoa at 0x7fc7ba9439c0)>
>>         .. which is seemingly what I want!
>>
>>      5. How to do hook this object up to 'glimagesink' ??
>>
>
>     You don't need to hook this up to GStreamer, it will create that
>     automatically.
>
>>      1. Finally, do I need to add:
>>           pipeline.get_bus().connect('sync-message::element',
>>         on_sync_message) with a function on_sync_message(bus, msg) ?
>>
>
>     This shouldn't be needed.
>
>>     From the Gtk examples I found there was a function which would
>>     update the GUI.. I assume that I would need to do this as well..
>>     but the syntax is not clear immediately.
>>     More specifically:
>>     defon_sync_message(bus, msg): ifmsg.get_structure().get_name()
>>     =='prepare-window-handle':
>>     sink =msg.src
>>     sink.set_window_handle(<window_handle>)
>>     sink.set_render_rectangle(0, 0, <window.width>, <window.height>)
>
>     This is for embedding glimagesink's output inside another application.
>
>>     Overall, I want to know:
>>
>>      1. How is it that gst-launch-1.0 works so well?
>>
>
>     Because, glimagesink is generally created and set to READY on the
>     main thread. Otherwise, happy accident.
>
>>      1. How can I use that functionality in my python3 gi code?
>>
>
>     Run a CFRunLoop/GMainLoop on the main thread.
>
>>      1. How can I add another element to trigger that
>>         force-aspect-ratio window magic?
>>
>
>     I'm not sure what you mean by this.
>
>     Cheers
>     -Matt
>
>>     $ brew list --versions | grep gst
>>
>>     gst-plugins-bad 1.12.3
>>
>>     gst-plugins-base 1.12.3
>>
>>     gst-plugins-good 1.12.3
>>
>>     gst-plugins-ugly 1.12.3
>>
>>     gst-python 1.12.3
>>
>>     gst-rtsp-server 1.12.3
>>
>>     gstreamer 1.12.3
>>
>>
>>     Thanks,
>>     Hans
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20180210/eb951552/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 516 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20180210/eb951552/attachment-0001.sig>


More information about the gstreamer-devel mailing list