{
g_return_val_if_fail (GST_IS_OBJECT (object), NULL);
- GST_DEBUG (GST_CAT_REFCOUNTING, "ref '%s' %d->%d",GST_OBJECT_NAME(object),
- G_OBJECT(object)->ref_count,G_OBJECT(object)->ref_count+1);
+ GST_DEBUG (GST_CAT_REFCOUNTING, "ref %p '%s' %d->%d", object,
+ GST_OBJECT_NAME (object),
+ G_OBJECT (object)->ref_count,
+ G_OBJECT (object)->ref_count + 1);
g_object_ref (G_OBJECT (object));
return object;
{
g_return_if_fail (GST_IS_OBJECT (object));
- GST_DEBUG (GST_CAT_REFCOUNTING, "unref '%s' %d->%d",GST_OBJECT_NAME(object),
- G_OBJECT(object)->ref_count,G_OBJECT(object)->ref_count-1);
+ GST_DEBUG (GST_CAT_REFCOUNTING, "unref %p '%s' %d->%d", object,
+ GST_OBJECT_NAME (object),
+ G_OBJECT (object)->ref_count,
+ G_OBJECT (object)->ref_count - 1);
g_object_unref (G_OBJECT (object));
}
g_return_if_fail (object != NULL);
g_return_if_fail (GST_IS_OBJECT (object));
- GST_DEBUG (GST_CAT_REFCOUNTING, "sink '%s'",GST_OBJECT_NAME(object));
- if (GST_OBJECT_FLOATING (object))
- {
+ GST_DEBUG (GST_CAT_REFCOUNTING, "sink %p '%s'", object, GST_OBJECT_NAME (object));
+
+ if (GST_OBJECT_FLOATING (object)) {
GST_FLAG_UNSET (object, GST_FLOATING);
gst_object_unref (object);
}
g_return_if_fail (object != NULL);
g_return_if_fail (GST_IS_OBJECT (object));
- GST_DEBUG (GST_CAT_REFCOUNTING, "destroy '%s'",GST_OBJECT_NAME(object));
+ GST_DEBUG (GST_CAT_REFCOUNTING, "destroy %p '%s'", object, GST_OBJECT_NAME (object));
+
if (!GST_OBJECT_DESTROYED (object))
{
/* need to hold a reference count around all class method
static void
gst_object_dispose (GObject *object)
{
- GST_DEBUG (GST_CAT_REFCOUNTING, "dispose '%s'",GST_OBJECT_NAME(object));
+ GST_DEBUG (GST_CAT_REFCOUNTING, "dispose %p '%s'", object, GST_OBJECT_NAME (object));
+
GST_FLAG_SET (GST_OBJECT (object), GST_DESTROYED);
GST_OBJECT_PARENT (object) = NULL;
{
GstObject *gstobject = GST_OBJECT (object);
- GST_DEBUG (GST_CAT_REFCOUNTING, "finalize '%s'",GST_OBJECT_NAME(object));
+ GST_DEBUG (GST_CAT_REFCOUNTING, "finalize %p '%s'", object, GST_OBJECT_NAME (object));
g_signal_handlers_destroy (object);
static void gst_scheduler_class_init (GstSchedulerClass *klass);
static void gst_scheduler_init (GstScheduler *sched);
+static void gst_scheduler_dispose (GObject *object);
static GstObjectClass *parent_class = NULL;
static void
gst_scheduler_class_init (GstSchedulerClass *klass)
{
+ GObjectClass *gobject_class;
+
+ gobject_class = (GObjectClass*) klass;
+
parent_class = g_type_class_ref (GST_TYPE_OBJECT);
+
+ gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_scheduler_dispose);
}
static void
sched->clock = NULL;
}
+static void
+gst_scheduler_dispose (GObject *object)
+{
+ GstScheduler *sched = GST_SCHEDULER (object);
+
+ gst_object_swap ((GstObject **)&sched->current_clock, NULL);
+ gst_object_swap ((GstObject **)&sched->clock, NULL);
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
/**
* gst_scheduler_setup:
* @sched: the scheduler
g_return_val_if_fail (GST_IS_ELEMENT (element), GST_STATE_FAILURE);
if (element == sched->parent && sched->parent_sched == NULL) {
-
switch (transition) {
case GST_STATE_READY_TO_PAUSED:
{
GST_DEBUG (GST_CAT_CLOCK, "scheduler READY to PAUSED clock is %p (%s)", clock,
(clock ? GST_OBJECT_NAME (clock) : "nil"));
- sched->current_clock = clock;
+ gst_object_swap ((GstObject **)&sched->current_clock, (GstObject *)clock);
break;
}
case GST_STATE_PAUSED_TO_PLAYING:
GST_DEBUG (GST_CAT_CLOCK, "scheduler PAUSED to PLAYING clock is %p (%s)", clock,
(clock ? GST_OBJECT_NAME (clock) : "nil"));
- sched->current_clock = clock;
+ gst_object_swap ((GstObject **)&sched->current_clock, (GstObject *)clock);
gst_scheduler_set_clock (sched, sched->current_clock);
if (sched->current_clock) {
g_return_if_fail (GST_IS_SCHEDULER (sched));
GST_FLAG_SET (sched, GST_SCHEDULER_FLAG_FIXED_CLOCK);
- sched->clock = clock;
+
+ gst_object_swap ((GstObject **)&sched->clock, (GstObject *)clock);
GST_DEBUG (GST_CAT_CLOCK, "scheduler using fixed clock %p (%s)", clock,
(clock ? GST_OBJECT_NAME (clock) : "nil"));
receivers = sched->clock_receivers;
schedulers = sched->schedulers;
- sched->current_clock = clock;
+ gst_object_swap ((GstObject **)&sched->current_clock, (GstObject *)clock);
while (receivers) {
GstElement *element = GST_ELEMENT (receivers->data);
g_return_if_fail (GST_IS_SCHEDULER (sched));
GST_FLAG_UNSET (sched, GST_SCHEDULER_FLAG_FIXED_CLOCK);
- sched->clock = NULL;
+
+ gst_object_swap ((GstObject **)&sched->clock, NULL);
GST_DEBUG (GST_CAT_CLOCK, "scheduler using automatic clock");
}
GstSchedulerFactory *factory;
g_return_val_if_fail(name != NULL, NULL);
+
factory = gst_scheduler_factory_find (name);
+
if (!factory) {
factory = GST_SCHEDULER_FACTORY (g_object_new (GST_TYPE_SCHEDULER_FACTORY, NULL));
}
-
- GST_PLUGIN_FEATURE_NAME (factory) = g_strdup (name);
- if (factory->longdesc)
+ else {
g_free (factory->longdesc);
+ }
+
factory->longdesc = g_strdup (longdesc);
factory->type = type;
GST_DEBUG (0,"gstscheduler: find \"%s\"", name);
feature = gst_registry_pool_find_feature (name, GST_TYPE_SCHEDULER_FACTORY);
+
if (feature)
return GST_SCHEDULER_FACTORY (feature);
void
gst_scheduler_factory_set_default_name (const gchar* name)
{
- if (_default_name)
- g_free (_default_name);
+ g_free (_default_name);
_default_name = g_strdup (name);
}