mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
gst/rtpmanager/gstrtpbin-marshal.list: Add marshaller for new action signal.
Original commit message from CVS: Patch by: Håvard Graff <havard dot graff at tandberg dot com> * gst/rtpmanager/gstrtpbin-marshal.list: Add marshaller for new action signal. * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_get_internal_session), (gst_rtp_bin_class_init): * gst/rtpmanager/gstrtpbin.h: Add action signal to retrieve the internal RTPSession object. * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_class_init), (gst_rtp_session_get_property), (gst_rtp_session_release_pad): Add property to access the internal RTPSession object. * gst/rtpmanager/rtpsession.c: (rtp_session_class_init), (check_collision): * gst/rtpmanager/rtpsession.h: Add action signal to retrieve an RTPSource object by SSRC. See #555396.
This commit is contained in:
parent
bd8f4b6c58
commit
3bebd53b6f
6 changed files with 85 additions and 16 deletions
|
@ -1,6 +1,7 @@
|
||||||
UINT:UINT
|
UINT:UINT
|
||||||
BOXED:UINT
|
BOXED:UINT
|
||||||
BOXED:UINT,UINT
|
BOXED:UINT,UINT
|
||||||
|
OBJECT:UINT
|
||||||
VOID:UINT,OBJECT
|
VOID:UINT,OBJECT
|
||||||
VOID:UINT,UINT
|
VOID:UINT,UINT
|
||||||
VOID:OBJECT,OBJECT
|
VOID:OBJECT,OBJECT
|
||||||
|
|
|
@ -119,6 +119,7 @@
|
||||||
|
|
||||||
#include "gstrtpbin-marshal.h"
|
#include "gstrtpbin-marshal.h"
|
||||||
#include "gstrtpbin.h"
|
#include "gstrtpbin.h"
|
||||||
|
#include "rtpsession.h"
|
||||||
#include "gstrtpsession.h"
|
#include "gstrtpsession.h"
|
||||||
#include "gstrtpjitterbuffer.h"
|
#include "gstrtpjitterbuffer.h"
|
||||||
|
|
||||||
|
@ -228,6 +229,7 @@ enum
|
||||||
{
|
{
|
||||||
SIGNAL_REQUEST_PT_MAP,
|
SIGNAL_REQUEST_PT_MAP,
|
||||||
SIGNAL_CLEAR_PT_MAP,
|
SIGNAL_CLEAR_PT_MAP,
|
||||||
|
SIGNAL_GET_INTERNAL_SESSION,
|
||||||
|
|
||||||
SIGNAL_ON_NEW_SSRC,
|
SIGNAL_ON_NEW_SSRC,
|
||||||
SIGNAL_ON_SSRC_COLLISION,
|
SIGNAL_ON_SSRC_COLLISION,
|
||||||
|
@ -734,6 +736,25 @@ gst_rtp_bin_clear_pt_map (GstRtpBin * bin)
|
||||||
GST_RTP_BIN_UNLOCK (bin);
|
GST_RTP_BIN_UNLOCK (bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static RTPSession *
|
||||||
|
gst_rtp_bin_get_internal_session (GstRtpBin * bin, guint session_id)
|
||||||
|
{
|
||||||
|
RTPSession *internal_session = NULL;
|
||||||
|
GstRtpBinSession *session;
|
||||||
|
|
||||||
|
GST_RTP_BIN_LOCK (bin);
|
||||||
|
GST_DEBUG_OBJECT (bin, "retrieving internal RTPSession object, index: %d",
|
||||||
|
session_id);
|
||||||
|
session = find_session_by_id (bin, (gint) session_id);
|
||||||
|
if (session) {
|
||||||
|
g_object_get (session->session, "internal-session", &internal_session,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
GST_RTP_BIN_UNLOCK (bin);
|
||||||
|
|
||||||
|
return internal_session;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_rtp_bin_propagate_property_to_jitterbuffer (GstRtpBin * bin,
|
gst_rtp_bin_propagate_property_to_jitterbuffer (GstRtpBin * bin,
|
||||||
const gchar * name, const GValue * value)
|
const gchar * name, const GValue * value)
|
||||||
|
@ -1290,6 +1311,18 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
|
||||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstRtpBinClass,
|
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstRtpBinClass,
|
||||||
clear_pt_map), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE,
|
clear_pt_map), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE,
|
||||||
0, G_TYPE_NONE);
|
0, G_TYPE_NONE);
|
||||||
|
/**
|
||||||
|
* GstRtpBin::get-internal-session:
|
||||||
|
* @rtpbin: the object which received the signal
|
||||||
|
* @id: the session id
|
||||||
|
*
|
||||||
|
* Request the internal RTPSession object as #GObject in session @id.
|
||||||
|
*/
|
||||||
|
gst_rtp_bin_signals[SIGNAL_GET_INTERNAL_SESSION] =
|
||||||
|
g_signal_new ("get-internal-session", G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstRtpBinClass,
|
||||||
|
get_internal_session), NULL, NULL, gst_rtp_bin_marshal_OBJECT__UINT,
|
||||||
|
RTP_TYPE_SESSION, 1, G_TYPE_UINT);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstRtpBin::on-new-ssrc:
|
* GstRtpBin::on-new-ssrc:
|
||||||
|
@ -1460,6 +1493,8 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
|
||||||
gstbin_class->handle_message = GST_DEBUG_FUNCPTR (gst_rtp_bin_handle_message);
|
gstbin_class->handle_message = GST_DEBUG_FUNCPTR (gst_rtp_bin_handle_message);
|
||||||
|
|
||||||
klass->clear_pt_map = GST_DEBUG_FUNCPTR (gst_rtp_bin_clear_pt_map);
|
klass->clear_pt_map = GST_DEBUG_FUNCPTR (gst_rtp_bin_clear_pt_map);
|
||||||
|
klass->get_internal_session =
|
||||||
|
GST_DEBUG_FUNCPTR (gst_rtp_bin_get_internal_session);
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (gst_rtp_bin_debug, "rtpbin", 0, "RTP bin");
|
GST_DEBUG_CATEGORY_INIT (gst_rtp_bin_debug, "rtpbin", 0, "RTP bin");
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
|
|
||||||
|
#include "rtpsession.h"
|
||||||
|
|
||||||
#define GST_TYPE_RTP_BIN \
|
#define GST_TYPE_RTP_BIN \
|
||||||
(gst_rtp_bin_get_type())
|
(gst_rtp_bin_get_type())
|
||||||
#define GST_RTP_BIN(obj) \
|
#define GST_RTP_BIN(obj) \
|
||||||
|
@ -63,9 +65,13 @@ struct _GstRtpBinClass {
|
||||||
GstBinClass parent_class;
|
GstBinClass parent_class;
|
||||||
|
|
||||||
/* get the caps for pt */
|
/* get the caps for pt */
|
||||||
GstCaps* (*request_pt_map) (GstRtpBin *rtpbin, guint session, guint pt);
|
GstCaps* (*request_pt_map) (GstRtpBin *rtpbin, guint session, guint pt);
|
||||||
void (*clear_pt_map) (GstRtpBin *rtpbin);
|
|
||||||
|
|
||||||
|
/* action signals */
|
||||||
|
void (*clear_pt_map) (GstRtpBin *rtpbin);
|
||||||
|
RTPSession* (*get_internal_session) (GstRtpBin *rtpbin, guint session_id);
|
||||||
|
|
||||||
|
/* session manager signals */
|
||||||
void (*on_new_ssrc) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
|
void (*on_new_ssrc) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
|
||||||
void (*on_ssrc_collision) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
|
void (*on_ssrc_collision) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
|
||||||
void (*on_ssrc_validated) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
|
void (*on_ssrc_validated) (GstRtpBin *rtpbin, guint session, guint32 ssrc);
|
||||||
|
|
|
@ -225,6 +225,7 @@ enum
|
||||||
PROP_SDES_NOTE,
|
PROP_SDES_NOTE,
|
||||||
PROP_NUM_SOURCES,
|
PROP_NUM_SOURCES,
|
||||||
PROP_NUM_ACTIVE_SOURCES,
|
PROP_NUM_ACTIVE_SOURCES,
|
||||||
|
PROP_INTERNAL_SESSION,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -655,6 +656,11 @@ gst_rtp_session_class_init (GstRtpSessionClass * klass)
|
||||||
"The number of active sources in the session", 0, G_MAXUINT,
|
"The number of active sources in the session", 0, G_MAXUINT,
|
||||||
DEFAULT_NUM_ACTIVE_SOURCES, G_PARAM_READABLE));
|
DEFAULT_NUM_ACTIVE_SOURCES, G_PARAM_READABLE));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, PROP_INTERNAL_SESSION,
|
||||||
|
g_param_spec_object ("internal-session", "Internal Session",
|
||||||
|
"The internal RTPSession object", RTP_TYPE_SESSION,
|
||||||
|
G_PARAM_READABLE));
|
||||||
|
|
||||||
gstelement_class->change_state =
|
gstelement_class->change_state =
|
||||||
GST_DEBUG_FUNCPTR (gst_rtp_session_change_state);
|
GST_DEBUG_FUNCPTR (gst_rtp_session_change_state);
|
||||||
gstelement_class->request_new_pad =
|
gstelement_class->request_new_pad =
|
||||||
|
@ -845,6 +851,9 @@ gst_rtp_session_get_property (GObject * object, guint prop_id,
|
||||||
g_value_set_uint (value,
|
g_value_set_uint (value,
|
||||||
rtp_session_get_num_active_sources (priv->session));
|
rtp_session_get_num_active_sources (priv->session));
|
||||||
break;
|
break;
|
||||||
|
case PROP_INTERNAL_SESSION:
|
||||||
|
g_value_set_object (value, priv->session);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -1982,9 +1991,3 @@ wrong_pad:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gst_rtp_session_set_ssrc (GstRtpSession * sess, guint32 ssrc)
|
|
||||||
{
|
|
||||||
rtp_session_set_internal_ssrc (sess->priv->session, ssrc);
|
|
||||||
}
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <gst/rtp/gstrtcpbuffer.h>
|
#include <gst/rtp/gstrtcpbuffer.h>
|
||||||
#include <gst/netbuffer/gstnetbuffer.h>
|
#include <gst/netbuffer/gstnetbuffer.h>
|
||||||
|
|
||||||
|
#include "gstrtpbin-marshal.h"
|
||||||
#include "rtpsession.h"
|
#include "rtpsession.h"
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (rtp_session_debug);
|
GST_DEBUG_CATEGORY_STATIC (rtp_session_debug);
|
||||||
|
@ -32,6 +32,7 @@ GST_DEBUG_CATEGORY_STATIC (rtp_session_debug);
|
||||||
/* signals and args */
|
/* signals and args */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
SIGNAL_GET_SOURCE_BY_SSRC,
|
||||||
SIGNAL_ON_NEW_SSRC,
|
SIGNAL_ON_NEW_SSRC,
|
||||||
SIGNAL_ON_SSRC_COLLISION,
|
SIGNAL_ON_SSRC_COLLISION,
|
||||||
SIGNAL_ON_SSRC_VALIDATED,
|
SIGNAL_ON_SSRC_VALIDATED,
|
||||||
|
@ -117,6 +118,19 @@ rtp_session_class_init (RTPSessionClass * klass)
|
||||||
gobject_class->set_property = rtp_session_set_property;
|
gobject_class->set_property = rtp_session_set_property;
|
||||||
gobject_class->get_property = rtp_session_get_property;
|
gobject_class->get_property = rtp_session_get_property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RTPSession::get-source-by-ssrc:
|
||||||
|
* @session: the object which received the signal
|
||||||
|
* @ssrc: the SSRC of the RTPSource
|
||||||
|
*
|
||||||
|
* Request the #RTPSource object with SSRC @ssrc in @session.
|
||||||
|
*/
|
||||||
|
rtp_session_signals[SIGNAL_GET_SOURCE_BY_SSRC] =
|
||||||
|
g_signal_new ("get-source-by-ssrc", G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (RTPSessionClass,
|
||||||
|
get_source_by_ssrc), NULL, NULL, gst_rtp_bin_marshal_OBJECT__UINT,
|
||||||
|
RTP_TYPE_SOURCE, 1, G_TYPE_UINT);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RTPSession::on-new-ssrc:
|
* RTPSession::on-new-ssrc:
|
||||||
* @session: the object which received the signal
|
* @session: the object which received the signal
|
||||||
|
@ -286,6 +300,9 @@ rtp_session_class_init (RTPSessionClass * klass)
|
||||||
"The number of active sources in the session", 0, G_MAXUINT,
|
"The number of active sources in the session", 0, G_MAXUINT,
|
||||||
DEFAULT_NUM_ACTIVE_SOURCES, G_PARAM_READABLE));
|
DEFAULT_NUM_ACTIVE_SOURCES, G_PARAM_READABLE));
|
||||||
|
|
||||||
|
klass->get_source_by_ssrc =
|
||||||
|
GST_DEBUG_FUNCPTR (rtp_session_get_source_by_ssrc);
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (rtp_session_debug, "rtpsession", 0, "RTP Session");
|
GST_DEBUG_CATEGORY_INIT (rtp_session_debug, "rtpsession", 0, "RTP Session");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -947,7 +964,7 @@ static gboolean
|
||||||
check_collision (RTPSession * sess, RTPSource * source,
|
check_collision (RTPSession * sess, RTPSource * source,
|
||||||
RTPArrivalStats * arrival, gboolean rtp)
|
RTPArrivalStats * arrival, gboolean rtp)
|
||||||
{
|
{
|
||||||
/* If we have not arrival address, we can't do collision checking */
|
/* If we have no arrival address, we can't do collision checking */
|
||||||
if (!arrival->have_address)
|
if (!arrival->have_address)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,6 @@ typedef struct {
|
||||||
* This structure is used to account for addresses that have conflicted to find
|
* This structure is used to account for addresses that have conflicted to find
|
||||||
* loops.
|
* loops.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GstNetAddress address;
|
GstNetAddress address;
|
||||||
GstClockTime time;
|
GstClockTime time;
|
||||||
|
@ -219,6 +218,9 @@ struct _RTPSession {
|
||||||
struct _RTPSessionClass {
|
struct _RTPSessionClass {
|
||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
|
|
||||||
|
/* action signals */
|
||||||
|
RTPSource* (*get_source_by_ssrc) (RTPSession *sess, guint32 ssrc);
|
||||||
|
|
||||||
/* signals */
|
/* signals */
|
||||||
void (*on_new_ssrc) (RTPSession *sess, RTPSource *source);
|
void (*on_new_ssrc) (RTPSession *sess, RTPSource *source);
|
||||||
void (*on_ssrc_collision) (RTPSession *sess, RTPSource *source);
|
void (*on_ssrc_collision) (RTPSession *sess, RTPSource *source);
|
||||||
|
@ -279,17 +281,22 @@ RTPSource* rtp_session_get_source_by_cname (RTPSession *sess, const gcha
|
||||||
RTPSource* rtp_session_create_source (RTPSession *sess);
|
RTPSource* rtp_session_create_source (RTPSession *sess);
|
||||||
|
|
||||||
/* processing packets from receivers */
|
/* processing packets from receivers */
|
||||||
GstFlowReturn rtp_session_process_rtp (RTPSession *sess, GstBuffer *buffer, GstClockTime current_time, guint64 ntpnstime);
|
GstFlowReturn rtp_session_process_rtp (RTPSession *sess, GstBuffer *buffer,
|
||||||
GstFlowReturn rtp_session_process_rtcp (RTPSession *sess, GstBuffer *buffer, GstClockTime current_time);
|
GstClockTime current_time, guint64 ntpnstime);
|
||||||
|
GstFlowReturn rtp_session_process_rtcp (RTPSession *sess, GstBuffer *buffer,
|
||||||
|
GstClockTime current_time);
|
||||||
|
|
||||||
/* processing packets for sending */
|
/* processing packets for sending */
|
||||||
GstFlowReturn rtp_session_send_rtp (RTPSession *sess, GstBuffer *buffer, GstClockTime current_time, guint64 ntpnstime);
|
GstFlowReturn rtp_session_send_rtp (RTPSession *sess, GstBuffer *buffer,
|
||||||
|
GstClockTime current_time, guint64 ntpnstime);
|
||||||
|
|
||||||
/* stopping the session */
|
/* stopping the session */
|
||||||
GstFlowReturn rtp_session_send_bye (RTPSession *sess, const gchar *reason, GstClockTime current_time);
|
GstFlowReturn rtp_session_send_bye (RTPSession *sess, const gchar *reason,
|
||||||
|
GstClockTime current_time);
|
||||||
|
|
||||||
/* get interval for next RTCP interval */
|
/* get interval for next RTCP interval */
|
||||||
GstClockTime rtp_session_next_timeout (RTPSession *sess, GstClockTime current_time);
|
GstClockTime rtp_session_next_timeout (RTPSession *sess, GstClockTime current_time);
|
||||||
GstFlowReturn rtp_session_on_timeout (RTPSession *sess, GstClockTime current_time, guint64 ntpnstime);
|
GstFlowReturn rtp_session_on_timeout (RTPSession *sess, GstClockTime current_time,
|
||||||
|
guint64 ntpnstime);
|
||||||
|
|
||||||
#endif /* __RTP_SESSION_H__ */
|
#endif /* __RTP_SESSION_H__ */
|
||||||
|
|
Loading…
Reference in a new issue