[Spice-devel] [PATCH spice-gtk v3] streaming: make draw-area visible on MJPEG encoder creation

Snir Sheriber ssheribe at redhat.com
Tue Sep 3 06:11:57 UTC 2019


Hi,

On 9/2/19 6:50 PM, Kevin Pouget wrote:
> This patch allows the MJPEG encoder to inform the spice-widget that
> its video drawing area (draw-area) should be made visible on screen.
>
> This is required to switch from GST video decoding to native MJPEG
> decoding, otherwise the gst-area remained on top and the MJPEG video
> stream was never shown.
>
> Signed-off-by: Kevin Pouget <kpouget at redhat.com>
> ---
> v2 -> v3: address Snir comments:
>
> - comment about NULL in the signal description
> - move 'if (pipeline_ptr == NULL) ...' outside  of 'if defined(GDK_WINDOWING_X11)'
>
> regarding EGL note, it might be something like this:
>
>> gtk_stack_set_visible_child_name(d->stack, egl_enabled(d) ?
>>                                             "gl-area" : "draw-area");


Yes, but AFAIU this should never happen

So I'll ack also without it.

Snir.

> but it's just a wild guess!
>
> ---
>   src/channel-display-mjpeg.c |  3 +++
>   src/channel-display.c       |  4 +++-
>   src/spice-widget.c          | 11 +++++++++--
>   3 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/src/channel-display-mjpeg.c b/src/channel-display-mjpeg.c
> index 647d31b..636a98b 100644
> --- a/src/channel-display-mjpeg.c
> +++ b/src/channel-display-mjpeg.c
> @@ -300,5 +300,8 @@ VideoDecoder* create_mjpeg_decoder(int codec_type, display_stream *stream)
>
>       /* All the other fields are initialized to zero by g_new0(). */
>
> +    /* makes the draw-area visible */
> +    hand_pipeline_to_widget(stream, NULL);
> +
>       return (VideoDecoder*)decoder;
>   }
> diff --git a/src/channel-display.c b/src/channel-display.c
> index 59c809d..cd87c7c 100644
> --- a/src/channel-display.c
> +++ b/src/channel-display.c
> @@ -485,7 +485,9 @@ static void spice_display_channel_class_init(SpiceDisplayChannelClass *klass)
>        *
>        * The #SpiceDisplayChannel::gst-video-overlay signal is emitted when
>        * pipeline is ready and can be passed to widget to register GStreamer
> -     * overlay interface and other GStreamer callbacks.
> +     * overlay interface and other GStreamer callbacks. If the pipeline
> +     * pointer is NULL, the drawing area of the native renderer is set
> +     * visible.
>        *
>        * Returns: %TRUE if the overlay is being set
>        *
> diff --git a/src/spice-widget.c b/src/spice-widget.c
> index a9ba1f1..d73e02f 100644
> --- a/src/spice-widget.c
> +++ b/src/spice-widget.c
> @@ -2780,14 +2780,20 @@ static void gst_size_allocate(GtkWidget *widget, GdkRectangle *a, gpointer data)
>   }
>
>   /* This callback should pass to the widget a pointer of the pipeline
> - * so that we can set pipeline and overlay related calls from here.
> + * so that we can the set GST pipeline and overlay related calls from
> + * here.  If the pipeline pointer is NULL, the drawing area of the
> + * native renderer is set visible.
>    */
>   static gboolean set_overlay(SpiceChannel *channel, void* pipeline_ptr, SpiceDisplay *display)
>   {
> -#if defined(GDK_WINDOWING_X11)
>       SpiceDisplayPrivate *d = display->priv;
>
> +    if (pipeline_ptr == NULLg0) {
> +        gtk_stack_set_visible_child_name(d->stack, "draw-area");
> +        return true;
> +    }
> +
> +#if defined(GDK_WINDOWING_X11)
>       /* GstVideoOverlay is currently used only under x */
>       if (!g_getenv("DISABLE_GSTVIDEOOVERLAY") &&
>           GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
> --
> 2.21.0
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list