[rygel-gst-0-10-media-engine] cleanup
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel-gst-0-10-media-engine] cleanup
- Date: Thu, 20 Dec 2012 14:08:36 +0000 (UTC)
commit 23b53436d8d64c16ff4bce5e0eea6f003d2a71cd
Author: Murray Cumming <murrayc murrayc com>
Date: Thu Dec 20 15:08:30 2012 +0100
cleanup
src/rygel-gst-sink.c | 419 +++++++++++++++-----------------------------------
1 files changed, 126 insertions(+), 293 deletions(-)
---
diff --git a/src/rygel-gst-sink.c b/src/rygel-gst-sink.c
index b411050..bc375d8 100644
--- a/src/rygel-gst-sink.c
+++ b/src/rygel-gst-sink.c
@@ -28,14 +28,6 @@
G_DEFINE_TYPE (RygelGstSink, rygel_gst_sink, GST_TYPE_BASE_SINK)
-
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _gst_buffer_unref0(var) ((var == NULL) ? NULL : (var = (gst_buffer_unref (var), NULL)))
-typedef struct _Block1Data Block1Data;
-#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
-#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
-
-
struct _RygelGstSinkPrivate {
gint priority;
gint64 chunks_buffered;
@@ -48,358 +40,219 @@ struct _RygelGstSinkPrivate {
gboolean frozen;
};
-struct _Block1Data {
+typedef struct _CallbackData CallbackData;
+
+struct _CallbackData {
int _ref_count_;
RygelGstSink * self;
GstBuffer* buffer;
};
-
-
#define RYGEL_GST_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), RYGEL_TYPE_GST_SINK, RygelGstSinkPrivate))
#define RYGEL_GST_SINK_NAME "http-gst-sink"
#define RYGEL_GST_SINK_PAD_NAME "sink"
#define RYGEL_GST_SINK_MAX_BUFFERED_CHUNKS ((guint) 32)
#define RYGEL_GST_SINK_MIN_BUFFERED_CHUNKS ((guint) 4)
-RygelGstSink* rygel_gst_sink_new (RygelDataSource* source, RygelHTTPSeek* offsets);
-RygelGstSink* rygel_gst_sink_construct (GType object_type, RygelDataSource* source, RygelHTTPSeek* offsets);
+
static void rygel_gst_sink_on_cancelled (RygelGstSink* self);
-static void _rygel_gst_sink_on_cancelled_g_cancellable_cancelled (GCancellable* _sender, gpointer self);
-void rygel_gst_sink_freeze (RygelGstSink* self);
-void rygel_gst_sink_thaw (RygelGstSink* self);
+static void on_cancelled (GCancellable* _sender, gpointer self);
static GstFlowReturn rygel_gst_sink_real_render (GstBaseSink* base, GstBuffer* buffer);
-static Block1Data* block1_data_ref (Block1Data* _data1_);
-static void block1_data_unref (void * _userdata_);
-static gboolean __lambda2_ (Block1Data* _data1_);
gboolean rygel_gst_sink_push_data (RygelGstSink* self, GstBuffer* buffer);
-static gboolean ___lambda2__gsource_func (gpointer self);
+static gboolean on_idle_push_data (gpointer self);
static void rygel_gst_sink_finalize (GObject* obj);
-static void _vala_clear_GMutex (GMutex * mutex);
-static void _vala_clear_GRecMutex (GRecMutex * mutex);
-static void _vala_clear_GRWLock (GRWLock * mutex);
-static void _vala_clear_GCond (GCond * mutex);
-
+static void clear_gmutex (GMutex * mutex);
+static void clear_gcond (GCond * mutex);
-static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
-}
-
-
-static void _rygel_gst_sink_on_cancelled_g_cancellable_cancelled (GCancellable* _sender, gpointer self) {
+static void
+on_cancelled (GCancellable* _sender, gpointer self) {
rygel_gst_sink_on_cancelled (self);
}
+RygelGstSink*
+rygel_gst_sink_construct (GType object_type, RygelDataSource* source, RygelHTTPSeek* offsets) {
+ RygelGstSink *self = RYGEL_GST_SINK (g_object_new (object_type, NULL));
-RygelGstSink* rygel_gst_sink_construct (GType object_type, RygelDataSource* source, RygelHTTPSeek* offsets) {
- RygelGstSink * self = NULL;
- gint64 _tmp0_;
- RygelDataSource* _tmp1_;
- RygelHTTPSeek* _tmp2_;
- RygelHTTPSeek* _tmp3_;
- GCancellable* _tmp4_;
- RygelHTTPSeek* _tmp5_;
- GCancellable* _tmp12_;
- g_return_val_if_fail (source != NULL, NULL);
- self = (RygelGstSink*) g_object_new (object_type, NULL);
self->priv->chunks_buffered = (gint64) 0;
self->priv->bytes_sent = (gint64) 0;
- _tmp0_ = G_MAXINT64;
- self->priv->max_bytes = _tmp0_;
- _tmp1_ = source;
- self->priv->source = _tmp1_;
- _tmp2_ = offsets;
- _tmp3_ = _g_object_ref0 (_tmp2_);
- _g_object_unref0 (self->priv->offsets);
- self->priv->offsets = _tmp3_;
- _tmp4_ = g_cancellable_new ();
- _g_object_unref0 (self->cancellable);
- self->cancellable = _tmp4_;
- gst_base_sink_set_sync ((GstBaseSink*) self, FALSE);
- gst_object_set_name ((GstObject*) self, RYGEL_GST_SINK_NAME);
+ self->priv->max_bytes = G_MAXINT64;
+ self->priv->source = source;
+ self->priv->offsets = g_object_ref (offsets);
+
+ self->cancellable = g_cancellable_new ();
+
+ gst_base_sink_set_sync (GST_BASE_SINK (self), FALSE);
+ gst_object_set_name (GST_OBJECT (self), RYGEL_GST_SINK_NAME);
self->priv->frozen = FALSE;
- _tmp5_ = self->priv->offsets;
- if (_tmp5_ != NULL) {
- RygelHTTPSeek* _tmp6_;
- RygelHTTPSeekType _tmp7_;
- RygelHTTPSeekType _tmp8_;
- _tmp6_ = self->priv->offsets;
- _tmp7_ = rygel_http_seek_get_seek_type (_tmp6_);
- _tmp8_ = _tmp7_;
- if (_tmp8_ == RYGEL_HTTP_SEEK_TYPE_BYTE) {
- RygelHTTPSeek* _tmp9_;
- gint64 _tmp10_;
- gint64 _tmp11_;
- _tmp9_ = self->priv->offsets;
- _tmp10_ = rygel_http_seek_get_length (_tmp9_);
- _tmp11_ = _tmp10_;
- self->priv->max_bytes = _tmp11_;
+
+ if (self->priv->offsets) {
+ if (rygel_http_seek_get_seek_type (self->priv->offsets) == RYGEL_HTTP_SEEK_TYPE_BYTE) {
+ self->priv->max_bytes = rygel_http_seek_get_length (self->priv->offsets);
}
}
- _tmp12_ = self->cancellable;
- g_signal_connect_object (_tmp12_, "cancelled", (GCallback) _rygel_gst_sink_on_cancelled_g_cancellable_cancelled, self, 0);
+
+ g_signal_connect_object (self->cancellable, "cancelled", (GCallback) on_cancelled, self, 0);
return self;
}
-
-RygelGstSink* rygel_gst_sink_new (RygelDataSource* source, RygelHTTPSeek* offsets) {
+RygelGstSink*
+rygel_gst_sink_new (RygelDataSource* source, RygelHTTPSeek* offsets) {
return rygel_gst_sink_construct (RYGEL_TYPE_GST_SINK, source, offsets);
}
-void rygel_gst_sink_freeze (RygelGstSink* self) {
- gboolean _tmp0_;
- g_return_if_fail (self != NULL);
- _tmp0_ = self->priv->frozen;
- if (_tmp0_) {
+void
+rygel_gst_sink_freeze (RygelGstSink* self) {
+ g_return_if_fail (self);
+
+ if (self->priv->frozen) {
return;
}
+
g_mutex_lock (&self->priv->buffer_mutex);
self->priv->frozen = TRUE;
g_mutex_unlock (&self->priv->buffer_mutex);
}
+void
+rygel_gst_sink_thaw (RygelGstSink* self) {
+ g_return_if_fail (self);
-void rygel_gst_sink_thaw (RygelGstSink* self) {
- gboolean _tmp0_;
- g_return_if_fail (self != NULL);
- _tmp0_ = self->priv->frozen;
- if (!_tmp0_) {
+ if (!self->priv->frozen) {
return;
}
+
g_mutex_lock (&self->priv->buffer_mutex);
self->priv->frozen = FALSE;
g_cond_broadcast (&self->priv->buffer_condition);
g_mutex_unlock (&self->priv->buffer_mutex);
}
+static gboolean on_idle_push_data (gpointer user_data) {
+ CallbackData* data = (CallbackData*)user_data;
-static gpointer _gst_buffer_ref0 (gpointer self) {
- return self ? gst_buffer_ref (self) : NULL;
+ return rygel_gst_sink_push_data (data->self, data->buffer);
}
-
-static Block1Data* block1_data_ref (Block1Data* _data1_) {
- g_atomic_int_inc (&_data1_->_ref_count_);
- return _data1_;
+static CallbackData*
+callback_data_ref (CallbackData* callback_data) {
+ g_atomic_int_inc (&callback_data->_ref_count_);
+ return callback_data;
}
-
-static void block1_data_unref (void * _userdata_) {
- Block1Data* _data1_;
- _data1_ = (Block1Data*) _userdata_;
- if (g_atomic_int_dec_and_test (&_data1_->_ref_count_)) {
- RygelGstSink * self;
- self = _data1_->self;
- _gst_buffer_unref0 (_data1_->buffer);
- _gst_object_unref0 (self);
- g_slice_free (Block1Data, _data1_);
+static void
+callback_data_unref (void * user_data) {
+ CallbackData* callback_data = (CallbackData*) user_data;
+ if (g_atomic_int_dec_and_test (&callback_data->_ref_count_)) {
+ RygelGstSink * self = callback_data->self;
+ gst_buffer_unref (callback_data->buffer);
+ gst_object_unref (self);
+ g_slice_free (CallbackData, callback_data);
}
}
-
-static gboolean __lambda2_ (Block1Data* _data1_) {
- RygelGstSink * self;
- gboolean result = FALSE;
- GstBuffer* _tmp0_;
- gboolean _tmp1_ = FALSE;
- self = _data1_->self;
- _tmp0_ = _data1_->buffer;
- _tmp1_ = rygel_gst_sink_push_data (self, _tmp0_);
- result = _tmp1_;
- return result;
-}
-
-
-static gboolean ___lambda2__gsource_func (gpointer self) {
- gboolean result;
- result = __lambda2_ (self);
- return result;
-}
-
-
static GstFlowReturn rygel_gst_sink_real_render (GstBaseSink* base, GstBuffer* buffer) {
- RygelGstSink * self;
- GstFlowReturn result = 0;
- Block1Data* _data1_;
- GstBuffer* _tmp0_;
- GstBuffer* _tmp1_;
- GCancellable* _tmp8_;
- gboolean _tmp9_ = FALSE;
- gint _tmp10_;
- self = (RygelGstSink*) base;
- g_return_val_if_fail (buffer != NULL, 0);
- _data1_ = g_slice_new0 (Block1Data);
- _data1_->_ref_count_ = 1;
- _data1_->self = gst_object_ref (self);
- _tmp0_ = buffer;
- _tmp1_ = _gst_buffer_ref0 (_tmp0_);
- _gst_buffer_unref0 (_data1_->buffer);
- _data1_->buffer = _tmp1_;
+ RygelGstSink *self = RYGEL_GST_SINK (base);
+ CallbackData* callback_data;
+
g_mutex_lock (&self->priv->buffer_mutex);
- while (TRUE) {
- gboolean _tmp2_ = FALSE;
- GCancellable* _tmp3_;
- gboolean _tmp4_ = FALSE;
- gboolean _tmp6_;
- GMutex _tmp7_;
- _tmp3_ = self->cancellable;
- _tmp4_ = g_cancellable_is_cancelled (_tmp3_);
- if (!_tmp4_) {
- gboolean _tmp5_;
- _tmp5_ = self->priv->frozen;
- _tmp2_ = _tmp5_;
- } else {
- _tmp2_ = FALSE;
- }
- _tmp6_ = _tmp2_;
- if (!_tmp6_) {
- break;
- }
- _tmp7_ = self->priv->buffer_mutex;
- g_cond_wait (&self->priv->buffer_condition, &_tmp7_);
+ while (!g_cancellable_is_cancelled (self->cancellable) &&
+ self->priv->frozen) {
+ /* Client is either not reading (Paused) or not fast enough */
+ g_cond_wait (&self->priv->buffer_condition, &self->priv->buffer_mutex);
}
g_mutex_unlock (&self->priv->buffer_mutex);
- _tmp8_ = self->cancellable;
- _tmp9_ = g_cancellable_is_cancelled (_tmp8_);
- if (_tmp9_) {
- result = GST_FLOW_OK;
- block1_data_unref (_data1_);
- _data1_ = NULL;
- return result;
+
+ if(g_cancellable_is_cancelled (self->cancellable)) {
+ return GST_FLOW_OK;
}
- _tmp10_ = self->priv->priority;
- g_idle_add_full (_tmp10_, ___lambda2__gsource_func, block1_data_ref (_data1_), block1_data_unref);
- result = GST_FLOW_OK;
- block1_data_unref (_data1_);
- _data1_ = NULL;
- return result;
+
+ /* Use a ref-counted object to pass both this sink and the buffer
+ * to the idle callback. */
+ callback_data = g_slice_new0 (CallbackData);
+ callback_data->_ref_count_ = 1;
+ callback_data->self = gst_object_ref (self);
+ callback_data->buffer = gst_object_ref (buffer);
+ g_idle_add_full (self->priv->priority, on_idle_push_data, callback_data_ref (callback_data), callback_data_unref);
+
+ return GST_FLOW_OK;
}
+/* Runs in application thread */
+gboolean
+rygel_gst_sink_push_data (RygelGstSink* self, GstBuffer* buffer) {
-gboolean rygel_gst_sink_push_data (RygelGstSink* self, GstBuffer* buffer) {
- gboolean result = FALSE;
- gint64 _tmp0_;
- gint64 _tmp1_;
- gint64 left;
- gboolean _tmp2_ = FALSE;
- GCancellable* _tmp3_;
- gboolean _tmp4_ = FALSE;
- gboolean _tmp6_;
- GstBuffer* _tmp7_;
- guint _tmp8_;
- gint64 _tmp9_;
- gint64 _tmp10_ = 0LL;
- gint64 to_send;
- RygelDataSource* _tmp11_;
- GstBuffer* _tmp12_;
- guint8* _tmp13_;
- gint _tmp13__length1;
- gint64 _tmp14_;
- gint64 _tmp15_;
- gint64 _tmp16_;
- gint64 _tmp17_;
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (buffer != NULL, FALSE);
- _tmp0_ = self->priv->max_bytes;
- _tmp1_ = self->priv->bytes_sent;
- left = _tmp0_ - _tmp1_;
- _tmp3_ = self->cancellable;
- _tmp4_ = g_cancellable_is_cancelled (_tmp3_);
- if (_tmp4_) {
- _tmp2_ = TRUE;
- } else {
- gint64 _tmp5_;
- _tmp5_ = left;
- _tmp2_ = _tmp5_ <= ((gint64) 0);
- }
- _tmp6_ = _tmp2_;
- if (_tmp6_) {
- result = FALSE;
- return result;
+ gint64 left = self->priv->max_bytes - self->priv->bytes_sent;
+
+ if(g_cancellable_is_cancelled (self->cancellable) ||
+ left <= 0) {
+ return FALSE;
}
- _tmp7_ = buffer;
- _tmp8_ = _tmp7_->size;
- _tmp9_ = left;
- _tmp10_ = MIN ((gint64) _tmp8_, _tmp9_);
- to_send = _tmp10_;
- _tmp11_ = self->priv->source;
- _tmp12_ = buffer;
- _tmp13_ = _tmp12_->data;
- _tmp13__length1 = (gint) _tmp12_->size;
- _tmp14_ = to_send;
- g_signal_emit_by_name (_tmp11_, "data-available", _tmp13_ + 0, _tmp14_ - 0);
- _tmp15_ = self->priv->chunks_buffered;
- self->priv->chunks_buffered = _tmp15_ + 1;
- _tmp16_ = self->priv->bytes_sent;
- _tmp17_ = to_send;
- self->priv->bytes_sent = _tmp16_ + _tmp17_;
- result = FALSE;
- return result;
-}
+ guint bufsize = buffer->size;
+ gint64 to_send = MIN ((gint64) bufsize, left);
+
+ g_signal_emit_by_name (self->priv->source, "data-available", buffer->data, to_send);
+ self->priv->chunks_buffered++;
+ self->priv->bytes_sent += to_send;
+
+ return FALSE;
+}
-static void rygel_gst_sink_on_cancelled (RygelGstSink* self) {
+static void
+rygel_gst_sink_on_cancelled (RygelGstSink* self) {
g_return_if_fail (self != NULL);
g_mutex_lock (&self->priv->buffer_mutex);
g_cond_broadcast (&self->priv->buffer_condition);
g_mutex_unlock (&self->priv->buffer_mutex);
}
-
-static gpointer _gst_caps_ref0 (gpointer self) {
- return self ? gst_caps_ref (self) : NULL;
-}
-
-
-static void rygel_gst_sink_class_init (RygelGstSinkClass * klass) {
- GstCaps* _tmp0_;
+static void
+rygel_gst_sink_class_init (RygelGstSinkClass * klass) {
GstCaps* caps;
- GstCaps* _tmp1_;
- GstCaps* _tmp2_;
- GstPadTemplate* _tmp3_;
GstPadTemplate* template;
- GstPadTemplate* _tmp4_;
+
rygel_gst_sink_parent_class = g_type_class_peek_parent (klass);
g_type_class_add_private (klass, sizeof (RygelGstSinkPrivate));
+
GST_BASE_SINK_CLASS (klass)->render = rygel_gst_sink_real_render;
G_OBJECT_CLASS (klass)->finalize = rygel_gst_sink_finalize;
- _tmp0_ = gst_caps_new_any ();
- caps = _tmp0_;
- _tmp1_ = caps;
- _tmp2_ = _gst_caps_ref0 (_tmp1_);
- _tmp3_ = gst_pad_template_new (RYGEL_GST_SINK_PAD_NAME, GST_PAD_SINK, GST_PAD_ALWAYS, _tmp2_);
- gst_object_ref_sink (_tmp3_);
- template = _tmp3_;
- _tmp4_ = template;
- gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), _tmp4_);
- _gst_object_unref0 (template);
- _gst_caps_unref0 (caps);
+
+ caps = gst_caps_new_any ();
+ template = gst_pad_template_new (RYGEL_GST_SINK_PAD_NAME,
+ GST_PAD_SINK, GST_PAD_ALWAYS, caps);
+ gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), template);
+ gst_object_unref (template);
+ gst_caps_unref (caps);
}
+static void
+rygel_gst_sink_init (RygelGstSink * self) {
+ GMutex mutex = {0};
+ GCond cond = {0};
-static void rygel_gst_sink_init (RygelGstSink * self) {
- GMutex _tmp0_ = {0};
- GCond _tmp1_ = {0};
self->priv = RYGEL_GST_SINK_GET_PRIVATE (self);
- g_mutex_init (&_tmp0_);
- self->priv->buffer_mutex = _tmp0_;
- g_cond_init (&_tmp1_);
- self->priv->buffer_condition = _tmp1_;
+
+ g_mutex_init (&mutex);
+ self->priv->buffer_mutex = mutex;
+ g_cond_init (&cond);
+ self->priv->buffer_condition = cond;
}
+static void
+rygel_gst_sink_finalize (GObject* obj) {
+ RygelGstSink * self = RYGEL_GST_SINK (obj);
+
+ g_object_unref (self->cancellable);
+ clear_gmutex (&self->priv->buffer_mutex);
+ clear_gcond (&self->priv->buffer_condition);
+ g_object_unref (self->priv->offsets);
-static void rygel_gst_sink_finalize (GObject* obj) {
- RygelGstSink * self;
- self = RYGEL_GST_SINK (obj);
- _g_object_unref0 (self->cancellable);
- _vala_clear_GMutex (&self->priv->buffer_mutex);
- _vala_clear_GCond (&self->priv->buffer_condition);
- _g_object_unref0 (self->priv->offsets);
G_OBJECT_CLASS (rygel_gst_sink_parent_class)->finalize (obj);
}
-static void _vala_clear_GMutex (GMutex * mutex) {
+static void
+clear_gmutex (GMutex * mutex) {
GMutex zero_mutex = { 0 };
if (memcmp (mutex, &zero_mutex, sizeof (GMutex))) {
g_mutex_clear (mutex);
@@ -407,26 +260,8 @@ static void _vala_clear_GMutex (GMutex * mutex) {
}
}
-
-static void _vala_clear_GRecMutex (GRecMutex * mutex) {
- GRecMutex zero_mutex = { 0 };
- if (memcmp (mutex, &zero_mutex, sizeof (GRecMutex))) {
- g_rec_mutex_clear (mutex);
- memset (mutex, 0, sizeof (GRecMutex));
- }
-}
-
-
-static void _vala_clear_GRWLock (GRWLock * mutex) {
- GRWLock zero_mutex = { 0 };
- if (memcmp (mutex, &zero_mutex, sizeof (GRWLock))) {
- g_rw_lock_clear (mutex);
- memset (mutex, 0, sizeof (GRWLock));
- }
-}
-
-
-static void _vala_clear_GCond (GCond * mutex) {
+static void
+clear_gcond (GCond * mutex) {
GCond zero_mutex = { 0 };
if (memcmp (mutex, &zero_mutex, sizeof (GCond))) {
g_cond_clear (mutex);
@@ -434,5 +269,3 @@ static void _vala_clear_GCond (GCond * mutex) {
}
}
-
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]