tests: improve the example
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 24 Apr 2009 11:55:13 +0000 (13:55 +0200)
committerWim Taymans <wim@metal.(none)>
Mon, 11 May 2009 22:27:42 +0000 (00:27 +0200)
tests/examples/streams/rtpool-test.c
tests/examples/streams/testrtpool.c

index 539402d..6ef4b3a 100644 (file)
@@ -21,6 +21,17 @@ event_loop (GstBus * bus, GstElement * pipe)
         gst_message_unref (message);
         return;
       case GST_MESSAGE_WARNING:
+      {
+        GError *gerror;
+        gchar *debug;
+
+        gst_message_parse_warning (message, &gerror, &debug);
+        gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
+        gst_message_unref (message);
+        g_error_free (gerror);
+        g_free (debug);
+        return;
+      }
       case GST_MESSAGE_ERROR:{
         GError *gerror;
         gchar *debug;
@@ -79,10 +90,6 @@ sync_bus_handler (GstBus * bus, GstMessage * message, GstElement * bin)
           }
           break;
         case GST_STREAM_STATUS_TYPE_ENTER:
-          if (task) {
-            g_message ("raising task priority for %p", task);
-            gst_task_set_priority (task, G_THREAD_PRIORITY_HIGH);
-          }
           break;
         case GST_STREAM_STATUS_TYPE_LEAVE:
           break;
@@ -101,7 +108,7 @@ sync_bus_handler (GstBus * bus, GstMessage * message, GstElement * bin)
 int
 main (int argc, char *argv[])
 {
-  GstElement *bin, *fakesrc, *fakesink;
+  GstElement *bin, *alsasrc, *alsasink;
   GstBus *bus;
   GstStateChangeReturn ret;
 
@@ -115,19 +122,22 @@ main (int argc, char *argv[])
   g_assert (bin);
 
   /* create a source */
-  fakesrc = gst_element_factory_make ("fakesrc", "fakesrc");
-  g_assert (fakesrc);
-  g_object_set (fakesrc, "num-buffers", 50, NULL);
+  alsasrc = gst_element_factory_make ("alsasrc", "alsasrc");
+  g_assert (alsasrc);
+  g_object_set (alsasrc, "device", "hw:0", NULL);
+  g_object_set (alsasrc, "slave-method", 2, NULL);
 
   /* and a sink */
-  fakesink = gst_element_factory_make ("fakesink", "fakesink");
-  g_assert (fakesink);
+  alsasink = gst_element_factory_make ("alsasink", "alsasink");
+  g_assert (alsasink);
+  g_object_set (alsasink, "device", "hw:0", NULL);
+  g_object_set (alsasink, "buffer-time", (gint64) 10000, NULL);
 
   /* add objects to the main pipeline */
-  gst_bin_add_many (GST_BIN (bin), fakesrc, fakesink, NULL);
+  gst_bin_add_many (GST_BIN (bin), alsasrc, alsasink, NULL);
 
   /* link the elements */
-  gst_element_link (fakesrc, fakesink);
+  gst_element_link (alsasrc, alsasink);
 
   /* get the bus, we need to install a sync handler */
   bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
index 41cd4ed..995a2f5 100644 (file)
@@ -53,22 +53,30 @@ default_push (GstTaskPool * pool, GstTaskPoolFunction func, gpointer data,
   TestRTId *tid;
   gint res;
   pthread_attr_t attr;
-  //struct sched_param param;
+  struct sched_param param;
 
   g_message ("pushing Realtime pool %p, %p", pool, func);
 
   tid = g_slice_new0 (TestRTId);
 
+  g_message ("set policy");
   pthread_attr_init (&attr);
-  /* 
-     pthread_attr_setschedpolicy (&attr, SCHED_RR);
-     param.sched_priority = 50;
-     pthread_attr_setschedparam (&attr, &param);
-   */
+  if ((res = pthread_attr_setschedpolicy (&attr, SCHED_RR)) != 0)
+    g_warning ("setschedpolicy: failure: %p", g_strerror (res));
 
+  g_message ("set prio");
+  param.sched_priority = 50;
+  if ((res = pthread_attr_setschedparam (&attr, &param)) != 0)
+    g_warning ("setschedparam: failure: %p", g_strerror (res));
+
+  g_message ("set inherit");
+  if ((res = pthread_attr_setinheritsched (&attr, PTHREAD_EXPLICIT_SCHED)) != 0)
+    g_warning ("setinheritsched: failure: %p", g_strerror (res));
+
+  g_message ("create thread");
   res = pthread_create (&tid->thread, &attr, (void *(*)(void *)) func, data);
 
-  if (res < 0) {
+  if (res != 0) {
     g_set_error (error, G_THREAD_ERROR, G_THREAD_ERROR_AGAIN,
         "Error creating thread: %s", g_strerror (res));
     g_slice_free (TestRTId, tid);