/* These metadata will get set by the upstream framepositionner element,
   added in the video sources' bin */
static GstPadProbeReturn
parse_metadata (GstPad * mixer_pad, GstPadProbeInfo * info,
    GESSmartMixer * self)
{
  GstFramePositionnerMeta *meta;

  meta =
      (GstFramePositionnerMeta *) gst_buffer_get_meta ((GstBuffer *) info->data,
      gst_frame_positionner_meta_api_get_type ());

  if (!meta) {
    GST_WARNING ("The current source should use a framepositionner");
    return GST_PAD_PROBE_OK;
  }

  if (!self->disable_zorder_alpha) {
    g_object_set (mixer_pad, "alpha", meta->alpha,
        "zorder", meta->zorder, NULL);
  }

  g_object_set (mixer_pad, "xpos", meta->posx, "ypos",
      meta->posy, "width", meta->width, "height", meta->height, NULL);

  return GST_PAD_PROBE_OK;
}
static const GstMetaInfo *
gst_frame_positionner_get_info (void)
{
  static const GstMetaInfo *meta_info = NULL;

  if (g_once_init_enter (&meta_info)) {
    const GstMetaInfo *meta =
        gst_meta_register (gst_frame_positionner_meta_api_get_type (),
        "GstFramePositionnerMeta",
        sizeof (GstFramePositionnerMeta), (GstMetaInitFunction) NULL,
        (GstMetaFreeFunction) NULL,
        (GstMetaTransformFunction) gst_frame_positionner_meta_transform);
    g_once_init_leave (&meta_info, meta);
  }
  return meta_info;
}
/* These metadata will get set by the upstream framepositionner element,
   added in the video sources' bin */
static GstPadProbeReturn
parse_metadata (GstPad * mixer_pad, GstPadProbeInfo * info, gpointer unused)
{
  GstFramePositionnerMeta *meta;

  meta =
      (GstFramePositionnerMeta *) gst_buffer_get_meta ((GstBuffer *) info->data,
      gst_frame_positionner_meta_api_get_type ());

  if (!meta) {
    GST_WARNING ("The current source should use a framepositionner");
    return GST_PAD_PROBE_OK;
  }

  g_object_set (mixer_pad, "alpha", meta->alpha, "xpos", meta->posx, "ypos",
      meta->posy, "zorder", meta->zorder, NULL);

  return GST_PAD_PROBE_OK;
}