From 04d3b8290698e41034809e8baec11622ca128243 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sun, 16 Sep 2007 19:40:31 +0000 Subject: 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. --- gst/rtpmanager/rtpjitterbuffer.h | 46 +++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 8 deletions(-) (limited to 'gst/rtpmanager/rtpjitterbuffer.h') 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 @@ -34,15 +34,39 @@ typedef struct _RTPJitterBufferClass RTPJitterBufferClass; #define RTP_IS_JITTER_BUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),RTP_TYPE_JITTER_BUFFER)) #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__ */ -- cgit v1.2.1