gdkpixbufoverlay: Fixing x and y offset computation
authorJagadish <jagadishkamathk@gmail.com>
Wed, 26 Oct 2016 07:16:28 +0000 (12:46 +0530)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 1 Nov 2016 18:09:32 +0000 (20:09 +0200)
While computing the x and y offsets, it's the video resolution and
resized overlay resolution to be used instead of actual overlay image
resoltuion. Due to this, the overlay image used to get wrongly overlayed
in undesired location

https://bugzilla.gnome.org/show_bug.cgi?id=757292

ext/gdk_pixbuf/gstgdkpixbufoverlay.c

index 85421dbcba66dc60bdd2d124b16bc542d32f3344..b76509189ea0b15ab35aab133e830206e565d2d8 100644 (file)
@@ -557,20 +557,6 @@ gst_gdk_pixbuf_overlay_update_composition (GstGdkPixbufOverlay * overlay)
 
   positioning_mode = overlay->positioning_mode;
 
-  if (positioning_mode == GST_GDK_PIXBUF_POSITIONING_PIXELS_ABSOLUTE) {
-    x = overlay->offset_x + (overlay->relative_x * overlay_meta->width);
-    y = overlay->offset_y + (overlay->relative_y * overlay_meta->height);
-  } else {
-    x = overlay->offset_x < 0 ?
-        video_width + overlay->offset_x - overlay_meta->width +
-        (overlay->relative_x * overlay_meta->width) :
-        overlay->offset_x + (overlay->relative_x * overlay_meta->width);
-    y = overlay->offset_y < 0 ?
-        video_height + overlay->offset_y - overlay_meta->height +
-        (overlay->relative_y * overlay_meta->height) :
-        overlay->offset_y + (overlay->relative_y * overlay_meta->height);
-  }
-
   width = overlay->overlay_width;
   if (width == 0)
     width = overlay_meta->width;
@@ -579,6 +565,20 @@ gst_gdk_pixbuf_overlay_update_composition (GstGdkPixbufOverlay * overlay)
   if (height == 0)
     height = overlay_meta->height;
 
+  if (positioning_mode == GST_GDK_PIXBUF_POSITIONING_PIXELS_ABSOLUTE) {
+    x = overlay->offset_x + (overlay->relative_x * width);
+    y = overlay->offset_y + (overlay->relative_y * height);
+  } else {
+    x = overlay->offset_x < 0 ?
+        video_width + overlay->offset_x - width +
+        (overlay->relative_x * video_width) :
+        overlay->offset_x + (overlay->relative_x * video_width);
+    y = overlay->offset_y < 0 ?
+        video_height + overlay->offset_y - height +
+        (overlay->relative_y * video_height) :
+        overlay->offset_y + (overlay->relative_y * video_height);
+  }
+
   GST_DEBUG_OBJECT (overlay, "overlay image dimensions: %d x %d, alpha=%.2f",
       overlay_meta->width, overlay_meta->height, overlay->alpha);
   GST_DEBUG_OBJECT (overlay, "properties: x,y: %d,%d (%g%%,%g%%) - WxH: %dx%d",