summaryrefslogtreecommitdiffstats
path: root/gst/rtpmanager/rtpjitterbuffer.h
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-09-16 19:40:31 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-09-16 19:40:31 +0000
commit04d3b8290698e41034809e8baec11622ca128243 (patch)
treedf6c408b0b15acbf31a1743d7ce7a882b47a9b7d /gst/rtpmanager/rtpjitterbuffer.h
parent51990d65dc103c9355bb83ef4bc75f7e1eae0ac4 (diff)
downloadgst-plugins-bad-04d3b8290698e41034809e8baec11622ca128243.tar.gz
gst-plugins-bad-04d3b8290698e41034809e8baec11622ca128243.tar.bz2
gst-plugins-bad-04d3b8290698e41034809e8baec11622ca128243.zip
gst/rtpmanager/gstrtpbin.c: Use lock to protect variable.
Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_set_property), (gst_rtp_bin_get_property): Use lock to protect variable. * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_class_init), (gst_jitter_buffer_sink_parse_caps), (gst_rtp_jitter_buffer_chain), (convert_rtptime_to_gsttime), (gst_rtp_jitter_buffer_loop): Reconstruct GST timestamp from RTP timestamps based on measured clock skew and sync offset. * gst/rtpmanager/rtpjitterbuffer.c: (rtp_jitter_buffer_init), (rtp_jitter_buffer_set_tail_changed), (rtp_jitter_buffer_set_clock_rate), (rtp_jitter_buffer_get_clock_rate), (calculate_skew), (rtp_jitter_buffer_insert), (rtp_jitter_buffer_peek): * gst/rtpmanager/rtpjitterbuffer.h: Measure clock skew. Add callback to be notfied when a new packet was inserted at the tail. * gst/rtpmanager/rtpsource.c: (rtp_source_init), (calculate_jitter), (rtp_source_send_rtp): * gst/rtpmanager/rtpsource.h: Remove clock skew detection, it's move to the jitterbuffer now.
Diffstat (limited to 'gst/rtpmanager/rtpjitterbuffer.h')
-rw-r--r--gst/rtpmanager/rtpjitterbuffer.h46
1 files changed, 38 insertions, 8 deletions
diff --git a/gst/rtpmanager/rtpjitterbuffer.h b/gst/rtpmanager/rtpjitterbuffer.h
index 8bff03c8..b67e265f 100644
--- a/gst/rtpmanager/rtpjitterbuffer.h
+++ b/gst/rtpmanager/rtpjitterbuffer.h
@@ -35,14 +35,38 @@ typedef struct _RTPJitterBufferClass RTPJitterBufferClass;
#define RTP_JITTER_BUFFER_CAST(src) ((RTPJitterBuffer *)(src))
/**
+ * RTPTailChanged:
+ * @jbuf: an #RTPJitterBuffer
+ * @user_data: user data specified when registering
+ *
+ * This callback will be called when the tail buffer of @jbuf changed.
+ */
+typedef void (*RTPTailChanged) (RTPJitterBuffer *jbuf, gpointer user_data);
+
+/**
* RTPJitterBuffer:
*
* A JitterBuffer in the #RTPSession
*/
struct _RTPJitterBuffer {
- GObject object;
+ GObject object;
+
+ GQueue *packets;
- GQueue *packets;
+ gint clock_rate;
+
+ /* for calculating skew */
+ GstClockTime base_time;
+ GstClockTime base_rtptime;
+ guint64 ext_rtptime;
+ gint64 window[100];
+ guint window_pos;
+ gboolean window_filling;
+ gint64 window_min;
+ gint64 skew;
+
+ RTPTailChanged tail_changed;
+ gpointer user_data;
};
struct _RTPJitterBufferClass {
@@ -52,14 +76,20 @@ struct _RTPJitterBufferClass {
GType rtp_jitter_buffer_get_type (void);
/* managing lifetime */
-RTPJitterBuffer* rtp_jitter_buffer_new (void);
+RTPJitterBuffer* rtp_jitter_buffer_new (void);
+
+void rtp_jitter_buffer_set_tail_changed (RTPJitterBuffer *jbuf, RTPTailChanged func,
+ gpointer user_data);
+
+void rtp_jitter_buffer_set_clock_rate (RTPJitterBuffer *jbuf, gint clock_rate);
+gint rtp_jitter_buffer_get_clock_rate (RTPJitterBuffer *jbuf);
-gboolean rtp_jitter_buffer_insert (RTPJitterBuffer *jbuf, GstBuffer *buf);
-GstBuffer * rtp_jitter_buffer_pop (RTPJitterBuffer *jbuf);
+gboolean rtp_jitter_buffer_insert (RTPJitterBuffer *jbuf, GstBuffer *buf, GstClockTime time);
+GstBuffer * rtp_jitter_buffer_pop (RTPJitterBuffer *jbuf);
-void rtp_jitter_buffer_flush (RTPJitterBuffer *jbuf);
+void rtp_jitter_buffer_flush (RTPJitterBuffer *jbuf);
-guint rtp_jitter_buffer_num_packets (RTPJitterBuffer *jbuf);
-guint32 rtp_jitter_buffer_get_ts_diff (RTPJitterBuffer *jbuf);
+guint rtp_jitter_buffer_num_packets (RTPJitterBuffer *jbuf);
+guint32 rtp_jitter_buffer_get_ts_diff (RTPJitterBuffer *jbuf);
#endif /* __RTP_JITTER_BUFFER_H__ */