GStreamer dynamic compositor

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

GStreamer dynamic compositor

chrisplus3
Hi there,

I've got a question regarding my implementation of the following
specification:
-----------------------------------------------------------------------------------------------------

 - Display N videostreams in different views on a screen.
 - "N" = Number of streams. Will be specified by the number of cameras
available.
 - "view" = Compositor constellation (Dual-Split, Triple-Split,
Picture-in-picture, ...)
 - It should be possible to switch to a different view during runtime.


My current solution is:
-----------------------------------------------------------------------------------------------------

 - Create sink and compositor elements and adding + linking them together in
a class "Streamer"
 - Creating N objects of class "Camera", which contains ElementPtr for
source, depay, parse and decode.
 - Adding and linking each element of each "Camera" object to the above
pipeline, which results in multiple compositor pads.
 - Keeping a pointer to the respective compositor Pad in each "Camera"
object. (???)
 
 --> Upon changing to a different view, I simply:

 - Edit the properties of these Pads (xpos, ypos, ...) while the pipeline is
still running. (???)
 - Show hide the "Camera" object if neccessary (alpha property)


So my question is:
-----------------------------------------------------------------------------------------------------

Am I approaching the problem the right way? (Especially the "(???)" notated
points seem quite suspect to me...
Can I improve the performance of switching between two views (Since it's
still quite buggy and slow).


Thank you in advance!

Christian




--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer dynamic compositor

Michael MacIntosh
Hello,

Unless you want to record the composite image, then I would just display
each video in its own window, that way each camera has its own pipeline,
and if one camera stops or runs into an issue, it doesn't stop all of
the other cameras.  It would also allow you to show and hide / start and
stop the cameras independently.

Hope that helps!

On 2/2/2018 5:25 AM, chrisplus3 wrote:

> Hi there,
>
> I've got a question regarding my implementation of the following
> specification:
> -----------------------------------------------------------------------------------------------------
>
>   - Display N videostreams in different views on a screen.
>   - "N" = Number of streams. Will be specified by the number of cameras
> available.
>   - "view" = Compositor constellation (Dual-Split, Triple-Split,
> Picture-in-picture, ...)
>   - It should be possible to switch to a different view during runtime.
>
>
> My current solution is:
> -----------------------------------------------------------------------------------------------------
>
>   - Create sink and compositor elements and adding + linking them together in
> a class "Streamer"
>   - Creating N objects of class "Camera", which contains ElementPtr for
> source, depay, parse and decode.
>   - Adding and linking each element of each "Camera" object to the above
> pipeline, which results in multiple compositor pads.
>   - Keeping a pointer to the respective compositor Pad in each "Camera"
> object. (???)
>  
>   --> Upon changing to a different view, I simply:
>
>   - Edit the properties of these Pads (xpos, ypos, ...) while the pipeline is
> still running. (???)
>   - Show hide the "Camera" object if neccessary (alpha property)
>
>
> So my question is:
> -----------------------------------------------------------------------------------------------------
>
> Am I approaching the problem the right way? (Especially the "(???)" notated
> points seem quite suspect to me...
> Can I improve the performance of switching between two views (Since it's
> still quite buggy and slow).
>
>
> Thank you in advance!
>
> Christian
>
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer dynamic compositor

chrisplus3
Hi Michael,

thanks for the suggestion. I will try that.

Is it possible to change the sink properties of a running pipeline, e.g.:
 - window-width, window-height
 - window-x-coord, window-y-coord ...

Or do I need to pause the pipeline I want to change, and then change stuff ?



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer dynamic compositor

Michael MacIntosh
Use gst_video_overlay_set_window_handle to set the window handle to the
window you want to output to.  Note that this does not work with
autovideosink, it only works with "actual" video sinks.  But you should
be able to change the width and height of the window its in without pausing.

As a bit of warning, I have only done this on windows with Qt, but I
have been able to show/hide, move / resize the QWidgets I am rendering to.

Hope that helps!


On 2/5/2018 12:00 AM, chrisplus3 wrote:

> Hi Michael,
>
> thanks for the suggestion. I will try that.
>
> Is it possible to change the sink properties of a running pipeline, e.g.:
>   - window-width, window-height
>   - window-x-coord, window-y-coord ...
>
> Or do I need to pause the pipeline I want to change, and then change stuff ?
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: GStreamer dynamic compositor

chrisplus3
I've been able to change my application from one pipeline with compositor to
one pipeline for each stream.
But since I have neither a window manager, nor a display manager and I'm
operating on a iMX6, I cannot use gst_video_overlay_set_window_handle.

Right now I'm changing the imxg2dvideosink properties (window-width,
window-height, ...) while the pipeline is running.
The strange thing is, that sometimes there are smooth transitions upon
changing the properties and sometimes the screen blacks out for 1 or 2
seconds.

Anyway, thatnk you vm for your help !



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel