transition: Better document the way alpha is computed for transitions

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/204>
This commit is contained in:
Thibault Saunier 2020-07-13 18:18:22 -04:00
parent 046e609a89
commit 6bf769c821
4 changed files with 16 additions and 16 deletions

View file

@ -208,12 +208,12 @@ ges_smart_mixer_get_mixer_pad (GESSmartMixer * self, GstPad ** mixerpad)
return sinkpad;
}
/* These metadata will get set by the upstream framepositioner element,
added in the video sources' bin */
static void
parse_metadata (GstPad * mixer_pad, GstBuffer * buf, GESSmartMixerPad * ghost)
set_pad_properties_from_positioner_meta (GstPad * mixer_pad, GstSample * sample,
GESSmartMixerPad * ghost)
{
GstFramePositionerMeta *meta;
GstBuffer *buf = gst_sample_get_buffer (sample);
GESSmartMixer *self = GES_SMART_MIXER (GST_OBJECT_PARENT (ghost));
meta =
@ -225,18 +225,18 @@ parse_metadata (GstPad * mixer_pad, GstBuffer * buf, GESSmartMixerPad * ghost)
return;
}
if (!self->disable_zorder_alpha) {
if (!self->is_transition) {
g_object_set (mixer_pad, "alpha", meta->alpha,
"zorder", meta->zorder, NULL);
} else {
gint64 stream_time;
gdouble transalpha;
GST_OBJECT_LOCK (ghost);
stream_time = gst_segment_to_stream_time (&ghost->segment, GST_FORMAT_TIME,
GST_BUFFER_PTS (buf));
GST_OBJECT_UNLOCK (ghost);
stream_time = gst_segment_to_stream_time (gst_sample_get_segment (sample),
GST_FORMAT_TIME, GST_BUFFER_PTS (buf));
/* When used in a transition we aggregate the alpha value value if the
* transition pad and the alpha value from upstream frame positioner */
if (GST_CLOCK_TIME_IS_VALID (stream_time))
gst_object_sync_values (GST_OBJECT (ghost), stream_time);
@ -377,12 +377,12 @@ compositor_sync_properties_with_meta (GstElement * compositor,
sample = gst_aggregator_peek_next_sample (GST_AGGREGATOR (compositor),
GST_AGGREGATOR_PAD (sinkpad));
if (!sample) {
GST_INFO_OBJECT (sinkpad, "No sample set!");
} else {
parse_metadata (sinkpad, gst_sample_get_buffer (sample),
GES_SMART_MIXER_PAD (info->ghostpad));
if (sample) {
set_pad_properties_from_positioner_meta (sinkpad,
sample, GES_SMART_MIXER_PAD (info->ghostpad));
gst_sample_unref (sample);
} else {
GST_INFO_OBJECT (sinkpad, "No sample set!");
}
pad_infos_unref (info);

View file

@ -53,7 +53,7 @@ struct _GESSmartMixer
GMutex lock;
GstCaps *caps;
gboolean disable_zorder_alpha;
gboolean is_transition;
gpointer _ges_reserved[GES_PADDING];
};

View file

@ -132,7 +132,7 @@ ges_pspec_hash (gconstpointer key_spec)
}
static gboolean
find_compositor (GstPluginFeatureFilter * feature, gpointer udata)
find_compositor (GstPluginFeature * feature, gpointer udata)
{
gboolean res = FALSE;
const gchar *klass;

View file

@ -354,7 +354,7 @@ ges_video_transition_create_element (GESTrackElement * object)
oconv, NULL);
mixer = ges_smart_mixer_new (NULL);
GES_SMART_MIXER (mixer)->disable_zorder_alpha = TRUE;
GES_SMART_MIXER (mixer)->is_transition = TRUE;
g_object_set (GES_SMART_MIXER (mixer)->mixer, "background", 3, NULL); /* transparent */
gst_bin_add (GST_BIN (topbin), mixer);