video-source: Make sure to set framepositionner zorder when creating it
authorThibault Saunier <tsaunier@gnome.org>
Wed, 2 Sep 2015 15:58:33 +0000 (17:58 +0200)
committerThibault Saunier <tsaunier@gnome.org>
Wed, 2 Sep 2015 18:42:50 +0000 (20:42 +0200)
And fix a computation bug where we would be having mixing order
reversed between layers.

And make sure that the positionner does not mix up Transition handling
of the zorder

ges/ges-smart-video-mixer.c
ges/ges-smart-video-mixer.h
ges/ges-video-source.c
ges/ges-video-transition.c

index 3e939c6..246de91 100644 (file)
@@ -101,13 +101,13 @@ parse_metadata (GstPad * mixer_pad, GstPadProbeInfo * info,
     return GST_PAD_PROBE_OK;
   }
 
-  if (!self->no_alpha) {
-    g_object_set (mixer_pad, "alpha", meta->alpha, NULL);
+  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, "zorder", meta->zorder, "width", meta->width,
-      "height", meta->height, NULL);
+      meta->posy, "width", meta->width, "height", meta->height, NULL);
 
   return GST_PAD_PROBE_OK;
 }
index b0fd632..e4305ce 100644 (file)
@@ -54,7 +54,7 @@ struct _GESSmartMixer
   GMutex lock;
 
   GstCaps *caps;
-  gboolean no_alpha;
+  gboolean disable_zorder_alpha;
 
   gpointer _ges_reserved[GES_PADDING];
 };
index b0e05b1..4e18acd 100644 (file)
@@ -99,7 +99,7 @@ _set_priority (GESTimelineElement * element, guint32 priority)
 
   if (res && self->priv->positionner)
     g_object_set (self->priv->positionner, "zorder",
-        GES_TIMELINE_ELEMENT_PRIORITY (self), NULL);
+        G_MAXUINT - GES_TIMELINE_ELEMENT_PRIORITY (self), NULL);
 
   return res;
 }
@@ -136,6 +136,8 @@ ges_video_source_create_element (GESTrackElement * trksrc)
   /* That positionner will add metadata to buffers according to its
      properties, acting like a proxy for our smart-mixer dynamic pads. */
   positionner = gst_element_factory_make ("framepositionner", "frame_tagger");
+  g_object_set (positionner, "zorder",
+      G_MAXUINT - GES_TIMELINE_ELEMENT_PRIORITY (self), NULL);
 
   videoscale =
       gst_element_factory_make ("videoscale", "track-element-videoscale");
index 1ede5dc..4519879 100644 (file)
@@ -314,7 +314,7 @@ ges_video_transition_create_element (GESTrackElement * object)
 
   mixer = ges_smart_mixer_new (NULL);
   g_assert (mixer);
-  GES_SMART_MIXER (mixer)->no_alpha = TRUE;
+  GES_SMART_MIXER (mixer)->disable_zorder_alpha = TRUE;
   gst_bin_add (GST_BIN (topbin), mixer);
 
   priv->mixer_sinka =