mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 10:10:32 +00:00
79800df8b6
Original commit message from CVS: * gst/rtpmanager/gstrtpbin.c: (calc_ntp_ns_base), (gst_rtp_bin_change_state), (new_payload_found), (create_send_rtp): Calculate and configure the NTP base time so that we can generate better NTP times in SR packets. Set caps on new ghostpad. * gst/rtpmanager/gstrtpjitterbuffer.c: (gst_rtp_jitter_buffer_loop): Clean debug statement. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (gst_rtp_session_init), (gst_rtp_session_set_property), (gst_rtp_session_get_property), (get_current_ntp_ns_time), (rtcp_thread), (gst_rtp_session_event_recv_rtp_sink), (gst_rtp_session_internal_links), (gst_rtp_session_chain_recv_rtp), (gst_rtp_session_event_send_rtp_sink), (gst_rtp_session_chain_send_rtp), (create_recv_rtp_sink), (create_send_rtp_sink): * gst/rtpmanager/gstrtpsession.h: Add ntp-ns-base property to convert running_time to NTP time. Handle NEWSEGMENT events on send and recv RTP pads so that we can calculate the running time and thus NTP time of the packets. Simplify getting the current NTP time using the pipeline clock. Implement internal links functions. Use the buffer timestamp to calculate the NTP time instead of the clock. * gst/rtpmanager/gstrtpssrcdemux.c: (create_demux_pad_for_ssrc), (gst_rtp_ssrc_demux_init), (gst_rtp_ssrc_demux_sink_event), (gst_rtp_ssrc_demux_chain), (gst_rtp_ssrc_demux_rtcp_chain), (gst_rtp_ssrc_demux_internal_links), (gst_rtp_ssrc_demux_src_query): * gst/rtpmanager/gstrtpssrcdemux.h: Implement internal links function. Calculate the diff between different streams, this might be used later to get the inter stream latency. * gst/rtpmanager/rtpsession.c: (rtp_session_send_rtp): Simple cleanup. * gst/rtpmanager/rtpsource.c: (rtp_source_init), (calculate_jitter), (rtp_source_send_rtp), (rtp_source_get_new_sr): Make the clock skew window a little bigger. Apply the clock skew to all buffers, not just one with a new timestamp. Calculate and debug sender clock drift. Use extended last timestamp to interpollate for SR reports.
76 lines
2.6 KiB
C
76 lines
2.6 KiB
C
/* GStreamer
|
|
* Copyright (C) <2007> Wim Taymans <wim@fluendo.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef __GST_RTP_SESSION_H__
|
|
#define __GST_RTP_SESSION_H__
|
|
|
|
#include <gst/gst.h>
|
|
|
|
#define GST_TYPE_RTP_SESSION \
|
|
(gst_rtp_session_get_type())
|
|
#define GST_RTP_SESSION(obj) \
|
|
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_SESSION,GstRtpSession))
|
|
#define GST_RTP_SESSION_CLASS(klass) \
|
|
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_SESSION,GstRtpSessionClass))
|
|
#define GST_IS_RTP_SESSION(obj) \
|
|
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_SESSION))
|
|
#define GST_IS_RTP_SESSION_CLASS(klass) \
|
|
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_SESSION))
|
|
#define GST_RTP_SESSION_CAST(obj) ((GstRtpSession *)(obj))
|
|
|
|
typedef struct _GstRtpSession GstRtpSession;
|
|
typedef struct _GstRtpSessionClass GstRtpSessionClass;
|
|
typedef struct _GstRtpSessionPrivate GstRtpSessionPrivate;
|
|
|
|
struct _GstRtpSession {
|
|
GstElement element;
|
|
|
|
/*< private >*/
|
|
GstPad *recv_rtp_sink;
|
|
GstSegment recv_rtp_seg;
|
|
GstPad *recv_rtcp_sink;
|
|
GstPad *send_rtp_sink;
|
|
GstSegment send_rtp_seg;
|
|
|
|
GstPad *recv_rtp_src;
|
|
GstPad *sync_src;
|
|
GstPad *send_rtp_src;
|
|
GstPad *send_rtcp_src;
|
|
|
|
GstRtpSessionPrivate *priv;
|
|
};
|
|
|
|
struct _GstRtpSessionClass {
|
|
GstElementClass parent_class;
|
|
|
|
/* signals */
|
|
GstCaps* (*request_pt_map) (GstRtpSession *sess, guint pt);
|
|
void (*clear_pt_map) (GstRtpSession *sess);
|
|
|
|
void (*on_new_ssrc) (GstRtpSession *sess, guint32 ssrc);
|
|
void (*on_ssrc_collision) (GstRtpSession *sess, guint32 ssrc);
|
|
void (*on_ssrc_validated) (GstRtpSession *sess, guint32 ssrc);
|
|
void (*on_bye_ssrc) (GstRtpSession *sess, guint32 ssrc);
|
|
void (*on_bye_timeout) (GstRtpSession *sess, guint32 ssrc);
|
|
void (*on_timeout) (GstRtpSession *sess, guint32 ssrc);
|
|
};
|
|
|
|
GType gst_rtp_session_get_type (void);
|
|
|
|
#endif /* __GST_RTP_SESSION_H__ */
|