/* 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; }