mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 11:41:09 +00:00
Some small cleanups. added a drop_probaility arg to identity, so it occasionally can drop buffers to simulate network...
Original commit message from CVS: Some small cleanups. added a drop_probaility arg to identity, so it occasionally can drop buffers to simulate network packet loss
This commit is contained in:
parent
ad6c7ef940
commit
03391373ef
6 changed files with 52 additions and 56 deletions
|
@ -257,7 +257,7 @@ static void
|
||||||
gst_aggregator_push (GstAggregator *aggregator, GstPad *pad, GstBuffer *buf, guchar *debug)
|
gst_aggregator_push (GstAggregator *aggregator, GstPad *pad, GstBuffer *buf, guchar *debug)
|
||||||
{
|
{
|
||||||
if (!aggregator->silent)
|
if (!aggregator->silent)
|
||||||
g_print("aggregator: %10.10s ******* (%s:%s)a (%d bytes, %llu) \n",
|
gst_element_info (GST_ELEMENT (aggregator), "%10.10s ******* (%s:%s)a (%d bytes, %llu) \n",
|
||||||
debug, GST_DEBUG_PAD_NAME (pad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
debug, GST_DEBUG_PAD_NAME (pad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
||||||
|
|
||||||
gst_pad_push (aggregator->srcpad, buf);
|
gst_pad_push (aggregator->srcpad, buf);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <gstidentity.h>
|
#include <gstidentity.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,6 +48,7 @@ enum {
|
||||||
ARG_SLEEP_TIME,
|
ARG_SLEEP_TIME,
|
||||||
ARG_DUPLICATE,
|
ARG_DUPLICATE,
|
||||||
ARG_ERROR_AFTER,
|
ARG_ERROR_AFTER,
|
||||||
|
ARG_DROP_PROBABILITY,
|
||||||
ARG_SILENT,
|
ARG_SILENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,6 +106,9 @@ gst_identity_class_init (GstIdentityClass *klass)
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ERROR_AFTER,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ERROR_AFTER,
|
||||||
g_param_spec_int ("error_after", "Error After", "Error after N buffers",
|
g_param_spec_int ("error_after", "Error After", "Error after N buffers",
|
||||||
G_MININT, G_MAXINT, -1, G_PARAM_READWRITE));
|
G_MININT, G_MAXINT, -1, G_PARAM_READWRITE));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DROP_PROBABILITY,
|
||||||
|
g_param_spec_float ("drop_probability", "Drop Probability", "The Probability a buffer is dropped",
|
||||||
|
0.0, 1.0, 0.0, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SILENT,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SILENT,
|
||||||
g_param_spec_boolean ("silent", "silent", "silent",
|
g_param_spec_boolean ("silent", "silent", "silent",
|
||||||
TRUE,G_PARAM_READWRITE));
|
TRUE,G_PARAM_READWRITE));
|
||||||
|
@ -165,6 +170,7 @@ gst_identity_init (GstIdentity *identity)
|
||||||
identity->sleep_time = 0;
|
identity->sleep_time = 0;
|
||||||
identity->duplicate = 1;
|
identity->duplicate = 1;
|
||||||
identity->error_after = -1;
|
identity->error_after = -1;
|
||||||
|
identity->drop_probability = 0.0;
|
||||||
identity->silent = FALSE;
|
identity->silent = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,9 +195,18 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=identity->duplicate; i; i--) {
|
if (identity->drop_probability > 0.0) {
|
||||||
|
if ((gfloat)(1.0*rand()/(RAND_MAX)) < identity->drop_probability) {
|
||||||
|
gst_element_info (GST_ELEMENT (identity), "dropping ******* (%s:%s)i (%d bytes, %llu)",
|
||||||
|
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = identity->duplicate; i; i--) {
|
||||||
if (!identity->silent)
|
if (!identity->silent)
|
||||||
g_print("identity: chain ******* (%s:%s)i (%d bytes, %llu) \n",
|
gst_element_info (GST_ELEMENT (identity), "chain ******* (%s:%s)i (%d bytes, %llu)",
|
||||||
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0,
|
g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0,
|
||||||
|
@ -224,31 +239,7 @@ gst_identity_loop (GstElement *element)
|
||||||
gst_pad_event_default (identity->sinkpad, GST_EVENT (buf));
|
gst_pad_event_default (identity->sinkpad, GST_EVENT (buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (identity->error_after >= 0) {
|
gst_identity_chain (identity->sinkpad, buf);
|
||||||
identity->error_after--;
|
|
||||||
if (identity->error_after == 0) {
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
gst_element_error (element, "errored after iterations as requested");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=identity->duplicate; i; i--) {
|
|
||||||
if (!identity->silent)
|
|
||||||
g_print("identity: loop ******* (%s:%s)i (%d bytes, %llu) \n",
|
|
||||||
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0,
|
|
||||||
buf);
|
|
||||||
|
|
||||||
if (i>1)
|
|
||||||
gst_buffer_ref (buf);
|
|
||||||
|
|
||||||
gst_pad_push (identity->srcpad, buf);
|
|
||||||
|
|
||||||
if (identity->sleep_time)
|
|
||||||
usleep (identity->sleep_time);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -285,6 +276,9 @@ gst_identity_set_property (GObject *object, guint prop_id, const GValue *value,
|
||||||
case ARG_ERROR_AFTER:
|
case ARG_ERROR_AFTER:
|
||||||
identity->error_after = g_value_get_uint (value);
|
identity->error_after = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
|
case ARG_DROP_PROBABILITY:
|
||||||
|
identity->drop_probability = g_value_get_float (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -311,6 +305,9 @@ static void gst_identity_get_property(GObject *object, guint prop_id, GValue *va
|
||||||
case ARG_ERROR_AFTER:
|
case ARG_ERROR_AFTER:
|
||||||
g_value_set_uint (value, identity->error_after);
|
g_value_set_uint (value, identity->error_after);
|
||||||
break;
|
break;
|
||||||
|
case ARG_DROP_PROBABILITY:
|
||||||
|
g_value_set_float (value, identity->drop_probability);
|
||||||
|
break;
|
||||||
case ARG_SILENT:
|
case ARG_SILENT:
|
||||||
g_value_set_boolean (value, identity->silent);
|
g_value_set_boolean (value, identity->silent);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,6 +60,7 @@ struct _GstIdentity {
|
||||||
gboolean loop_based;
|
gboolean loop_based;
|
||||||
guint duplicate;
|
guint duplicate;
|
||||||
gint error_after;
|
gint error_after;
|
||||||
|
gfloat drop_probability;
|
||||||
guint sleep_time;
|
guint sleep_time;
|
||||||
gboolean silent;
|
gboolean silent;
|
||||||
};
|
};
|
||||||
|
|
|
@ -257,7 +257,7 @@ static void
|
||||||
gst_aggregator_push (GstAggregator *aggregator, GstPad *pad, GstBuffer *buf, guchar *debug)
|
gst_aggregator_push (GstAggregator *aggregator, GstPad *pad, GstBuffer *buf, guchar *debug)
|
||||||
{
|
{
|
||||||
if (!aggregator->silent)
|
if (!aggregator->silent)
|
||||||
g_print("aggregator: %10.10s ******* (%s:%s)a (%d bytes, %llu) \n",
|
gst_element_info (GST_ELEMENT (aggregator), "%10.10s ******* (%s:%s)a (%d bytes, %llu) \n",
|
||||||
debug, GST_DEBUG_PAD_NAME (pad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
debug, GST_DEBUG_PAD_NAME (pad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
||||||
|
|
||||||
gst_pad_push (aggregator->srcpad, buf);
|
gst_pad_push (aggregator->srcpad, buf);
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <gstidentity.h>
|
#include <gstidentity.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,6 +48,7 @@ enum {
|
||||||
ARG_SLEEP_TIME,
|
ARG_SLEEP_TIME,
|
||||||
ARG_DUPLICATE,
|
ARG_DUPLICATE,
|
||||||
ARG_ERROR_AFTER,
|
ARG_ERROR_AFTER,
|
||||||
|
ARG_DROP_PROBABILITY,
|
||||||
ARG_SILENT,
|
ARG_SILENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,6 +106,9 @@ gst_identity_class_init (GstIdentityClass *klass)
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ERROR_AFTER,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ERROR_AFTER,
|
||||||
g_param_spec_int ("error_after", "Error After", "Error after N buffers",
|
g_param_spec_int ("error_after", "Error After", "Error after N buffers",
|
||||||
G_MININT, G_MAXINT, -1, G_PARAM_READWRITE));
|
G_MININT, G_MAXINT, -1, G_PARAM_READWRITE));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DROP_PROBABILITY,
|
||||||
|
g_param_spec_float ("drop_probability", "Drop Probability", "The Probability a buffer is dropped",
|
||||||
|
0.0, 1.0, 0.0, G_PARAM_READWRITE));
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SILENT,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SILENT,
|
||||||
g_param_spec_boolean ("silent", "silent", "silent",
|
g_param_spec_boolean ("silent", "silent", "silent",
|
||||||
TRUE,G_PARAM_READWRITE));
|
TRUE,G_PARAM_READWRITE));
|
||||||
|
@ -165,6 +170,7 @@ gst_identity_init (GstIdentity *identity)
|
||||||
identity->sleep_time = 0;
|
identity->sleep_time = 0;
|
||||||
identity->duplicate = 1;
|
identity->duplicate = 1;
|
||||||
identity->error_after = -1;
|
identity->error_after = -1;
|
||||||
|
identity->drop_probability = 0.0;
|
||||||
identity->silent = FALSE;
|
identity->silent = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,9 +195,18 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=identity->duplicate; i; i--) {
|
if (identity->drop_probability > 0.0) {
|
||||||
|
if ((gfloat)(1.0*rand()/(RAND_MAX)) < identity->drop_probability) {
|
||||||
|
gst_element_info (GST_ELEMENT (identity), "dropping ******* (%s:%s)i (%d bytes, %llu)",
|
||||||
|
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = identity->duplicate; i; i--) {
|
||||||
if (!identity->silent)
|
if (!identity->silent)
|
||||||
g_print("identity: chain ******* (%s:%s)i (%d bytes, %llu) \n",
|
gst_element_info (GST_ELEMENT (identity), "chain ******* (%s:%s)i (%d bytes, %llu)",
|
||||||
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0,
|
g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0,
|
||||||
|
@ -224,31 +239,7 @@ gst_identity_loop (GstElement *element)
|
||||||
gst_pad_event_default (identity->sinkpad, GST_EVENT (buf));
|
gst_pad_event_default (identity->sinkpad, GST_EVENT (buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (identity->error_after >= 0) {
|
gst_identity_chain (identity->sinkpad, buf);
|
||||||
identity->error_after--;
|
|
||||||
if (identity->error_after == 0) {
|
|
||||||
gst_buffer_unref (buf);
|
|
||||||
gst_element_error (element, "errored after iterations as requested");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=identity->duplicate; i; i--) {
|
|
||||||
if (!identity->silent)
|
|
||||||
g_print("identity: loop ******* (%s:%s)i (%d bytes, %llu) \n",
|
|
||||||
GST_DEBUG_PAD_NAME (identity->sinkpad), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
|
|
||||||
|
|
||||||
g_signal_emit (G_OBJECT (identity), gst_identity_signals[SIGNAL_HANDOFF], 0,
|
|
||||||
buf);
|
|
||||||
|
|
||||||
if (i>1)
|
|
||||||
gst_buffer_ref (buf);
|
|
||||||
|
|
||||||
gst_pad_push (identity->srcpad, buf);
|
|
||||||
|
|
||||||
if (identity->sleep_time)
|
|
||||||
usleep (identity->sleep_time);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -285,6 +276,9 @@ gst_identity_set_property (GObject *object, guint prop_id, const GValue *value,
|
||||||
case ARG_ERROR_AFTER:
|
case ARG_ERROR_AFTER:
|
||||||
identity->error_after = g_value_get_uint (value);
|
identity->error_after = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
|
case ARG_DROP_PROBABILITY:
|
||||||
|
identity->drop_probability = g_value_get_float (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -311,6 +305,9 @@ static void gst_identity_get_property(GObject *object, guint prop_id, GValue *va
|
||||||
case ARG_ERROR_AFTER:
|
case ARG_ERROR_AFTER:
|
||||||
g_value_set_uint (value, identity->error_after);
|
g_value_set_uint (value, identity->error_after);
|
||||||
break;
|
break;
|
||||||
|
case ARG_DROP_PROBABILITY:
|
||||||
|
g_value_set_float (value, identity->drop_probability);
|
||||||
|
break;
|
||||||
case ARG_SILENT:
|
case ARG_SILENT:
|
||||||
g_value_set_boolean (value, identity->silent);
|
g_value_set_boolean (value, identity->silent);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,6 +60,7 @@ struct _GstIdentity {
|
||||||
gboolean loop_based;
|
gboolean loop_based;
|
||||||
guint duplicate;
|
guint duplicate;
|
||||||
gint error_after;
|
gint error_after;
|
||||||
|
gfloat drop_probability;
|
||||||
guint sleep_time;
|
guint sleep_time;
|
||||||
gboolean silent;
|
gboolean silent;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue