[Spice-devel] [PATCH spice-server v2 5/6] Compatibility for GStreamer 0.10 for test utility

Christophe Fergeau cfergeau at redhat.com
Tue Nov 8 16:10:23 UTC 2016


This seems unchanged from the previous version?
What I asked in
https://lists.freedesktop.org/archives/spice-devel/2016-October/032971.html
cannot be changed?

Christophe

On Fri, Oct 21, 2016 at 01:40:39PM +0100, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/tests/gst-test.c | 55 +++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 51 insertions(+), 4 deletions(-)
> 
> diff --git a/server/tests/gst-test.c b/server/tests/gst-test.c
> index 0a68d7d..38d0f1d 100644
> --- a/server/tests/gst-test.c
> +++ b/server/tests/gst-test.c
> @@ -54,6 +54,37 @@ typedef struct {
>      SpiceBitmap *bitmap;
>  } TestFrame;
>  
> +#ifdef HAVE_GSTREAMER_0_10
> +
> +#define VIDEOCONVERT "ffmpegcolorspace"
> +#define BGRx_CAPS "caps=video/x-raw-rgb,bpp=32,depth=24,blue_mask=-16777216,green_mask=16711680,red_mask=65280"
> +
> +typedef GstBuffer GstSample;
> +#define gst_sample_get_buffer(s) (s)
> +#define gst_sample_get_caps(s) GST_BUFFER_CAPS(s)
> +#define gst_sample_unref(s) gst_buffer_unref(s)
> +#define gst_app_sink_pull_sample(s) gst_app_sink_pull_buffer(s)
> +typedef struct {
> +    uint8_t *data;
> +} GstMapInfo;
> +#define GST_MAP_READ 1
> +static inline void
> +gst_buffer_unmap(GstBuffer *buffer, GstMapInfo *mapinfo)
> +{ }
> +
> +static inline gboolean
> +gst_buffer_map(GstBuffer *buffer, GstMapInfo *mapinfo, int flags)
> +{
> +    mapinfo->data = GST_BUFFER_DATA(buffer);
> +    return mapinfo->data != NULL;
> +}
> +#else
> +#define VIDEOCONVERT "videoconvert"
> +#define BGRx_CAPS "caps=video/x-raw,format=BGRx"
> +#define gst_bus_set_sync_handler(bus, proc, param) \
> +    gst_bus_set_sync_handler(bus, proc, param, NULL)
> +#endif
> +
>  typedef void (*SampleProc)(GstSample *sample, void *param);
>  
>  typedef struct {
> @@ -214,7 +245,11 @@ static const EncoderInfo encoder_infos[] = {
>      { "gstreamer:vp8",   gstreamer_encoder_new, SPICE_VIDEO_CODEC_TYPE_VP8,
>        "caps=video/x-vp8 ! vp8dec" },
>      { "gstreamer:h264",  gstreamer_encoder_new, SPICE_VIDEO_CODEC_TYPE_H264,
> +#ifdef HAVE_GSTREAMER_0_10
>        "! h264parse ! avdec_h264" },
> +#else
> +      "! h264parse ! ffdec_h264" },
> +#endif
>      { NULL, NULL }
>  };
>  
> @@ -491,7 +526,7 @@ create_pipeline(const char *desc, SampleProc sample_proc, void *param)
>      gst_app_sink_set_callbacks(pipeline->appsink, &appsink_cbs, pipeline, NULL);
>  
>      GstBus *bus = gst_element_get_bus(pipeline->gst_pipeline);
> -    gst_bus_set_sync_handler(bus, handle_pipeline_message, pipeline, NULL);
> +    gst_bus_set_sync_handler(bus, handle_pipeline_message, pipeline);
>      gst_object_unref(bus);
>  
>      if (gst_element_set_state(pipeline->gst_pipeline, GST_STATE_PLAYING) ==
> @@ -508,7 +543,7 @@ create_output_pipeline(const EncoderInfo *encoder, SampleProc sample_proc, void
>  {
>      gchar *desc =
>          g_strdup_printf("appsrc name=src is-live=true format=time max-bytes=0 block=true "
> -                        "%s ! videoconvert ! appsink name=sink caps=video/x-raw,format=BGRx"
> +                        "%s ! " VIDEOCONVERT " ! appsink name=sink " BGRx_CAPS
>                          " sync=false drop=false", encoder->caps_dec);
>  
>      TestPipeline *pipeline = create_pipeline(desc, sample_proc, param);
> @@ -525,7 +560,7 @@ static void
>  create_input_pipeline(const char *input_pipeline_desc, SampleProc sample_proc, void *param)
>  {
>      gchar *desc =
> -        g_strdup_printf("%s ! appsink name=sink caps=video/x-raw,format=BGRx"
> +        g_strdup_printf("%s ! appsink name=sink " BGRx_CAPS
>                          " sync=false drop=false", input_pipeline_desc);
>  
>      TestPipeline *pipeline = create_pipeline(desc, sample_proc, param);
> @@ -548,14 +583,26 @@ video_buffer_release(VideoBuffer *video_buffer)
>  static void
>  pipeline_send_raw_data(TestPipeline *pipeline, VideoBuffer *video_buffer)
>  {
> -    GstBuffer *buffer =
> +    GstBuffer *buffer;
> +#ifdef HAVE_GSTREAMER_0_10
> +    buffer = gst_buffer_new();
> +
> +    buffer->malloc_data = (void *) video_buffer;
> +    GST_BUFFER_FREE_FUNC(buffer) = (void (*)(void *)) video_buffer_release;
> +    GST_BUFFER_DATA(buffer) = video_buffer->data;
> +    GST_BUFFER_SIZE(buffer) = video_buffer->size;
> +#else
> +    buffer =
>          gst_buffer_new_wrapped_full(GST_MEMORY_FLAG_PHYSICALLY_CONTIGUOUS,
>                                      video_buffer->data, video_buffer->size,
>                                      0, video_buffer->size,
>                                      video_buffer, (void (*)(void*)) video_buffer_release);
> +#endif
>  
>      GST_BUFFER_DURATION(buffer) = GST_CLOCK_TIME_NONE;
> +#ifndef HAVE_GSTREAMER_0_10
>      GST_BUFFER_DTS(buffer) = GST_CLOCK_TIME_NONE;
> +#endif
>  
>      if (gst_app_src_push_buffer(pipeline->appsrc, buffer) != GST_FLOW_OK) {
>          g_printerr("GStreamer error: unable to push frame of size %u\n", video_buffer->size);
> -- 
> 2.7.4
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20161108/54289554/attachment.sig>


More information about the Spice-devel mailing list