[Spice-devel] [spice-gtk v2 1/3] session: initialize gstreamer once

Victor Toso victortoso at redhat.com
Mon Sep 9 11:11:12 UTC 2019


Hi,

On Mon, Sep 09, 2019 at 06:45:57AM -0400, Frediano Ziglio wrote:
> > 
> > From: Victor Toso <me at victortoso.com>
> > 
> > GStreamer is required since v0.36 with 83ab7ca "build-sys: drop
> > gstvideo option, make it required" in 2019-01-15 by Marc-André Lureau
> > <marcandre.lureau at redhat.com>
> > 
> > Both channel-display-gst.c and spice-gstaudio.c have to double check
> > that GStreamer was initialized with gst_init_check() but this can be
> > done once per SpiceSession and make those code path a little bit
> > lighter with simpler check gst_is_initialized()
> > 
> 
> Calling gstvideo_init or gst_is_initialized is not much difference,
> potentially calling gstvideo_init is faster as the function is in
> the same module (you can cache initialization done).
> This series seems to reuse code to initialize GStreamer but this
> can simply be achieved calling gstvideo_init from the audio side
> (or write a better initialization function).
> This patch increase SpiceSession code for not great reasons,
> SpiceSession does nothing direct with Gstreamer.

Well, the initial idea really was to init + deinit so it might be
lacking purpose now. So we can drop to avoid not important
discussions.

> > This first patch does initialize a SpiceSession on it's init. As the
> > current code path does not call gst_deinit(), we are not doing it so
> > here as well but it can be later optimized to be sure resources are
> > cleaned correctly on GStreamer side.
> > 
> This sentence is wrong. We can't do it.

Leftover from v1, thanks.

> > Signed-off-by: Victor Toso <victortoso at redhat.com>
> > ---
> >  src/spice-session.c | 22 ++++++++++++++++++++++
> >  1 file changed, 22 insertions(+)
> > 
> > diff --git a/src/spice-session.c b/src/spice-session.c
> > index d0d9e54..2f44816 100644
> > --- a/src/spice-session.c
> > +++ b/src/spice-session.c
> > @@ -21,6 +21,7 @@
> >  #include <gio/gnetworking.h>
> >  #include <gio/gio.h>
> >  #include <glib.h>
> > +#include <gst/gst.h>
> >  #ifdef G_OS_UNIX
> >  #include <gio/gunixsocketaddress.h>
> >  #endif
> > @@ -234,6 +235,7 @@
> > G_STATIC_ASSERT(G_N_ELEMENTS(_spice_image_compress_values) ==
> > SPICE_IMAGE_COMPRE
> >  
> >  static const gchar* spice_session_get_shared_dir(SpiceSession *session);
> >  static void spice_session_set_shared_dir(SpiceSession *session, const gchar
> >  *dir);
> > +static void spice_session_enable_gstreamer(SpiceSession *session);
> >  
> >  GType
> >  spice_image_compress_get_type (void)
> > @@ -295,6 +297,7 @@ static void spice_session_init(SpiceSession *session)
> >      s->images = cache_image_new((GDestroyNotify)pixman_image_unref);
> >      s->glz_window = glz_decoder_window_new();
> >      update_proxy(session, NULL);
> > +    spice_session_enable_gstreamer(session);
> >  }
> >  
> >  static void
> > @@ -2865,3 +2868,22 @@ gboolean
> > spice_session_set_migration_session(SpiceSession *session, SpiceSession
> >  
> >      return TRUE;
> >  }
> > +
> > +static void
> > +spice_session_enable_gstreamer(SpiceSession *session)
> > +{
> > +    g_return_if_fail(SPICE_IS_SESSION(session));
> 
> session argument is used only here,

Leftover from v1, thanks.

> to me it seems this utility function is more gstreamer related
> then SpiceSession related. The fact that you have to include
> gstreamer header just for that utility confirms to me that this
> utility should be in another, more gstreamer related, source
> file.

Not sure what would be the issue with initializing GStreamer on
Session init and everywhere else, that is, channel-display-gst
and spice-gstaudio, we only check that gst functions can be used.
Having multiple/different channels to potentially init gstreamer
seems weirder than initialize in the session object. Another way
to put it, gst_init_check() should have argc/argv arguments for
command line parsing and giving that to spice-display-gst and
spice-gstaudio  (...)

Maybe a spice_client_init() would make sense but I don't feel
this changes are really a requirement for a new API so, again,
just dropping it.

> > +    if (gst_is_initialized()) {
> > +        /* Either called by spice client or in previous SpiceSession */
> > +        return;
> > +    }
> > +
> > +    /* TODO: Provide argc and argv to GStreamer for command line filtering
> > on
> > +     * spice-gtk level, otherwise only applications that run gst_init()
> > first
> > +     * would filter command line options */
> > +    GError *err = NULL;
> > +    if (!gst_init_check(NULL, NULL, &err)) {
> > +        spice_warning("Disabling GStreamer video support: %s",
> > err->message);
> > +        g_clear_error(&err);
> > +    }
> > +}
> 
> Frediano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20190909/cf60b7d9/attachment-0001.sig>


More information about the Spice-devel mailing list