srtpenc: remove get-rollover-counter signal and add stats property
We remove get-rollover-counter signal in favor of the "stats" property. The "stats" property is a GstStructure with caps application/x-srtp-encoder-stats that contains an array of structures with caps application/x-srtp-stream. Each stream structure contains "ssrc" and "roc" fields. https://bugzilla.gnome.org/show_bug.cgi?id=733265
This commit is contained in:
parent
a0876aa750
commit
15a3b0f6ce
@ -159,7 +159,8 @@ enum
|
|||||||
PROP_RTCP_AUTH,
|
PROP_RTCP_AUTH,
|
||||||
PROP_RANDOM_KEY,
|
PROP_RANDOM_KEY,
|
||||||
PROP_REPLAY_WINDOW_SIZE,
|
PROP_REPLAY_WINDOW_SIZE,
|
||||||
PROP_ALLOW_REPEAT_TX
|
PROP_ALLOW_REPEAT_TX,
|
||||||
|
PROP_STATS
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct ProcessBufferItData
|
typedef struct ProcessBufferItData
|
||||||
@ -246,27 +247,6 @@ static GstPad *gst_srtp_enc_request_new_pad (GstElement * element,
|
|||||||
static void gst_srtp_enc_release_pad (GstElement * element, GstPad * pad);
|
static void gst_srtp_enc_release_pad (GstElement * element, GstPad * pad);
|
||||||
|
|
||||||
|
|
||||||
static guint32
|
|
||||||
gst_srtp_enc_get_rollover_counter (GstSrtpEnc * filter, guint32 ssrc)
|
|
||||||
{
|
|
||||||
guint32 roc = 0;
|
|
||||||
srtp_stream_t stream;
|
|
||||||
|
|
||||||
GST_OBJECT_LOCK (filter);
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (filter, "retrieving SRTP Rollover Counter, ssrc: %u", ssrc);
|
|
||||||
|
|
||||||
if (filter->session) {
|
|
||||||
stream = srtp_get_stream (filter->session, htonl (ssrc));
|
|
||||||
if (stream)
|
|
||||||
roc = stream->rtp_rdbx.index >> 16;
|
|
||||||
}
|
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (filter);
|
|
||||||
|
|
||||||
return roc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* initialize the srtpenc's class
|
/* initialize the srtpenc's class
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@ -342,6 +322,9 @@ gst_srtp_enc_class_init (GstSrtpEncClass * klass)
|
|||||||
"(Note that such repeated transmissions must have the same RTP payload, "
|
"(Note that such repeated transmissions must have the same RTP payload, "
|
||||||
"or a severe security weakness is introduced!)",
|
"or a severe security weakness is introduced!)",
|
||||||
DEFAULT_ALLOW_REPEAT_TX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
DEFAULT_ALLOW_REPEAT_TX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
g_object_class_install_property (gobject_class, PROP_STATS,
|
||||||
|
g_param_spec_boxed ("stats", "Statistics", "Various statistics",
|
||||||
|
GST_TYPE_STRUCTURE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstSrtpEnc::soft-limit:
|
* GstSrtpEnc::soft-limit:
|
||||||
@ -354,22 +337,6 @@ gst_srtp_enc_class_init (GstSrtpEncClass * klass)
|
|||||||
gst_srtp_enc_signals[SIGNAL_SOFT_LIMIT] =
|
gst_srtp_enc_signals[SIGNAL_SOFT_LIMIT] =
|
||||||
g_signal_new ("soft-limit", G_TYPE_FROM_CLASS (klass),
|
g_signal_new ("soft-limit", G_TYPE_FROM_CLASS (klass),
|
||||||
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
|
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0);
|
||||||
|
|
||||||
/**
|
|
||||||
* GstSrtpEnc::get-rollover-counter:
|
|
||||||
* @gstsrtpenc: the element on which the signal is emitted
|
|
||||||
* @ssrc: The unique SSRC of the stream
|
|
||||||
*
|
|
||||||
* Request the SRTP rollover counter for the stream with @ssrc.
|
|
||||||
*/
|
|
||||||
gst_srtp_enc_signals[SIGNAL_GET_ROLLOVER_COUNTER] =
|
|
||||||
g_signal_new ("get-rollover-counter", G_TYPE_FROM_CLASS (klass),
|
|
||||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstSrtpEncClass,
|
|
||||||
get_rollover_counter), NULL, NULL, g_cclosure_marshal_generic,
|
|
||||||
G_TYPE_UINT, 1, G_TYPE_UINT);
|
|
||||||
|
|
||||||
klass->get_rollover_counter =
|
|
||||||
GST_DEBUG_FUNCPTR (gst_srtp_enc_get_rollover_counter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -633,6 +600,41 @@ gst_srtp_enc_dispose (GObject * object)
|
|||||||
G_OBJECT_CLASS (gst_srtp_enc_parent_class)->dispose (object);
|
G_OBJECT_CLASS (gst_srtp_enc_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstStructure *
|
||||||
|
gst_srtp_enc_create_stats (GstSrtpEnc * filter)
|
||||||
|
{
|
||||||
|
GstStructure *s;
|
||||||
|
GValue va = G_VALUE_INIT;
|
||||||
|
GValue v = G_VALUE_INIT;
|
||||||
|
|
||||||
|
s = gst_structure_new_empty ("application/x-srtp-encoder-stats");
|
||||||
|
|
||||||
|
g_value_init (&va, GST_TYPE_ARRAY);
|
||||||
|
g_value_init (&v, GST_TYPE_STRUCTURE);
|
||||||
|
|
||||||
|
if (filter->session) {
|
||||||
|
srtp_stream_t stream = filter->session->stream_list;
|
||||||
|
while (stream) {
|
||||||
|
GstStructure *ss;
|
||||||
|
guint32 ssrc = GUINT32_FROM_BE (stream->ssrc);
|
||||||
|
guint32 roc = stream->rtp_rdbx.index >> 16;
|
||||||
|
|
||||||
|
ss = gst_structure_new ("application/x-srtp-stream",
|
||||||
|
"ssrc", G_TYPE_UINT, ssrc, "roc", G_TYPE_UINT, roc, NULL);
|
||||||
|
|
||||||
|
g_value_take_boxed (&v, ss);
|
||||||
|
gst_value_array_append_value (&va, &v);
|
||||||
|
|
||||||
|
stream = stream->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_structure_take_value (s, "streams", &va);
|
||||||
|
g_value_unset (&v);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_srtp_enc_set_property (GObject * object, guint prop_id,
|
gst_srtp_enc_set_property (GObject * object, guint prop_id,
|
||||||
const GValue * value, GParamSpec * pspec)
|
const GValue * value, GParamSpec * pspec)
|
||||||
@ -724,6 +726,9 @@ gst_srtp_enc_get_property (GObject * object, guint prop_id,
|
|||||||
case PROP_ALLOW_REPEAT_TX:
|
case PROP_ALLOW_REPEAT_TX:
|
||||||
g_value_set_boolean (value, filter->allow_repeat_tx);
|
g_value_set_boolean (value, filter->allow_repeat_tx);
|
||||||
break;
|
break;
|
||||||
|
case PROP_STATS:
|
||||||
|
g_value_take_boxed (value, gst_srtp_enc_create_stats (filter));
|
||||||
|
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;
|
||||||
|
@ -89,9 +89,6 @@ struct _GstSrtpEnc
|
|||||||
struct _GstSrtpEncClass
|
struct _GstSrtpEncClass
|
||||||
{
|
{
|
||||||
GstElementClass parent_class;
|
GstElementClass parent_class;
|
||||||
|
|
||||||
/* action signals */
|
|
||||||
guint32 (*get_rollover_counter) (GstSrtpEnc *encoder, guint32 ssrc);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GType gst_srtp_enc_get_type (void);
|
GType gst_srtp_enc_get_type (void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user