[cheese] cheese-camera: Handle more bus messages



commit 82b4a6804bf47817adc1d832d2d0eb62697f6b14
Author: Luciana Fujii Pontello <luciana fujii eti br>
Date:   Thu Jan 13 16:32:36 2011 -0200

    cheese-camera: Handle more bus messages
    
    When bus receives error or warning messages, we parse them and print
    warning messages.

 libcheese/cheese-camera.c |   65 ++++++++++++++++++++++++++++++++------------
 1 files changed, 47 insertions(+), 18 deletions(-)
---
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
index ced9a4f..3eea5ae 100644
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -198,33 +198,62 @@ cheese_camera_bus_message_cb (GstBus *bus, GstMessage *message, CheeseCamera *ca
 {
   CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
-  if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_EOS)
+  switch (GST_MESSAGE_TYPE (message))
   {
-    if (priv->is_recording)
+    case GST_MESSAGE_EOS:
     {
-      GST_DEBUG ("Received EOS message");
+      if (priv->is_recording)
+      {
+        GST_DEBUG ("Received EOS message");
+
+        g_source_remove (priv->eos_timeout_id);
 
-      g_source_remove (priv->eos_timeout_id);
+        /* emit signal by name here as the camera_signals array is empty in this thread */
+        /* TODO: really understand how threads and static works and why this is needed */
+        g_signal_emit_by_name (camera, "video-saved", NULL);
 
-      /* emit signal by name here as the camera_signals array is empty in this thread */
-      /* TODO: really understand how threads and static works and why this is needed */
-      g_signal_emit_by_name (camera, "video-saved", NULL);
+        cheese_camera_change_sink (camera, priv->video_display_bin,
+                                   priv->photo_save_bin, priv->video_save_bin);
+        priv->is_recording = FALSE;
+      }
 
-      cheese_camera_change_sink (camera, priv->video_display_bin,
-                                 priv->photo_save_bin, priv->video_save_bin);
-      priv->is_recording = FALSE;
     }
-  }
-  else if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_STATE_CHANGED)
-  {
-    if (strcmp (GST_MESSAGE_SRC_NAME (message), "pipeline") == 0)
+    case GST_MESSAGE_WARNING:
+    {
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_warning (message, &err, &debug);
+      g_warning ("%s\n", err->message);
+      g_error_free (err);
+      g_free (debug);
+      break;
+    }
+    case GST_MESSAGE_ERROR:
     {
-      GstState old, new;
-      gst_message_parse_state_changed (message, &old, &new, NULL);
-      if (new == GST_STATE_PLAYING)
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &err, &debug);
+      g_warning ("%s\n", err->message);
+      g_error_free (err);
+      g_free (debug);
+      break;
+    }
+    case GST_MESSAGE_STATE_CHANGED:
+    {
+      if (strcmp (GST_MESSAGE_SRC_NAME (message), "pipeline") == 0)
       {
-        g_signal_emit (camera, camera_signals[STATE_CHANGED], 0, new);
+        GstState old, new;
+        gst_message_parse_state_changed (message, &old, &new, NULL);
+        if (new == GST_STATE_PLAYING)
+          g_signal_emit (camera, camera_signals[STATE_CHANGED], 0, new);
       }
+      break;
+    }
+    default:
+    {
+      break;
     }
   }
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]