gst-plugins-good: jitterbuffer: handle position query

Mark Nauwelaerts mnauw at kemper.freedesktop.org
Wed Mar 9 08:21:23 PST 2011


Module: gst-plugins-good
Branch: master
Commit: 6bc1aa0e594f9a0fe24020d8b4f2b6436347c92e
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=6bc1aa0e594f9a0fe24020d8b4f2b6436347c92e

Author: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
Date:   Wed Mar  9 16:51:00 2011 +0100

jitterbuffer: handle position query

---

 gst/rtpmanager/gstrtpjitterbuffer.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 9f08203..1d253eb 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -2129,6 +2129,35 @@ gst_rtp_jitter_buffer_query (GstPad * pad, GstQuery * query)
       }
       break;
     }
+    case GST_QUERY_POSITION:
+    {
+      GstClockTime start, last_out;
+      GstFormat fmt;
+
+      gst_query_parse_position (query, &fmt, NULL);
+      if (fmt != GST_FORMAT_TIME) {
+        res = gst_pad_query_default (pad, query);
+        break;
+      }
+
+      JBUF_LOCK (priv);
+      start = priv->npt_start;
+      last_out = priv->last_out_time;
+      JBUF_UNLOCK (priv);
+
+      GST_DEBUG_OBJECT (jitterbuffer, "npt start %" GST_TIME_FORMAT
+          ", last out %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
+          GST_TIME_ARGS (last_out));
+
+      if (GST_CLOCK_TIME_IS_VALID (start) && GST_CLOCK_TIME_IS_VALID (last_out)) {
+        /* bring 0-based outgoing time to stream time */
+        gst_query_set_position (query, GST_FORMAT_TIME, start + last_out);
+        res = TRUE;
+      } else {
+        res = gst_pad_query_default (pad, query);
+      }
+      break;
+    }
     default:
       res = gst_pad_query_default (pad, query);
       break;



More information about the gstreamer-commits mailing list