[Spice-devel] [spice-gtk v1] build-sys: requires gstreamer 1.9 or above

Marc-André Lureau marcandre.lureau at redhat.com
Wed Aug 2 12:19:37 UTC 2017



----- Original Message -----
> From: Victor Toso <me at victortoso.com>
> 
> The recent work on spice-gtk with Gstreamer for video stream is
> targeting hardware video acceleration. One of our main targets is
> intel-based hardware and for that the VAAPI elements from
> gstreamer-vaapi are necessary.
> 
> The gstreamer-vaapi project is maintained and released as part of
> GStreamer since 1.8 [0] and the auto detection for VAAPI elements
> based on client's hardware since 1.9 [1].
> 
> This patch removes checks for old GStreamer versions and request the
> 1.9.0 which is new enough for VAAPI. Note that we don't require the
> elements itself to be present on build time.
> 
> Also, at this moment:
> - Fedora 26 has 1.12
> - Fedora 25 has 1.10
> - Fedora 24 has 1.8 (EOL in August 8th)
> - Debian 9 has 1.10
> - RHEL 7 has 1.10
> 
> [0] See release notes from 1.8.0 (NEWS) 1abf889dddc75b4e4 (gstreamer)
> 
> [1] IRC chat on #gstreamer with Víctor M. Jáques
>    toso | ceyusa: hey, is there a way to verify if we can hw
>           decode using vaapi? some sort of api that translate
>           what vainfo and validate with gstreamer-vaapi maybe?
>    toso | s/what vainfo/the output of vainfo/
>  ceyusa | toso: using gstreamer-vaapi 1.9, only the available
>           decoder entries are registered
>  ceyusa | so, using a gst-inspect-1.0 you'll see only the
>           available decoders
>    toso | ceyusa: and the available decoders takes in
>           consideration my actual hw then?
>  ceyusa | toso: yes
>    toso | ceyusa: awesome
> 
> Signed-off-by: Victor Toso <victortoso at redhat.com>

ack

> ---
>  configure.ac              |  2 +-
>  src/channel-display-gst.c | 36 ------------------------------------
>  2 files changed, 1 insertion(+), 37 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 8fd525b..2899217 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -271,7 +271,7 @@ AC_ARG_ENABLE([gstvideo],
>    [enable_gstvideo="auto"])
>  AS_IF([test "x$enable_gstvideo" != "xno"],
>        [SPICE_CHECK_GSTREAMER(GSTVIDEO, 1.0,
> -         [gstreamer-1.0 gstreamer-base-1.0 gstreamer-app-1.0
> gstreamer-video-1.0],
> +         [gstreamer-1.0 > 1.9 gstreamer-base-1.0 gstreamer-app-1.0
> gstreamer-video-1.0],
>           [missing_gstreamer_elements=""
>            SPICE_CHECK_GSTREAMER_ELEMENTS($GST_INSPECT_1_0, [gst-plugins-base
>            1.0], [appsrc videoconvert appsink])
>            SPICE_CHECK_GSTREAMER_ELEMENTS($GST_INSPECT_1_0, [gst-plugins-good
>            1.0], [jpegdec vp8dec vp9dec])
> diff --git a/src/channel-display-gst.c b/src/channel-display-gst.c
> index d7f47d1..0bfae0b 100644
> --- a/src/channel-display-gst.c
> +++ b/src/channel-display-gst.c
> @@ -299,9 +299,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);
> @@ -314,7 +312,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)
> @@ -339,13 +336,11 @@ 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)
>  {
>      GstAppSinkCallbacks appsink_cbs = { NULL };
>      GstBus *bus;
> -#if GST_CHECK_VERSION(1,9,0)
>      GstElement *playbin, *sink;
>      SpiceGstPlayFlags flags;
>      GstCaps *caps;
> @@ -386,35 +381,6 @@ static gboolean create_pipeline(SpiceGstDecoder
> *decoder)
>      g_warn_if_fail(decoder->appsrc == NULL);
>      decoder->appsink = GST_APP_SINK(sink);
>      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
>  
>      appsink_cbs.new_sample = new_sample;
>      gst_app_sink_set_callbacks(decoder->appsink, &appsink_cbs, decoder,
>      NULL);
> @@ -542,13 +508,11 @@ 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);
>          return TRUE;
>      }
> -#endif
>  
>      /* ref() the frame data for the buffer */
>      frame->ref_data(frame->data_opaque);
> --
> 2.13.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