GLimagesink in a widget

classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

GLimagesink in a widget

Nuzut
So, I've been working with this for a while now. I'm trying to design a video streamer using the raspberry pi 2 and GLimagesink. I have the omx plugins working with hardware acceleration, and everything works fine when running two pipelines to transmit video back and forth. My issue comes in to play when I try to embed GLimagesink in a widget. I've used the example on this page: http://code.metager.de/source/xref/freedesktop/gstreamer/gst/plugins-gl/tests/examples/qt/videooverlay/videooverlay.cpp and everything compiled fine. It was just when I tried to run the program the videotestsrc was drawn in the middle of the screen and not on the widget. I've also tried QtGstreamer using the voip example and still haven't had any luck. if someone could point me in the right direction that would be awesome!

The library versions I'm using are: Qt5.5.1, Gstreamer(base, good, bad, omx, libav) all pulled from git. I'm willing to use other options if they're out there.

Thanks!
Reply | Threaded
Open this post in threaded view
|

Re: GLimagesink in a widget

Matthew Waters
On 12/08/15 21:08, Nuzut wrote:

> So, I've been working with this for a while now. I'm trying to design a video
> streamer using the raspberry pi 2 and GLimagesink. I have the omx plugins
> working with hardware acceleration, and everything works fine when running
> two pipelines to transmit video back and forth. My issue comes in to play
> when I try to embed GLimagesink in a widget. I've used the example on this
> page:
> http://code.metager.de/source/xref/freedesktop/gstreamer/gst/plugins-gl/tests/examples/qt/videooverlay/videooverlay.cpp
> and everything compiled fine. It was just when I tried to run the program
> the videotestsrc was drawn in the middle of the screen and not on the
> widget. I've also tried QtGstreamer using the voip example and still haven't
> had any luck. if someone could point me in the right direction that would be
> awesome!
>
> The library versions I'm using are: Qt5.5.1, Gstreamer(base, good, bad, omx,
> libav) all pulled from git. I'm willing to use other options if they're out
> there.
Hi,

The trend with recent GUI toolkit frameworks is to perform rendering
entirely client side and avoid actual windows (X11, wayland, or
otherwise).  This of course does not fit very well with GstVideoOverlay
and as a result, a number of sinks have been implemented for various
toolkits.  For Qt there is currently only a qmlglsink that will draw
into a qml based scene but no Qt Widget based element (yet!).  The
element has not been tested on the rpi however there would only need to
be a couple of changes in the element at most to make it work there as
well.  I currently don't have my rpi with me to be able to check if it
works or not.

Cheers
-Matt

> Thanks!
>
>
>
> --
> View this message in context: http://gstreamer-devel.966125.n4.nabble.com/GLimagesink-in-a-widget-tp4673122.html
> Sent from the GStreamer-devel mailing list archive at Nabble.com.
>



_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (484 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: GLimagesink in a widget

Nuzut
Well another option for me is to draw the video output on top of the widget (kind of like it's floating). Could you recommend something like that? I've tried GLimagesink and FBDevsink, neither will draw anywhere else other than the center of the screen. It'd be cool if I had a way of setting some properties and moving their windows around. It needs to be something hardware accelerated though.
Reply | Threaded
Open this post in threaded view
|

Re: Re: GLimagesink in a widget

Matthew Waters
On 14/08/15 18:09, Nuzut wrote:
> Well another option for me is to draw the video output on top of the widget
> (kind of like it's floating). Could you recommend something like that? I've
> tried GLimagesink and FBDevsink, neither will draw anywhere else other than
> the center of the screen. It'd be cool if I had a way of setting some
> properties and moving their windows around. It needs to be something
> hardware accelerated though.

Floating windows is not a great way to render a video into a GUI toolkit
as you will not be able to synchonize window moves or resizes properly.
You really need to have a sink that deals with how you want to use the
GL texture and the GUI toolkit specific operations for it.  Dispmanx
windows are created by default on the rpi in glimagesink which currently
will show up in the centre of the screen.  Adding properties is never
going to be cross platform as on wayland, you are unable to position
your window yourself.  You can try glimagesink with different window
systems, e.g. setting GST_GL_WINDOW=x11 or GST_GL_WINDOW=wayland for
example and see if that changes things for you.

-Cheers
Matt


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (484 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: GLimagesink in a widget

munezbn.dev
HI ..

I have Similar requirement with GTK. @OP any luck with above suggestion ?
Basically i want to embedd glimagesink into GTKDrawable so that i can use full-screen video and also key events for play/pause/quit etc. My code works fine on host machine for xvimagesink. But same doesnt work on RSPI3.


Thanks & Regards
Munez
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: GLimagesink in a widget

Matthew Waters
On 23/09/16 14:50, munezbn.dev wrote:
> HI ..
>
> I have Similar requirement with GTK. @OP any luck with above suggestion ?
> Basically i want to embedd glimagesink into GTKDrawable so that i can use
> full-screen video and also key events for play/pause/quit etc. My code works
> fine on host machine for xvimagesink. But same doesnt work on RSPI3.

Unfortunately, Gtk+ on the Raspberry Pi uses X11 (or wayland) where
glimagesink has to use dispmanx for access to OpenGL which are not
compatible.  You can use the gtkglsink element in GStreamer 1.8 which
uses Gtk+'s OpenGL widget in Gtk+ 3.20 to draw instead (at the cost of
software OpenGL rendering), alternatively, gtkglarea in Gtk+ 3.22 can
use GLES although I'm not sure if that's hooked up for the RPi's GLES stack.

Cheers
-Matt

> Thanks & Regards
> Munez


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (495 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: GLimagesink in a widget

munezbn.dev
Matthew Waters wrote
On 23/09/16 14:50, munezbn.dev wrote:
> HI ..
>
> I have Similar requirement with GTK. @OP any luck with above suggestion ?
> Basically i want to embedd glimagesink into GTKDrawable so that i can use
> full-screen video and also key events for play/pause/quit etc. My code works
> fine on host machine for xvimagesink. But same doesnt work on RSPI3.

Unfortunately, Gtk+ on the Raspberry Pi uses X11 (or wayland) where
glimagesink has to use dispmanx for access to OpenGL which are not
compatible.  You can use the gtkglsink element in GStreamer 1.8 which
uses Gtk+'s OpenGL widget in Gtk+ 3.20 to draw instead (at the cost of
software OpenGL rendering), alternatively, gtkglarea in Gtk+ 3.22 can
use GLES although I'm not sure if that's hooked up for the RPi's GLES stack.

Cheers
-Matt
Thanks for the reply Matt. Unfortunately I cannot enable GTK+ 3 version in Buildroot. It requires OPENGL/EGL based on mesa3d. But on raspberry pi we use native rpi-userland instead of MESA3D. There is separate thread on this topic.

Ok, Currently glimagesink displays the video in the center of the screen which is not stretched/scaled ( Not full screen) .. If i dont use GTK widget, and if i want to render video in full-screen using glimagesink , how should I proceed.  Can i use gl scaling elements ?

Thanks & Regards
Munez

Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: GLimagesink in a widget

Matthew Waters
On 25/09/16 14:35, munezbn.dev wrote:

> Matthew Waters wrote
>> On 23/09/16 14:50, munezbn.dev wrote:
>>> HI ..
>>>
>>> I have Similar requirement with GTK. @OP any luck with above suggestion ?
>>> Basically i want to embedd glimagesink into GTKDrawable so that i can use
>>> full-screen video and also key events for play/pause/quit etc. My code
>>> works
>>> fine on host machine for xvimagesink. But same doesnt work on RSPI3.
>> Unfortunately, Gtk+ on the Raspberry Pi uses X11 (or wayland) where
>> glimagesink has to use dispmanx for access to OpenGL which are not
>> compatible.  You can use the gtkglsink element in GStreamer 1.8 which
>> uses Gtk+'s OpenGL widget in Gtk+ 3.20 to draw instead (at the cost of
>> software OpenGL rendering), alternatively, gtkglarea in Gtk+ 3.22 can
>> use GLES although I'm not sure if that's hooked up for the RPi's GLES
>> stack.
>>
>> Cheers
>> -Matt
> Thanks for the reply Matt. Unfortunately I cannot enable GTK+ 3 version in
> Buildroot. It requires OPENGL/EGL based on mesa3d. But on raspberry pi we
> use native rpi-userland instead of MESA3D. There is separate thread on this
> topic.
FWIW, Mesa does contain a VC4 OpenGL driver for the RPi that you may be
much better off using.

> Ok, Currently glimagesink displays the video in the center of the screen
> which is not stretched/scaled ( Not full screen) .. If i dont use GTK
> widget, and if i want to render video in full-screen using glimagesink , how
> should I proceed.  Can i use gl scaling elements ?

That is one option that would give you an output surface that's fullscreen.

Cheers
-Matt

> Thanks & Regards
> Munez


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (495 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: GLimagesink in a widget

munezbn.dev
Matthew Waters wrote
On 25/09/16 14:35, munezbn.dev wrote:
> Matthew Waters wrote
>> On 23/09/16 14:50, munezbn.dev wrote:
>>> HI ..
>>>
>>> I have Similar requirement with GTK. @OP any luck with above suggestion ?
>>> Basically i want to embedd glimagesink into GTKDrawable so that i can use
>>> full-screen video and also key events for play/pause/quit etc. My code
>>> works
>>> fine on host machine for xvimagesink. But same doesnt work on RSPI3.
>> Unfortunately, Gtk+ on the Raspberry Pi uses X11 (or wayland) where
>> glimagesink has to use dispmanx for access to OpenGL which are not
>> compatible.  You can use the gtkglsink element in GStreamer 1.8 which
>> uses Gtk+'s OpenGL widget in Gtk+ 3.20 to draw instead (at the cost of
>> software OpenGL rendering), alternatively, gtkglarea in Gtk+ 3.22 can
>> use GLES although I'm not sure if that's hooked up for the RPi's GLES
>> stack.
>>
>> Cheers
>> -Matt
> Thanks for the reply Matt. Unfortunately I cannot enable GTK+ 3 version in
> Buildroot. It requires OPENGL/EGL based on mesa3d. But on raspberry pi we
> use native rpi-userland instead of MESA3D. There is separate thread on this
> topic.

FWIW, Mesa does contain a VC4 OpenGL driver for the RPi that you may be
much better off using.

> Ok, Currently glimagesink displays the video in the center of the screen
> which is not stretched/scaled ( Not full screen) .. If i dont use GTK
> widget, and if i want to render video in full-screen using glimagesink , how
> should I proceed.  Can i use gl scaling elements ?

That is one option that would give you an output surface that's fullscreen.

Cheers
-Matt

> Thanks & Regards
> Munez


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


signature.asc (495 bytes) <http://gstreamer-devel.966125.n4.nabble.com/attachment/4679762/0/signature.asc>
Thanks for pointing it out. I will try that and get back to you.
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: GLimagesink in a widget

munezbn.dev
HI Matt,

When i enabled MESA3D VC4 driver and disable userland, omenmax implementation will not be available hence gst-omx plugin will not build. For my player application i want to use gst-omx plugin on raspberry pie.

Since i am beginner in gstreamer i wanted to know below points.

1] if i have to use glcolorscale in code ( not command line ) i have to create glcolorscale element and link before sink element. But how do i set the resolution which i want to scale. I didn't find any properties in that element.

2] Is glcolorscale hardware accelerated ?

3] in my player, how can i get the screen resolution info so that i can scale the video to match the screen resolution.

All i want is to play the video in fullscreen on raspberry pi using gstreamer .. omxplayer by default plays in fullscreen.

Thanks & Regards
Munez
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: GLimagesink in a widget

munezbn.dev
Hi Matt,

The gst_gl_window_dispmanx_egl_set_window_handle() is empty and does nothing.

static void
gst_gl_window_dispmanx_egl_set_window_handle (GstGLWindow * window,
    guintptr handle)
{
}

Is this a bug ?  Because after i modified this function i was able to set custom window and move the window from app. But still no luck with fullscreen. Im still debugging

Thanks & Regards
Munez
Reply | Threaded
Open this post in threaded view
|

Re: Re: Re: Re: GLimagesink in a widget

munezbn.dev
This post was updated on .
munezbn.dev wrote
Hi Matt,

The gst_gl_window_dispmanx_egl_set_window_handle() is empty and does nothing.

static void
gst_gl_window_dispmanx_egl_set_window_handle (GstGLWindow * window,
    guintptr handle)
{
}

Is this a bug ?  Because after i modified this function i was able to set custom window and move the window from app. But still no luck with fullscreen. Im still debugging

Thanks & Regards
Munez

I raised a bug and proposed a patch. Kindly have look

https://bugzilla.gnome.org/show_bug.cgi?id=772608