- Removed unused locking from the cothreads
authorWim Taymans <wim.taymans@gmail.com>
Mon, 8 Jul 2002 19:07:30 +0000 (19:07 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Mon, 8 Jul 2002 19:07:30 +0000 (19:07 +0000)
Original commit message from CVS:
- Removed unused locking from the cothreads
- use G_*_DECLS in .h files
- remove gstlog.h include from gstobject.h, add to .c files
- removed unused refcounting code from gstobject
- small fixes in #includes
- Added Scheduling policy and priority properties to gstthread so that
SCHED_FIFO and SCHED_RR threads can be constructed.

39 files changed:
gst/autoplug/gstautoplugcache.c
gst/gst.h
gst/gstautoplug.c
gst/gstautoplug.h
gst/gstbin.c
gst/gstbin.h
gst/gstcaps.c
gst/gstcaps.h
gst/gstclock.h
gst/gstelement.h
gst/gstelementfactory.c
gst/gstextratypes.h
gst/gstobject.c
gst/gstobject.h
gst/gstparse.c
gst/gstparse.h
gst/gstpipeline.c
gst/gstpipeline.h
gst/gstplugin.c
gst/gstplugin.h
gst/gstpluginfeature.c
gst/gstpluginfeature.h
gst/gstprops.h
gst/gstregistry.c
gst/gstscheduler.c
gst/gstscheduler.h
gst/gstsystemclock.h
gst/gstthread.c
gst/gstthread.h
gst/gsttimecache.h
gst/gsttrace.h
gst/gsttype.c
gst/gsttype.h
gst/gsttypefind.c
gst/gsttypefind.h
gst/gsttypes.h
gst/gstutils.h
gst/gstxml.c
gst/gstxml.h

index 7601e02a7c983ceb6dfe7bad0194622033fe71d5..482925e4f6a2af423d00ea015a1d44e76e2fc46b 100644 (file)
@@ -20,7 +20,6 @@
  */
 
 #include <gst/gst.h>
-#include "../cothreads.h"
 
 GstElementDetails gst_autoplugcache_details = {
   "AutoplugCache",
index 4e444295b97cb0a8a4b5666af84eaf5b264d0c60..f3c959e85c6ab218a22215825805d509d1df3e03 100644 (file)
--- a/gst/gst.h
+++ b/gst/gst.h
@@ -58,9 +58,7 @@
 #include <gst/gstextratypes.h>
 #include <gst/gstenumtypes.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 /* initialize GST */
 void                           gst_init                        (int *argc, char **argv[]);
@@ -74,9 +72,7 @@ gboolean                      gst_has_threads                 (void);
 void                           gst_main                        (void);
 void                           gst_main_quit                   (void);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #include <gst/gstlog.h>
 
index e0439b2ad81dd7d4ce80dc737aa28c9854f50d3d..dc314a9f6b921f1d7bad8b62f5e032473aad12de 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "gstautoplug.h"
 #include "gstregistry.h"
+#include "gstlog.h"
 
 enum {
   NEW_OBJECT,
index c8a750bfa0b82f67bbb431e36bd16d8c4237d904..4f4082319db0cafcc18c5654c81e6e06434b4f0b 100644 (file)
@@ -28,9 +28,7 @@
 
 #include <gst/gstelement.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 #define GST_TYPE_AUTOPLUG \
   (gst_autoplug_get_type())
@@ -118,9 +116,7 @@ GstAutoplugFactory* gst_autoplug_factory_find               (const gchar *name);
 GstAutoplug*           gst_autoplug_factory_create             (GstAutoplugFactory *factory);
 GstAutoplug*           gst_autoplug_factory_make               (const gchar *name);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #else /* GST_DISABLE_AUTOPLUG */
 
index dd4b1879159bff1a4f6d5952fc12ea6de6f35b2c..2fdde6bf75e747255d8ef79c2d5cc475f798037f 100644 (file)
@@ -27,6 +27,7 @@
 #include "gstevent.h"
 #include "gstbin.h"
 #include "gstxml.h"
+#include "gstlog.h"
 
 #include "gstscheduler.h"
 
index 76020921058b8f68f0ae4eac0141e270ad7749d4..d03d53668d0de9150cedb0e2e903907024718dd1 100644 (file)
@@ -26,9 +26,7 @@
 
 #include <gst/gstelement.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 extern GstElementDetails gst_bin_details;
 extern GType _gst_bin_type;
@@ -133,9 +131,8 @@ void                gst_bin_child_state_change      (GstBin *bin, GstElementState oldstate,
 
 void           gst_bin_set_pre_iterate_function (GstBin *bin, GstBinPrePostIterateFunction func, gpointer func_data);
 void           gst_bin_set_post_iterate_function (GstBin *bin, GstBinPrePostIterateFunction func, gpointer func_data);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+
+G_END_DECLS
 
 
 #endif /* __GST_BIN_H__ */
index 8e1b21469c81e6341abfea72d91777d3b4ccac86..94388f910bd2fe43553edd7aa342efea95151736 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "gstcaps.h"
 #include "gsttype.h"
+#include "gstlog.h"
 
 static GMemChunk *_gst_caps_chunk;
 static GMutex *_gst_caps_chunk_lock;
index ad4ccb7b070b452730893216e766bf3b9b90d35b..b3d4eb31ec23521ce509632c10ffae57891b13c7 100644 (file)
 #ifndef __GST_CAPS_H__
 #define __GST_CAPS_H__
 
-#include <gst/gstconfig.h>
-
 #include <gst/gstprops.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 typedef struct _GstCaps GstCaps;
 
@@ -140,8 +136,6 @@ xmlNodePtr      gst_caps_save_thyself                       (GstCaps *caps, xmlNodePtr parent);
 GstCaps*       gst_caps_load_thyself                   (xmlNodePtr parent);
 #endif
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GST_CAPS_H__ */
index e9fc321737a235863de1968e230b3dbb107910a1..c714de4c64d47ffbf8fce66548c864e37144d920 100644 (file)
 #ifndef __GST_CLOCK_H__
 #define __GST_CLOCK_H__
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
 #include <gst/gstobject.h>
 
+G_BEGIN_DECLS
+
 #define GST_TYPE_CLOCK \
   (gst_clock_get_type())
 #define GST_CLOCK(obj) \
@@ -130,8 +128,6 @@ GstClockTime                gst_clock_id_get_time           (GstClockID id);
 void                   gst_clock_set_resolution        (GstClock *clock, guint64 resolution);
 guint64                        gst_clock_get_resolution        (GstClock *clock);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GST_CLOCK_H__ */
index 509f616e5260d3015e452e8fbabfcecc948ba0d7..44af35e4742b40f082c1867f4063fb3f0455fbde 100644 (file)
@@ -25,7 +25,6 @@
 #define __GST_ELEMENT_H__
 
 #include <gst/gstconfig.h>
-
 #include <gst/gsttypes.h>
 #include <gst/gstobject.h>
 #include <gst/gstpad.h>
index 3871e3920d01acf33f3913fdebd2ad2f75caeec5..eecc390d08fe026b9ad487ec0ea7b09a0cffb366 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "gstelement.h"
 #include "gstregistry.h"
+#include "gstlog.h"
 
 static void            gst_element_factory_class_init          (GstElementFactoryClass *klass);
 static void            gst_element_factory_init                (GstElementFactory *factory);
index eecd199622c79731e1ac8f391ef7f3d4dd666761..3d6956a48d471de70206fc621e18b9769347b19d 100644 (file)
 #ifndef __GST_EXTRA_TYPES_H__
 #define __GST_EXTRA_TYPES_H__
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
+G_BEGIN_DECLS
 
 #define GST_TYPE_FILENAME (gst_extra_get_filename_type())
        
 GType gst_extra_get_filename_type(void);
 
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GST_EXTRA_TYPES_H__ */
index b8e963e9a28cb54d5a49393fec18f8d9a3a8ec44..cfbc5f36b44b4a31de96691316f82084b96bffea 100644 (file)
@@ -23,6 +23,7 @@
 #include "gst_private.h"
 
 #include "gstobject.h"
+#include "gstlog.h"
 
 /* Object signals and args */
 enum {
@@ -165,7 +166,6 @@ gst_object_ref (GstObject *object)
   g_object_ref (G_OBJECT (object));
   return object;
 }
-#define gst_object_ref gst_object_ref
 
 /**
  * gst_object_unref:
@@ -184,7 +184,6 @@ gst_object_unref (GstObject *object)
 
   g_object_unref (G_OBJECT (object));
 }
-#define gst_object_unref gst_object_unref
 
 /**
  * gst_object_sink:
@@ -395,87 +394,6 @@ gst_object_unparent (GstObject *object)
   gst_object_unref (object);
 }
 
-/**
- * gst_object_ref:
- * @object: GstObject to reference
- *
- * Increments the refence count on the object.
- *
- * Returns: Apointer to the Object
- */
-#ifndef gst_object_ref
-GstObject*
-gst_object_ref (GstObject *object)
-{
-  g_return_if_fail (object != NULL, NULL);
-  g_return_if_fail (GST_IS_OBJECT (object), NULL);
-
-/* #ifdef HAVE_ATOMIC_H */
-/*  g_return_if_fail (atomic_read (&(object->refcount)) > 0); */
-/*  atomic_inc (&(object->refcount)) */
-/* #else */
-  g_return_if_fail (object->refcount > 0);
-  GST_LOCK (object);
-/*  object->refcount++; */
-  g_object_ref((GObject *)object);
-  GST_UNLOCK (object);
-/* #endif */
-
-  return object;
-}
-#endif /* gst_object_ref */
-
-/**
- * gst_object_unref:
- * @object: GstObject to unreference
- *
- * Decrements the refence count on the object.  If reference count hits
- * zero, destroy the object.
- */
-#ifndef gst_object_unref
-void
-gst_object_unref (GstObject *object)
-{
-  int reftest;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (GST_IS_OBJECT (object));
-
-#ifdef HAVE_ATOMIC_H
-  g_return_if_fail (atomic_read (&(object->refcount)) > 0);
-  reftest = atomic_dec_and_test (&(object->refcount))
-#else
-  g_return_if_fail (object->refcount > 0);
-  GST_LOCK (object);
-  object->refcount--;
-  reftest = (object->refcount == 0);
-  GST_UNLOCK (object);
-#endif
-
-  /* if we ended up with the refcount at zero */
-  if (reftest) {
-    /* get the count to 1 for gtk_object_destroy() */
-#ifdef HAVE_ATOMIC_H
-    atomic_set (&(object->refcount),1);
-#else
-    object->refcount = 1;
-#endif
-    /* destroy it */
-    gtk_object_destroy (G_OBJECT (object));
-    /* drop the refcount back to zero */
-#ifdef HAVE_ATOMIC_H
-    atomic_set (&(object->refcount),0);
-#else
-    object->refcount = 0;
-#endif
-    /* finalize the object */
-    /* FIXME this is an evil hack that should be killed */
-/* FIXMEFIXMEFIXMEFIXME */
-/*    gtk_object_finalize(G_OBJECT(object)); */
-  }
-}
-#endif /* gst_object_unref */
-
 /**
  * gst_object_check_uniqueness:
  * @list: a list of #GstObject to check through
index 74a05c9c46af98713faa0d50e92739c2976eed96..c5a3d04696d409e3bfe2c5663c2b7c849500ede6 100644 (file)
 #include <gst/gsttrace.h>
 #include <gst/gsttypes.h>
 
-/* FIXME */
-#include "gstlog.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 extern GType _gst_object_type;
 
@@ -75,14 +70,8 @@ struct _GstObject {
   GObject      object;
 
   gchar        *name;
-  /* have to have a refcount for the object */
-#ifdef HAVE_ATOMIC_H
-  atomic_t     refcount;
-#else
-  gint                 refcount;
-#endif
 
-  /* locking for all sorts of things (like the refcount) */
+  /* locking for all sorts of things */
   GMutex       *lock;
   /* this object's parent */
   GstObject    *parent;
@@ -176,10 +165,7 @@ void               gst_class_signal_emit_by_name   (GstObject      *object,
 #endif
 
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
+G_END_DECLS
 
 #endif /* __GST_OBJECT_H__ */
 
index 835a0f1111928bcdb50786f414703b095d0259c2..cc753c88cd73d5e8308c7d42f54acb45efa5adf4 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "gstparse.h"
 #include "gstinfo.h"
+#include "gstlog.h"
 #include "parse/types.h"
 
 typedef struct _gst_parse_delayed_pad gst_parse_delayed_pad;
index 807f001137e1455f8047ffd7caf877ba129a29d1..a8569b51e0232670037ea91687f661d522826ff0 100644 (file)
@@ -23,7 +23,7 @@
 #ifndef __GST_PARSE_H__
 #define __GST_PARSE_H__
 
-#include <gst/gstpipeline.h>
+#include <gst/gstbin.h>
 
 G_BEGIN_DECLS
 
index 5a57c91ac7b212da2b18efa47fa460cc1af55091..972c712dfbf9a9ffa8a732dc99f3156c9839ee06 100644 (file)
@@ -23,6 +23,7 @@
 #include "gst_private.h"
 
 #include "gstpipeline.h"
+#include "gstlog.h"
 #include "gstscheduler.h"
 
 GstElementDetails gst_pipeline_details = {
index 7539c04aa68301e6d60a54542666021d7429dcb7..3e15e01bdb5d702f4f16a6797aa47a7d26a521ff 100644 (file)
@@ -26,9 +26,7 @@
 
 #include <gst/gstbin.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 extern GstElementDetails gst_pipeline_details;
 
@@ -59,10 +57,7 @@ GstElement*  gst_pipeline_new                (const gchar *name);
 #define                gst_pipeline_destroy(pipeline)  gst_object_destroy(GST_OBJECT(pipeline))
 
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
+G_END_DECLS
 
 #endif /* __GST_PIPELINE_H__ */
 
index 2ceac5f7f4df26074a7a634a81357b57a8df940f..041b3514926b48784856c686ade351211199d799 100644 (file)
@@ -29,6 +29,7 @@
 #include "gstplugin.h"
 #include "gstversion.h"
 #include "gstregistry.h"
+#include "gstlog.h"
 #include "config.h"
 
 static GModule *main_module;
index d19fc21c7ff17ead2bdb64762d3296b01772a7d5..130d9da6b83d30c524faece077b5b1e76a0d7ce9 100644 (file)
 #include <gst/gstconfig.h>
 
 #include <gmodule.h>
-
 #include <gst/gstpluginfeature.h>
 
+G_BEGIN_DECLS
+
 GQuark gst_plugin_error_quark (void);
 #define GST_PLUGIN_ERROR gst_plugin_error_quark ()
 
@@ -119,5 +120,6 @@ void                        gst_plugin_add_feature          (GstPlugin *plugin, GstPluginFeature *feature);
 gboolean               gst_plugin_load                 (const gchar *name);
 gboolean               gst_library_load                (const gchar *name);
 
+G_END_DECLS
 
 #endif /* __GST_PLUGIN_H__ */
index ae29f0d7eb7cb32fbada2c1b05de566cf347b8d2..19e2895c1fb0b881042b42000ae7bfd2f0e3b59b 100644 (file)
 #include "gstpluginfeature.h"
 #include "gstplugin.h"
 #include "gstregistry.h"
+#include "gstlog.h"
 
 static void            gst_plugin_feature_class_init           (GstPluginFeatureClass *klass);
 static void            gst_plugin_feature_init                 (GstPluginFeature *feature);
 
-static GstObjectClass *parent_class = NULL;
+static GObjectClass *parent_class = NULL;
 /* static guint gst_plugin_feature_signals[LAST_SIGNAL] = { 0 }; */
 
 GType
index e369a0977e06022282fafeeeb93a76326043b412..f1c17801b5f29e52e0613d28f40f4deb7bd9de7d 100644 (file)
 #ifndef __GST_PLUGIN_FEATURE_H__
 #define __GST_PLUGIN_FEATURE_H__
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+#include <glib-object.h>
 
-#include <gst/gstobject.h>
+G_BEGIN_DECLS
 
 #define GST_TYPE_PLUGIN_FEATURE \
   (gst_plugin_feature_get_type())
@@ -67,9 +65,7 @@ GType         gst_plugin_feature_get_type             (void);
 gboolean       gst_plugin_feature_ensure_loaded        (GstPluginFeature *feature);
 void           gst_plugin_feature_unload_thyself       (GstPluginFeature *feature);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 
 #endif /* __GST_PLUGIN_FEATURE_H__ */
index 03876889278134a2e388559285ed4d2d568840c8..81d8d5c934ad1ce584771d0ba44fd32b8ac8ce97 100644 (file)
@@ -28,9 +28,7 @@
 
 #include <glib-object.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 typedef struct _GstProps GstProps;
 extern GType _gst_props_type;
@@ -140,8 +138,6 @@ GstProps*           gst_props_load_thyself          (xmlNodePtr parent);
 #endif
 
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GST_PROPS_H__ */
index 7da950bb10483802ad580912941836f488ceed56..19a0e5327bca70ae9301acf7d570df9e82e1cba9 100644 (file)
@@ -30,6 +30,8 @@
 
 #include "gstinfo.h"
 #include "gstregistry.h"
+#include "gstlog.h"
+#include "gstmarshal.h"
 
 #define CLASS(registry)  GST_REGISTRY_CLASS (G_OBJECT_GET_CLASS (registry))
 
index bc3bc6041a2060c4ac009b23238df26ef49b7fd2..16f926e13c66544ce21facdd7cb7b8376f588919 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "gstsystemclock.h"
 #include "gstscheduler.h"
+#include "gstlog.h"
 #include "gstregistry.h"
 
 static void    gst_scheduler_class_init        (GstSchedulerClass *klass);
index c694174c1b0907bd7f325e0246cf07ffc1d92d6c..9492bfdc3794bd02ba2455b4f90ce02861923958 100644 (file)
 #include <gst/gstelement.h>
 #include <gst/gstbin.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
+G_BEGIN_DECLS
 
 #define GST_TYPE_SCHEDULER \
   (gst_scheduler_get_type())
@@ -184,8 +181,6 @@ void                        gst_scheduler_factory_set_default_name  (const gchar* name);
 const gchar*           gst_scheduler_factory_get_default_name  (void);
 
 
-#ifdef __cplusplus   
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GST_SCHEDULER_H__ */
index f972e12e15ee41f077f54b916fe1cc174f5b39ed..2bedb7213c1c58e3fdf1ce765497528abd0c0744 100644 (file)
@@ -26,9 +26,7 @@
 
 #include <gst/gstclock.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 #define GST_TYPE_SYSTEM_CLOCK \
   (gst_system_clock_get_type())
@@ -57,9 +55,6 @@ GType                         gst_system_clock_get_type       (void);
 
 GstClock*              gst_system_clock_obtain         (void);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
+G_END_DECLS
 
 #endif /* __GST_SYSTEM_CLOCK_H__ */
index fdd46849baf4f0dd7734f5d858fcbecc6601c92d..061fa0eda33c164fcc81e07005ce3243d59243a8 100644 (file)
@@ -42,6 +42,7 @@ GstElementDetails gst_thread_details = {
 
 /* Thread signals and args */
 enum {
+  SHUTDOWN,
   /* FILL ME */
   LAST_SIGNAL
 };
@@ -54,6 +55,8 @@ enum {
 
 enum {
   ARG_0,
+  ARG_SCHEDPOLICY,
+  ARG_PRIORITY,
 };
 
 
@@ -75,8 +78,24 @@ static void                  gst_thread_restore_thyself      (GstObject *object, xmlNodePtr self);
 
 static void*                   gst_thread_main_loop            (void *arg);
 
+#define GST_TYPE_THREAD_SCHEDPOLICY (gst_thread_schedpolicy_get_type())
+static GType
+gst_thread_schedpolicy_get_type(void) {
+  static GType thread_schedpolicy_type = 0;
+  static GEnumValue thread_schedpolicy[] = {
+    {SCHED_OTHER, "SCHED_OTHER", "Normal Scheduling"},
+    {SCHED_FIFO,  "SCHED_FIFO",  "FIFO Scheduling (requires root)"},
+    {SCHED_RR,    "SCHED_RR",    "Round-Robin Scheduling (requires root)"},
+    {0, NULL, NULL},
+  };
+  if (!thread_schedpolicy_type) {
+    thread_schedpolicy_type = g_enum_register_static("GstThreadSchedPolicy", thread_schedpolicy);
+  }
+  return thread_schedpolicy_type;
+}
+
 static GstBinClass *parent_class = NULL;
-/* static guint gst_thread_signals[LAST_SIGNAL] = { 0 }; */
+static guint gst_thread_signals[LAST_SIGNAL] = { 0 }; 
 
 GType
 gst_thread_get_type(void) {
@@ -115,6 +134,18 @@ gst_thread_class_init (GstThreadClass *klass)
 
   parent_class = g_type_class_ref (GST_TYPE_BIN);
 
+  g_object_class_install_property(G_OBJECT_CLASS (klass), ARG_SCHEDPOLICY,
+    g_param_spec_enum("schedpolicy", "Scheduling Policy", "The scheduling policy of the thread",
+                      GST_TYPE_THREAD_SCHEDPOLICY, SCHED_OTHER, G_PARAM_READWRITE));
+  g_object_class_install_property(G_OBJECT_CLASS (klass), ARG_PRIORITY,
+    g_param_spec_int("priority", "Scheduling Priority", "The scheduling priority of the thread",
+                     0, 99, 0, G_PARAM_READWRITE));
+
+  gst_thread_signals[SHUTDOWN] =
+    g_signal_new ("shutdown", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GstThreadClass, shutdown), NULL, NULL,
+                  gst_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
   gobject_class->dispose =             gst_thread_dispose;
 
 #ifndef GST_DISABLE_LOADSAVE
@@ -148,6 +179,8 @@ gst_thread_init (GstThread *thread)
 
   thread->ppid = getpid ();
   thread->thread_id = -1;
+  thread->sched_policy = SCHED_OTHER;
+  thread->priority = 0;
 }
 
 static void
@@ -170,10 +203,20 @@ gst_thread_dispose (GObject *object)
 static void
 gst_thread_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 {
+  GstThread *thread;
+
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail (GST_IS_THREAD (object));
 
+  thread = GST_THREAD (object);
+
   switch (prop_id) {
+    case ARG_SCHEDPOLICY:
+      thread->sched_policy = g_value_get_enum (value);
+      break;
+    case ARG_PRIORITY:
+      thread->priority = g_value_get_int (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -183,10 +226,20 @@ gst_thread_set_property (GObject *object, guint prop_id, const GValue *value, GP
 static void
 gst_thread_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 {
+  GstThread *thread;
+
   /* it's not null if we got it, but it might not be ours */
   g_return_if_fail (GST_IS_THREAD (object));
 
+  thread = GST_THREAD (object);
+
   switch (prop_id) {
+    case ARG_SCHEDPOLICY:
+      g_value_set_enum (value, thread->sched_policy);
+      break;
+    case ARG_PRIORITY:
+      g_value_set_int (value, thread->priority);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -275,6 +328,7 @@ gst_thread_change_state (GstElement * element)
 
       if (pthread_attr_init (&thread->attr) != 0)
        g_warning ("pthread_attr_init returned an error !");
+
       if (gst_scheduler_get_preferred_stack (GST_ELEMENT_SCHED (element), &thread->stack, &stacksize)) {
         if (pthread_attr_setstack (&thread->attr, thread->stack, stacksize) != 0) {
           g_warning ("pthread_attr_setstack failed");
@@ -465,6 +519,20 @@ gst_thread_main_loop (void *arg)
   thread = GST_THREAD (arg);
   g_mutex_lock (thread->lock);
 
+  if (thread->sched_policy != SCHED_OTHER) {
+    struct sched_param sched_param;
+
+    memset (&sched_param, 0, sizeof (sched_param));
+    if (thread->priority == 0) {
+      thread->priority = sched_get_priority_max (thread->sched_policy);
+    }
+    sched_param.sched_priority = thread->priority;
+
+    if (sched_setscheduler (0, thread->sched_policy, &sched_param) != 0) {
+      GST_DEBUG (GST_CAT_THREAD, "not running with real-time priority");
+    }
+  }
+
   gst_scheduler_setup (GST_ELEMENT_SCHED (thread));
   GST_FLAG_UNSET (thread, GST_THREAD_STATE_REAPING);
 
@@ -600,6 +668,9 @@ gst_thread_main_loop (void *arg)
 
   GST_INFO (GST_CAT_THREAD, "gstthread: thread \"%s\" is stopped",
                  GST_ELEMENT_NAME (thread));
+
+  g_signal_emit (G_OBJECT (thread), gst_thread_signals[SHUTDOWN], 0);
+
   return NULL;
 }
 
index bb911e067dc461f4b1160daf57e3f7e6119ed7ec..475e5e5e87fe3ff36a1bf2266b2e4640c40c93b1 100644 (file)
@@ -30,9 +30,7 @@
 #include <gst/gstbin.h>
 
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 extern GstElementDetails gst_thread_details;
 
@@ -62,30 +60,33 @@ typedef struct _GstThread   GstThread;
 typedef struct _GstThreadClass         GstThreadClass;
 
 struct _GstThread {
-  GstBin bin;
-
-  pthread_t thread_id;         /* id of the thread, if any */
-  pthread_attr_t attr;         /* attributes for the stack space */
-  void *stack;                 /* set with gst_scheduler_get_preferred_stack */
-  gint pid;                    /* the pid of the thread */
-  gint ppid;                   /* the pid of the thread's parent process */
-  GMutex *lock;                        /* thread lock/condititon pair ... */
-  GCond *cond;                 /* .... used to control the thread */
-
-  gint transition;             /* the current state transition */
+  GstBin        bin;
+
+  pthread_t     thread_id;             /* id of the thread, if any */
+  pthread_attr_t attr;                 /* attributes for the stack space */
+  int           sched_policy;
+  int           priority;
+  void                 *stack;                 /* set with gst_scheduler_get_preferred_stack */
+  gint          pid;                   /* the pid of the thread */
+  gint          ppid;                  /* the pid of the thread's parent process */
+  GMutex       *lock;                  /* thread lock/condititon pair ... */
+  GCond        *cond;                  /* .... used to control the thread */
+
+  gint          transition;            /* the current state transition */
 };
 
 struct _GstThreadClass {
   GstBinClass parent_class;
+
+  /* signals */
+  void (*shutdown)     (GstThread *thread);
 };
 
 GType  gst_thread_get_type     (void);
 
 GstElement*    gst_thread_new          (const gchar *name);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 
 #endif /* __GST_THREAD_H__ */     
index ff150e69ec9c467504b2ec24a543e51e3a4c75ca..330e57d8bfb4396385514d52176bde8b333d9a31 100644 (file)
 
 #include <gst/gstobject.h>
 
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
+G_BEGIN_DECLS
 
 #define GST_TYPE_TIME_CACHE            (gst_time_cache_get_type ())
 #define GST_TIME_CACHE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TIME_CACHE, GstTimeCache))
@@ -100,9 +96,7 @@ void                 gst_time_cache_add_entry        (GstTimeCache *tc, guint64 location, gint64 time
 gboolean               gst_time_cache_find_location    (GstTimeCache *tc, guint64 location, gint64 *timestamp);
 gboolean               gst_time_cache_find_timestamp   (GstTimeCache *tc, gint64 timestamp, guint64 *location);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
 
+G_END_DECLS
 
 #endif /* __GST_TIME_CACHE_H__ */
index 22963841bbf408a7e92904a7cca8277c64a13497..d342e26549355d4c536db01aa3b53aa0b25ffd21 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <glib.h>
 
+G_BEGIN_DECLS
 
 typedef struct _GstTrace       GstTrace;
 typedef struct _GstTraceEntry  GstTraceEntry;
@@ -93,4 +94,6 @@ extern gint _gst_trace_on;
 
 #endif /* GST_DISABLE_TRACE */
 
+G_END_DECLS
+
 #endif /* __GST_TRACE_H__ */
index 7c6893b212e09f17b59ec37aaa4578bd04cf6cee..f5dd2f79c9bb20962a78c17400e0204ed6f9b4ab 100644 (file)
@@ -31,6 +31,8 @@
 
 #include "gsttype.h"
 #include "gstregistry.h"
+#include "gstobject.h"
+#include "gstlog.h"
 
 
 /* global list of registered types */
index 3080c03db7b9081875bad5b7cd1bf0bc40d5996d..f89dccd29cfb98d29a68f72e6a7fb7349867051c 100644 (file)
@@ -28,6 +28,7 @@
 #include <gst/gstcaps.h>
 #include <gst/gstpluginfeature.h>
 
+G_BEGIN_DECLS
 
 /* type of function used to check a stream for equality with type */
 typedef GstCaps *(*GstTypeFindFunc) (GstBuffer *buf, gpointer priv);
@@ -97,4 +98,6 @@ GstType*              gst_type_find_by_id             (guint16 id);
 /* get the list of registered types (returns list of GstType!) */
 const GList*           gst_type_get_list               (void);
 
+G_END_DECLS
+
 #endif /* __GST_TYPE_H__ */
index cd2101a8e988cb1e8a187a1212eb4dc74ef60f9b..032e7230c91449d20fbcccc9dba6809dbdad2615 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "gsttype.h"
 
+#include "gstlog.h"
 #include "gsttypefind.h"
 
 /* #define GST_DEBUG_ENABLED */
index b40842c314b4be1d26c74042e26e6df41b12e029..8c1d6d36d7f2a70af6e660e116c94e75096d0b8f 100644 (file)
 
 #include <gst/gstelement.h>
 
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 extern GstElementDetails gst_type_find_details;
 
@@ -67,9 +64,7 @@ struct _GstTypeFindClass {
 GType gst_type_find_get_type (void);
 
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* GST_DISABLE_TYPE_FIND */
 
index 5595ab574d3fb7415bf384510aa8a952b477a536..06e6b7ba0634eec9c9ea6b508ab78fb2f764e05f 100644 (file)
@@ -1,6 +1,29 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
 #ifndef __GST_TYPES_H__
 #define __GST_TYPES_H__
 
+#include <glib.h>
+
+G_BEGIN_DECLS
+
 typedef struct _GstObject GstObject;
 typedef struct _GstObjectClass GstObjectClass;
 typedef struct _GstPad GstPad;
@@ -35,4 +58,6 @@ typedef enum {
   GST_RESULT_NOT_IMPL,
 } GstResult;
 
-#endif
+G_END_DECLS
+
+#endif /* __GST_TYPES_H__ */
index 4b8a46cbe709e4dc9186ac1ce3ec52b9108e4497..373c0e8feae0557f20a984d6d49337a25c633703 100644 (file)
 #define __GST_UTILS_H__
 
 #include <glib.h>
-#include <gst/gstobject.h>
+#include <gst/gstelement.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 gboolean        gst_util_has_arg                (GObject *object, const gchar *argname,
                                                 GType    arg_type);
@@ -50,8 +48,6 @@ void          gst_util_dump_mem               (guchar *mem, guint size);
 void           gst_print_pad_caps              (GString *buf, gint indent, GstPad *pad);
 void           gst_print_element_args          (GString *buf, gint indent, GstElement *element);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GST_UTILS_H__ */
index adcf5a1f98b920ef47376c7e1a0fef4ffc64b279..40e60ccc1ed9a48d5beb5705204bb6195b5c2b30 100644 (file)
@@ -23,6 +23,7 @@
 #include "gst_private.h"
 
 #include "gstxml.h"
+#include "gstlog.h"
 #include "gstbin.h"
 
 enum {
index e3f83b79d9370db4afb56dd42fc3483b105e78ae..0ef2ded37cac15d8da394b61a627ed83e6593a58 100644 (file)
@@ -29,9 +29,7 @@
 
 #include <gst/gstelement.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 #define GST_TYPE_XML \
   (gst_xml_get_type())
@@ -84,9 +82,7 @@ GList*                gst_xml_get_topelements (GstXML *xml);
 
 GstElement*    gst_xml_make_element    (xmlNodePtr cur, GstObject *parent);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #else /* GST_DISABLE_LOADSAVE */