[Spice-devel] [spice-gtk v1 2/2] Require GStreamer 1.10 and above
Frediano Ziglio
fziglio at redhat.com
Thu Jan 24 08:14:20 UTC 2019
>
> From: Victor Toso <me at victortoso.com>
>
> Odd minor versions are for development version, which means that
> checks on 1.9.x should be considered for development while normal
> environments should be running the stable.
>
> Some timeline of stable releases:
>
> 1.14.4: Tue Oct 2 22:53:01 2018 +0100
> 1.14.0: Mon Mar 19 20:09:51 2018 +0000
> 1.12.0: Thu May 4 15:36:55 2017 +0300
> 1.10.0: Tue Nov 1 17:50:24 2016 +0200
>
> This patch reduces a bit the code paths in channel-display-gst.c
>
> CentOS 7.6 : 1.10.4
> Fedora 27 : 1.12.5
> Fedora 28-30 : 1.14.x
> Debian 9 (Stretch) : 1.10.4
>
> Signed-off-by: Victor Toso <victortoso at redhat.com>
It sounds reasonable.
I checked repology and it's hard to find some using older releases.
Acked-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> configure.ac | 9 +++++----
> meson.build | 4 +++-
> src/channel-display-gst.c | 36 ------------------------------------
> 3 files changed, 8 insertions(+), 41 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 2f63422..7dab0be 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -215,8 +215,9 @@ AS_IF([test "x$enable_pulse" != "xno"],
> ])
> AM_CONDITIONAL([HAVE_PULSE], [test "x$enable_pulse" = "xyes"])
>
> +GST_REQ="1.10"
> SPICE_CHECK_GSTREAMER(GSTAUDIO, 1.0,
> - [gstreamer-1.0 gstreamer-base-1.0 gstreamer-app-1.0
> gstreamer-audio-1.0],
> + [gstreamer-1.0 >= $GST_REQ gstreamer-base-1.0 >= $GST_REQ
> gstreamer-app-1.0 >= $GST_REQ gstreamer-audio-1.0 >= $GST_REQ],
> [SPICE_CHECK_GSTREAMER_ELEMENTS($GST_INSPECT_1_0,
> [gst-plugins-base 1.0], [audioconvert audioresample appsink])
> SPICE_CHECK_GSTREAMER_ELEMENTS($GST_INSPECT_1_0,
> @@ -224,10 +225,10 @@ SPICE_CHECK_GSTREAMER(GSTAUDIO, 1.0,
> AS_IF([test x"$missing_gstreamer_elements" = "xyes"],
> SPICE_WARNING([The GStreamer 1.0 audio backend can be built but may
> not work.]))
> ],
> - [AC_MSG_ERROR([Required GStreamer packages missing])])
> + [AC_MSG_ERROR([Required GStreamer packages missing or system version is
> below $GST_REQ])])
>
> SPICE_CHECK_GSTREAMER(GSTVIDEO, 1.0,
> - [gstreamer-1.0 gstreamer-base-1.0 gstreamer-app-1.0
> gstreamer-video-1.0],
> + [gstreamer-1.0 >= $GST_REQ gstreamer-base-1.0 >= $GST_REQ
> gstreamer-app-1.0 >= $GST_REQ gstreamer-video-1.0 >= $GST_REQ],
> [missing_gstreamer_elements=""
> SPICE_CHECK_GSTREAMER_ELEMENTS($GST_INSPECT_1_0,
> [gst-plugins-base 1.0], [appsrc videoconvert appsink])
> @@ -240,7 +241,7 @@ SPICE_CHECK_GSTREAMER(GSTVIDEO, 1.0,
> AS_IF([test x"$missing_gstreamer_elements" = "xyes"],
> SPICE_WARNING([The GStreamer video decoder can be built but may not
> work.]))
> ],
> - [AC_MSG_ERROR([Required GStreamer packages missing])])
> + [AC_MSG_ERROR([Required GStreamer packages missing or system version is
> below $GST_REQ])])
>
> AC_ARG_ENABLE([builtin-mjpeg],
> AS_HELP_STRING([--enable-builtin-mjpeg], [Enable the builtin mjpeg video
> decoder @<:@default=yes@:>@]),
> diff --git a/meson.build b/meson.build
> index 70dd318..5f39ff4 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -166,9 +166,11 @@ if d.found()
> spice_gtk_has_pulse = true
> endif
>
> +gstreamer_version = '1.10'
> +gstreamer_version_info = '>= @0@'.format(gstreamer_version)
> deps = ['gstreamer-1.0', 'gstreamer-base-1.0', 'gstreamer-app-1.0',
> 'gstreamer-audio-1.0', 'gstreamer-video-1.0']
> foreach dep : deps
> - spice_glib_deps += dependency(dep)
> + spice_glib_deps += dependency(dep, version: gstreamer_version_info)
> endforeach
>
> # builtin-mjpeg
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index 2b42053..5483755 100644
> --- a/src/channel-display-gst.c
> +++ b/src/channel-display-gst.c
> @@ -352,9 +352,7 @@ static gboolean handle_pipeline_message(GstBus *bus,
> GstMessage *msg, gpointer v
> gst_opts[decoder->base.codec_type].name);
> GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(decoder->pipeline),
> GST_DEBUG_GRAPH_SHOW_ALL
> -#if GST_CHECK_VERSION(1,5,1)
> | GST_DEBUG_GRAPH_SHOW_FULL_PARAMS
> -#endif
> | GST_DEBUG_GRAPH_SHOW_STATES,
> filename);
> g_free(filename);
> @@ -367,7 +365,6 @@ static gboolean handle_pipeline_message(GstBus *bus,
> GstMessage *msg, gpointer v
> return TRUE;
> }
>
> -#if GST_CHECK_VERSION(1,9,0)
> static void app_source_setup(GstElement *pipeline G_GNUC_UNUSED,
> GstElement *source,
> SpiceGstDecoder *decoder)
> @@ -392,12 +389,10 @@ static void app_source_setup(GstElement *pipeline
> G_GNUC_UNUSED,
> gst_caps_unref(caps);
> decoder->appsrc = GST_APP_SRC(gst_object_ref(source));
> }
> -#endif
>
> static gboolean create_pipeline(SpiceGstDecoder *decoder)
> {
> GstBus *bus;
> -#if GST_CHECK_VERSION(1,9,0)
> GstElement *playbin, *sink;
> SpiceGstPlayFlags flags;
> GstCaps *caps;
> @@ -469,35 +464,6 @@ static gboolean create_pipeline(SpiceGstDecoder
> *decoder)
>
> g_warn_if_fail(decoder->appsrc == NULL);
> decoder->pipeline = playbin;
> -#else
> - gchar *desc;
> - GError *err = NULL;
> -
> - /* - We schedule the frame display ourselves so set sync=false on
> appsink
> - * so the pipeline decodes them as fast as possible. This will also
> - * minimize the risk of frames getting lost when we rebuild the
> - * pipeline.
> - * - Set max-bytes=0 on appsrc so it does not drop frames that may be
> - * needed by those that follow.
> - */
> - desc = g_strdup_printf("appsrc name=src is-live=true format=time
> max-bytes=0 block=true "
> - "caps=%s ! %s ! videoconvert ! appsink name=sink
> "
> - "caps=video/x-raw,format=BGRx sync=false
> drop=false",
> - gst_opts[decoder->base.codec_type].dec_caps,
> - gst_opts[decoder->base.codec_type].dec_name);
> - SPICE_DEBUG("GStreamer pipeline: %s", desc);
> -
> - decoder->pipeline = gst_parse_launch_full(desc, NULL,
> GST_PARSE_FLAG_FATAL_ERRORS, &err);
> - g_free(desc);
> - if (!decoder->pipeline) {
> - spice_warning("GStreamer error: %s", err->message);
> - g_clear_error(&err);
> - return FALSE;
> - }
> -
> - decoder->appsrc =
> GST_APP_SRC(gst_bin_get_by_name(GST_BIN(decoder->pipeline), "src"));
> - decoder->appsink =
> GST_APP_SINK(gst_bin_get_by_name(GST_BIN(decoder->pipeline), "sink"));
> -#endif
>
> if (decoder->appsink) {
> GstAppSinkCallbacks appsink_cbs = { NULL };
> @@ -643,14 +609,12 @@ static gboolean
> spice_gst_decoder_queue_frame(VideoDecoder *video_decoder,
> return FALSE;
> }
>
> -#if GST_CHECK_VERSION(1,9,0)
> if (decoder->appsrc == NULL) {
> spice_warning("Error: Playbin has not yet initialized the Appsrc
> element");
> stream_dropped_frame_on_playback(decoder->base.stream);
> spice_frame_free(frame);
> return TRUE;
> }
> -#endif
>
> /* frame ownership is moved to the buffer */
> GstBuffer *buffer =
> gst_buffer_new_wrapped_full(GST_MEMORY_FLAG_PHYSICALLY_CONTIGUOUS,
More information about the Spice-devel
mailing list