[Spice-devel] [PATCH v1 2/2] display-gst: change compile to runtime check of vaapisink element
Victor Toso
victortoso at redhat.com
Sun Jan 27 13:46:36 UTC 2019
Hi,
On Sun, Jan 27, 2019 at 06:25:18AM -0500, Frediano Ziglio wrote:
> >
> > From: Victor Toso <me at victortoso.com>
> >
> > Runtime check is better fit to enable/disable vaapisink. For that, use
> > spice_check_gst_plugin_version() from previous commit.
> >
> > Signed-off-by: Victor Toso <victortoso at redhat.com>
> > ---
> > src/channel-display-gst.c | 25 +++++++++++--------------
> > 1 file changed, 11 insertions(+), 14 deletions(-)
> >
> > diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> > index 4272ade..ef578db 100644
> > --- a/src/channel-display-gst.c
> > +++ b/src/channel-display-gst.c
> > @@ -21,6 +21,7 @@
> > #include "spice-common.h"
> > #include "spice-channel-priv.h"
> >
> > +#include "spice-session-priv.h"
> > #include "channel-display-priv.h"
> >
> > #include <gst/gst.h>
> > @@ -431,6 +432,7 @@ static gboolean create_pipeline(SpiceGstDecoder *decoder)
> > GstElement *playbin, *sink;
> > SpiceGstPlayFlags flags;
> > GstCaps *caps;
> > + GError *err = NULL;
> >
> > playbin = gst_element_factory_make("playbin", "playbin");
> > if (playbin == NULL) {
> > @@ -461,29 +463,24 @@ static gboolean create_pipeline(SpiceGstDecoder
> > *decoder)
> > NULL);
> >
> > decoder->appsink = GST_APP_SINK(sink);
> > - } else {
> > + } else if (!spice_check_gst_plugin_version("vaapisink", 1, 14, 0, &err))
> > {
> > + GstPluginFeature *vaapisink;
>
> I would update the style and declare and initialise on the same
> statement.
> Time to move to a more C99 style, no reason to stick to C89.
Right, I don't mind.
> > +
> > /* handle has received, it means playbin will render directly into
> > * widget using the gstvideooverlay interface instead of app-sink.
> > */
> > SPICE_DEBUG("Video is presented using gstreamer's GstVideoOverlay
> > interface");
> >
> > -#if !GST_CHECK_VERSION(1,14,0)
> > /* Avoid using vaapisink if exist since vaapisink could be
> > * buggy when it is combined with playbin. changing its rank to
> > * none will make playbin to avoid of using it.
> > */
> > - GstRegistry *registry = NULL;
> > - GstPluginFeature *vaapisink = NULL;
> > -
> > - registry = gst_registry_get();
> > - if (registry) {
> > - vaapisink = gst_registry_lookup_feature(registry, "vaapisink");
> > - }
> > - if (vaapisink) {
> > - gst_plugin_feature_set_rank(vaapisink, GST_RANK_NONE);
> > - gst_object_unref(vaapisink);
> > - }
> > -#endif
> > + vaapisink = gst_registry_lookup_feature(gst_registry_get(),
> > "vaapisink");
>
> It seems every time you call spice_check_gst_plugin_version you
> are going to use the plugin feature pointer, maybe
> spice_check_gst_plugin_version should return the pointer if
> successful.
Sure, i'll send a v2 series soon.
> Note that assuming that gst_registry_lookup_feature will return
> not NULL is racy and can lead to crashes, this would prevent
> this bug (although rare).
> > + gst_plugin_feature_set_rank(vaapisink, GST_RANK_NONE);
> > + g_clear_object(&vaapisink);
> > + } else if (err != NULL) {
> > + g_warning("Failure while checking vaapisink version: %s",
> > err->message);
> > + g_clear_error(&err);
> > }
> >
> > g_signal_connect(playbin, "deep-element-added",
> > G_CALLBACK(deep_element_added_cb), decoder);
>
> Frediano
Cheers,
-------------- 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/20190127/29a751de/attachment.sig>
More information about the Spice-devel
mailing list