mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
gst/tcp/gstmultifdsink.*: Added option to send a keyframe to clients as the first buffer.
Original commit message from CVS: * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init), (gst_multifdsink_init), (gst_multifdsink_add), (gst_multifdsink_client_queue_buffer), (gst_multifdsink_set_property), (gst_multifdsink_get_property): * gst/tcp/gstmultifdsink.h: Added option to send a keyframe to clients as the first buffer. Make timeout property writable.
This commit is contained in:
parent
bda2761348
commit
0efee1eb17
3 changed files with 35 additions and 1 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2004-08-17 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
|
||||
(gst_multifdsink_init), (gst_multifdsink_add),
|
||||
(gst_multifdsink_client_queue_buffer),
|
||||
(gst_multifdsink_set_property), (gst_multifdsink_get_property):
|
||||
* gst/tcp/gstmultifdsink.h:
|
||||
Added option to send a keyframe to clients as the first buffer.
|
||||
Make timeout property writable.
|
||||
|
||||
2004-08-17 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||
|
||||
patch by: Wim Taymans
|
||||
|
|
|
@ -94,6 +94,7 @@ enum
|
|||
#define DEFAULT_UNITS_SOFT_MAX -1
|
||||
#define DEFAULT_RECOVER_POLICY GST_RECOVER_POLICY_NONE
|
||||
#define DEFAULT_TIMEOUT 0
|
||||
#define DEFAULT_SYNC_CLIENTS FALSE
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -113,6 +114,7 @@ enum
|
|||
|
||||
ARG_RECOVER_POLICY,
|
||||
ARG_TIMEOUT,
|
||||
ARG_SYNC_CLIENTS,
|
||||
ARG_BYTES_TO_SERVE,
|
||||
ARG_BYTES_SERVED,
|
||||
};
|
||||
|
@ -303,7 +305,11 @@ gst_multifdsink_class_init (GstMultiFdSinkClass * klass)
|
|||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TIMEOUT,
|
||||
g_param_spec_uint64 ("timeout", "Timeout",
|
||||
"Maximum inactivity timeout in nanoseconds for a client (0 = no limit)",
|
||||
0, G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READABLE));
|
||||
0, G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE));
|
||||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SYNC_CLIENTS,
|
||||
g_param_spec_boolean ("sync-clients", "Sync clients",
|
||||
"Sync clients to a keyframe",
|
||||
DEFAULT_SYNC_CLIENTS, G_PARAM_READWRITE));
|
||||
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BYTES_TO_SERVE,
|
||||
g_param_spec_uint64 ("bytes-to-serve", "Bytes to serve",
|
||||
"Number of bytes received to serve to clients", 0, G_MAXUINT64, 0,
|
||||
|
@ -377,6 +383,7 @@ gst_multifdsink_init (GstMultiFdSink * this)
|
|||
this->recover_policy = DEFAULT_RECOVER_POLICY;
|
||||
|
||||
this->timeout = DEFAULT_TIMEOUT;
|
||||
this->sync_clients = DEFAULT_SYNC_CLIENTS;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -397,6 +404,7 @@ gst_multifdsink_add (GstMultiFdSink * sink, int fd)
|
|||
client->bytes_sent = 0;
|
||||
client->dropped_buffers = 0;
|
||||
client->avg_queue_size = 0;
|
||||
client->need_keyunit = sink->sync_clients;
|
||||
|
||||
/* update start time */
|
||||
g_get_current_time (&now);
|
||||
|
@ -708,6 +716,14 @@ static gboolean
|
|||
gst_multifdsink_client_queue_buffer (GstMultiFdSink * sink,
|
||||
GstTCPClient * client, GstBuffer * buffer)
|
||||
{
|
||||
if (client->need_keyunit) {
|
||||
if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_DELTA_UNIT)) {
|
||||
return TRUE;
|
||||
} else if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_IN_CAPS)) {
|
||||
client->need_keyunit = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (sink->protocol == GST_TCP_PROTOCOL_TYPE_GDP) {
|
||||
guint8 *header;
|
||||
guint len;
|
||||
|
@ -1270,6 +1286,9 @@ gst_multifdsink_set_property (GObject * object, guint prop_id,
|
|||
case ARG_TIMEOUT:
|
||||
multifdsink->timeout = g_value_get_uint64 (value);
|
||||
break;
|
||||
case ARG_SYNC_CLIENTS:
|
||||
multifdsink->sync_clients = g_value_get_boolean (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
|
@ -1323,6 +1342,9 @@ gst_multifdsink_get_property (GObject * object, guint prop_id, GValue * value,
|
|||
case ARG_TIMEOUT:
|
||||
g_value_set_uint64 (value, multifdsink->timeout);
|
||||
break;
|
||||
case ARG_SYNC_CLIENTS:
|
||||
g_value_set_boolean (value, multifdsink->sync_clients);
|
||||
break;
|
||||
case ARG_BYTES_TO_SERVE:
|
||||
g_value_set_uint64 (value, multifdsink->bytes_to_serve);
|
||||
break;
|
||||
|
|
|
@ -97,6 +97,7 @@ typedef struct {
|
|||
|
||||
gboolean caps_sent;
|
||||
gboolean streamheader_sent;
|
||||
gboolean need_keyunit;
|
||||
|
||||
/* stats */
|
||||
guint64 bytes_sent;
|
||||
|
@ -142,6 +143,7 @@ struct _GstMultiFdSink {
|
|||
gint units_soft_max; /* max units a client can lag before recovery starts */
|
||||
GstRecoverPolicy recover_policy;
|
||||
GstClockTime timeout; /* max amount of nanoseconds to remain idle */
|
||||
gboolean sync_clients;/* sync clients to keyframe */
|
||||
|
||||
/* stats */
|
||||
gint buffers_queued; /* number of queued buffers */
|
||||
|
|
Loading…
Reference in a new issue