pad: apply pad offset on sinkpad events too
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 19 May 2011 17:01:09 +0000 (19:01 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 19 May 2011 17:01:09 +0000 (19:01 +0200)
Apply the pad offset in the send_event() function as well.

gst/gstpad.c

index 0e0f1e9..a21a70c 100644 (file)
@@ -4755,7 +4755,6 @@ gst_pad_push_event (GstPad * pad, GstEvent * event)
       break;
     }
     case GST_EVENT_SEGMENT:
-    {
       /* check if we need to adjust the segment */
       if (offset != 0 && peerpad != NULL) {
         GstSegment segment;
@@ -4769,7 +4768,6 @@ gst_pad_push_event (GstPad * pad, GstEvent * event)
         event = gst_event_new_segment (&segment);
       }
       break;
-    }
     default:
       break;
   }
@@ -4927,6 +4925,24 @@ gst_pad_send_event (GstPad * pad, GstEvent * event)
       if (sticky) {
         guint idx;
 
+        switch (GST_EVENT_TYPE (event)) {
+          case GST_EVENT_SEGMENT:
+            if (pad->offset != 0) {
+              GstSegment segment;
+
+              /* copy segment values */
+              gst_event_copy_segment (event, &segment);
+              gst_event_unref (event);
+
+              /* adjust and make a new event with the offset applied */
+              segment.base += pad->offset;
+              event = gst_event_new_segment (&segment);
+            }
+            break;
+          default:
+            break;
+        }
+
         idx = GST_EVENT_STICKY_IDX (event);
         GST_LOG_OBJECT (pad, "storing sticky event %s at index %u",
             GST_EVENT_TYPE_NAME (event), idx);