ekiga r6014 - in trunk: . lib/engine/vidinput/mlogo lib/engine/vidinput/ptlib lib/engine/vidinput/skel src/gui



Author: mschneid
Date: Sat Mar  1 21:19:22 2008
New Revision: 6014
URL: http://svn.gnome.org/viewvc/ekiga?rev=6014&view=rev

Log:
Use the vidinput callbacks in GUI when device comes up and
if device initialisation failed.


Modified:
   trunk/ChangeLog
   trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.cpp
   trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.cpp
   trunk/lib/engine/vidinput/skel/vidinput-core.cpp
   trunk/lib/engine/vidinput/skel/vidinput-core.h
   trunk/lib/engine/vidinput/skel/vidinput-info.h
   trunk/lib/engine/vidinput/skel/vidinput-manager.h
   trunk/src/gui/main.cpp

Modified: trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.cpp
==============================================================================
--- trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.cpp	(original)
+++ trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.cpp	Sat Mar  1 21:19:22 2008
@@ -73,6 +73,8 @@
 
 bool GMVidInputManager_mlogo::open (unsigned width, unsigned height, unsigned fps)
 {
+  Ekiga::VidInputConfig vidinput_config;
+
   PTRACE(4, "GMVidInputManager_mlogo\tOpening Moving Logo with " << width << "x" << height << "/" << fps);
   current_state.width  = width;
   current_state.height = height;
@@ -89,7 +91,12 @@
   m_Pacing.Restart();
 
   current_state.opened  = true;
-  runtime.run_in_main (sigc::bind (vidinputdevice_opened.make_slot (), current_state.vidinput_device, 127, 127, 127, 127, false));
+  vidinput_config.whiteness = 127;
+  vidinput_config.brightness = 127;
+  vidinput_config.colour = 127;
+  vidinput_config.contrast = 127;
+  vidinput_config.modifyable = false;
+  runtime.run_in_main (sigc::bind (vidinputdevice_opened.make_slot (), current_state.vidinput_device, vidinput_config));
   
   return true;
 }

Modified: trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.cpp
==============================================================================
--- trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.cpp	(original)
+++ trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.cpp	Sat Mar  1 21:19:22 2008
@@ -98,6 +98,7 @@
 {
   PVideoDevice::VideoFormat pvideo_format;
   int whiteness, brightness, colour, contrast, hue;
+  Ekiga::VidInputConfig vidinput_config;
 
   PTRACE(4, "GMVidInputManager_ptlib\tOpening Device " << current_state.vidinput_device.source << "/" <<  current_state.vidinput_device.device);
   PTRACE(4, "GMVidInputManager_ptlib\tOpening Device with " << width << "x" << height << "/" << fps);
@@ -127,13 +128,20 @@
 
   if (error_code != Ekiga::ERR_NONE) {
     PTRACE(1, "GMVidInputManager_ptlib\tEncountered error " << error_code << " while opening device ");
-    runtime.run_in_main (sigc::bind (error.make_slot (), error_code));
+    runtime.run_in_main (sigc::bind (vidinputdevice_error.make_slot (), current_state.vidinput_device, error_code));
     return false;
   }
 
   input_device->GetParameters (&whiteness, &brightness, &colour, &contrast, &hue);
   current_state.opened = true;
-  runtime.run_in_main (sigc::bind (vidinputdevice_opened.make_slot (), current_state.vidinput_device, (unsigned) whiteness >> 8, (unsigned) brightness >> 8, (unsigned) colour >> 8, (unsigned) contrast >> 8, true));
+
+  vidinput_config.whiteness = whiteness >> 8;
+  vidinput_config.brightness = brightness >> 8;
+  vidinput_config.colour = colour >> 8;
+  vidinput_config.contrast = contrast >> 8;
+  vidinput_config.modifyable = true;
+
+  runtime.run_in_main (sigc::bind (vidinputdevice_opened.make_slot (), current_state.vidinput_device, vidinput_config));
 
   return true;
 }

Modified: trunk/lib/engine/vidinput/skel/vidinput-core.cpp
==============================================================================
--- trunk/lib/engine/vidinput/skel/vidinput-core.cpp	(original)
+++ trunk/lib/engine/vidinput/skel/vidinput-core.cpp	Sat Mar  1 21:19:22 2008
@@ -154,7 +154,7 @@
   managers.insert (&manager);
   manager_added.emit (manager);
 
-  manager.error.connect (sigc::bind (sigc::mem_fun (this, &VidInputCore::on_error), &manager));
+  manager.vidinputdevice_error.connect (sigc::bind (sigc::mem_fun (this, &VidInputCore::on_vidinputdevice_error), &manager));
   manager.vidinputdevice_added.connect (sigc::bind (sigc::mem_fun (this, &VidInputCore::on_vidinputdevice_added), &manager));
   manager.vidinputdevice_removed.connect (sigc::bind (sigc::mem_fun (this, &VidInputCore::on_vidinputdevice_removed), &manager));
   manager.vidinputdevice_opened.connect (sigc::bind (sigc::mem_fun (this, &VidInputCore::on_vidinputdevice_opened), &manager));
@@ -380,29 +380,29 @@
     current_manager->set_contrast (contrast);
 }
 
-void VidInputCore::on_error (VidInputErrorCodes error_code, VidInputManager *manager)
+void VidInputCore::on_vidinputdevice_error (VidInputDevice & vidinput_device, VidInputErrorCodes error_code, VidInputManager *manager)
 {
-  error.emit (*manager, error_code);
+  vidinputdevice_error.emit (*manager, vidinput_device, error_code);
 }
 
-void VidInputCore::on_vidinputdevice_added (VidInputDevice vidinput_device, VidInputManager *manager)
+void VidInputCore::on_vidinputdevice_added (VidInputDevice & vidinput_device, VidInputManager *manager)
 {
   vidinputdevice_added.emit (*manager, vidinput_device);
 }
 
-void VidInputCore::on_vidinputdevice_removed (VidInputDevice vidinput_device, VidInputManager *manager)
+void VidInputCore::on_vidinputdevice_removed (VidInputDevice & vidinput_device, VidInputManager *manager)
 {
   vidinputdevice_removed.emit (*manager, vidinput_device);
 }
 
-void VidInputCore::on_vidinputdevice_opened (VidInputDevice vidinput_device,
-                               unsigned colour, unsigned brightness, unsigned whiteness, unsigned contrast, bool modifyable, 
-                               VidInputManager *manager)
+void VidInputCore::on_vidinputdevice_opened (VidInputDevice & vidinput_device,
+                                             VidInputConfig & vidinput_config, 
+                                             VidInputManager *manager)
 {
-  vidinputdevice_opened.emit (*manager, vidinput_device, colour, brightness, whiteness, contrast, modifyable);
+  vidinputdevice_opened.emit (*manager, vidinput_device, vidinput_config);
 }
 
-void VidInputCore::on_vidinputdevice_closed (VidInputDevice vidinput_device, VidInputManager *manager)
+void VidInputCore::on_vidinputdevice_closed (VidInputDevice & vidinput_device, VidInputManager *manager)
 {
   vidinputdevice_closed.emit (*manager, vidinput_device);
 }

Modified: trunk/lib/engine/vidinput/skel/vidinput-core.h
==============================================================================
--- trunk/lib/engine/vidinput/skel/vidinput-core.h	(original)
+++ trunk/lib/engine/vidinput/skel/vidinput-core.h	Sat Mar  1 21:19:22 2008
@@ -172,20 +172,20 @@
       
       /** See vidinput-manager.h for the API
        */
-      sigc::signal<void, VidInputManager &, VidInputErrorCodes> error;
-      sigc::signal<void, VidInputManager &, VidInputDevice> vidinputdevice_added;
-      sigc::signal<void, VidInputManager &, VidInputDevice> vidinputdevice_removed;
-      sigc::signal<void, VidInputManager &, VidInputDevice, unsigned, unsigned, unsigned, unsigned, bool> vidinputdevice_opened;
-      sigc::signal<void, VidInputManager &, VidInputDevice> vidinputdevice_closed;
+      sigc::signal<void, VidInputManager &, VidInputDevice &, VidInputErrorCodes> vidinputdevice_error;
+      sigc::signal<void, VidInputManager &, VidInputDevice &> vidinputdevice_added;
+      sigc::signal<void, VidInputManager &, VidInputDevice &> vidinputdevice_removed;
+      sigc::signal<void, VidInputManager &, VidInputDevice &, VidInputConfig&> vidinputdevice_opened;
+      sigc::signal<void, VidInputManager &, VidInputDevice &> vidinputdevice_closed;
 
   private:
-      void on_error (VidInputErrorCodes error_code, VidInputManager *manager);
-      void on_vidinputdevice_added (VidInputDevice vidinput_device, VidInputManager *manager);
-      void on_vidinputdevice_removed (VidInputDevice vidinput_device, VidInputManager *manager);
-      void on_vidinputdevice_opened (VidInputDevice vidinput_device,  
-                                     unsigned colour, unsigned brightness, unsigned whiteness, unsigned contrast, bool modifyable, 
+      void on_vidinputdevice_error (VidInputDevice & vidinput_device, VidInputErrorCodes error_code, VidInputManager *manager);
+      void on_vidinputdevice_added (VidInputDevice & vidinput_device, VidInputManager *manager);
+      void on_vidinputdevice_removed (VidInputDevice & vidinput_device, VidInputManager *manager);
+      void on_vidinputdevice_opened (VidInputDevice & vidinput_device,  
+                                     VidInputConfig & vidinput_config, 
                                      VidInputManager *manager);
-      void on_vidinputdevice_closed (VidInputDevice vidinput_device, VidInputManager *manager);
+      void on_vidinputdevice_closed (VidInputDevice & vidinput_device, VidInputManager *manager);
 
       void internal_open (unsigned width, unsigned height, unsigned fps);
       void internal_close();

Modified: trunk/lib/engine/vidinput/skel/vidinput-info.h
==============================================================================
--- trunk/lib/engine/vidinput/skel/vidinput-info.h	(original)
+++ trunk/lib/engine/vidinput/skel/vidinput-info.h	Sat Mar  1 21:19:22 2008
@@ -93,6 +93,14 @@
     std::string device;
   };
 
+  typedef struct VidInputConfig {
+    unsigned whiteness;
+    unsigned brightness;
+    unsigned colour;
+    unsigned contrast;
+    bool modifyable;
+  };
+
   enum VidInputErrorCodes {
     ERR_NONE = 0,
     ERR_DEVICE,

Modified: trunk/lib/engine/vidinput/skel/vidinput-manager.h
==============================================================================
--- trunk/lib/engine/vidinput/skel/vidinput-manager.h	(original)
+++ trunk/lib/engine/vidinput/skel/vidinput-manager.h	Sat Mar  1 21:19:22 2008
@@ -102,11 +102,11 @@
       virtual void set_whiteness  (unsigned /* whiteness  */ ) {};
       virtual void set_contrast   (unsigned /* contrast   */ ) {};
 
-      sigc::signal<void, VidInputErrorCodes> error;
-      sigc::signal<void, VidInputDevice> vidinputdevice_added;
-      sigc::signal<void, VidInputDevice> vidinputdevice_removed;
-      sigc::signal<void, VidInputDevice, unsigned, unsigned, unsigned, unsigned, bool> vidinputdevice_opened;
-      sigc::signal<void, VidInputDevice> vidinputdevice_closed;
+      sigc::signal<void, VidInputDevice&, VidInputErrorCodes> vidinputdevice_error;
+      sigc::signal<void, VidInputDevice&> vidinputdevice_added;
+      sigc::signal<void, VidInputDevice&> vidinputdevice_removed;
+      sigc::signal<void, VidInputDevice&, VidInputConfig&> vidinputdevice_opened;
+      sigc::signal<void, VidInputDevice&> vidinputdevice_closed;
 
   protected:  
       ManagerState current_state;

Modified: trunk/src/gui/main.cpp
==============================================================================
--- trunk/src/gui/main.cpp	(original)
+++ trunk/src/gui/main.cpp	Sat Mar  1 21:19:22 2008
@@ -898,6 +898,78 @@
 }
 
 void
+on_vidinputdevice_opened_cb (Ekiga::VidInputManager & /* manager */,
+                             Ekiga::VidInputDevice & /* vidinput_device */,
+                             Ekiga::VidInputConfig & /* vidinput_config */,
+                             gpointer self)
+{
+  gm_main_window_update_sensitivity (GTK_WIDGET (self), TRUE, FALSE, TRUE);
+}
+
+void 
+on_vidinputdevice_closed_cb (Ekiga::VidInputManager & /* manager */, Ekiga::VidInputDevice & /*vidinput_device*/, gpointer self)
+{
+  gm_main_window_update_sensitivity (GTK_WIDGET (self), TRUE, FALSE, FALSE);
+  gm_main_window_update_logo_have_window (GTK_WIDGET (self));
+}
+
+void 
+on_vidinputdevice_error_cb (Ekiga::VidInputManager & /* manager */, 
+                            Ekiga::VidInputDevice & vidinput_device, 
+                            Ekiga::VidInputErrorCodes error_code, 
+                            gpointer self)
+{
+  gchar *dialog_title = NULL;
+  gchar *dialog_msg = NULL;
+  gchar *tmp_msg = NULL;
+
+  dialog_title =
+  g_strdup_printf (_("Error while opening video device %s"),
+                   (const char *) vidinput_device.device.c_str());
+
+  tmp_msg = g_strdup (_("A moving logo will be transmitted during calls. Notice that you can always transmit a given image or the moving logo by choosing \"Picture\" as video plugin and \"Moving logo\" or \"Static picture\" as device."));
+  switch (error_code) {
+
+    case Ekiga::ERR_DEVICE:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("There was an error while opening the device. Please check your permissions and make sure that the appropriate driver is loaded."), NULL);
+      break;
+
+    case Ekiga::ERR_FORMAT:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("Your video driver doesn't support the requested video format."), NULL);
+      break;
+
+    case Ekiga::ERR_CHANNEL:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("Could not open the chosen channel."), NULL);
+      break;
+
+    case Ekiga::ERR_COLOUR:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("Your driver doesn't seem to support any of the color formats supported by Ekiga.\n Please check your kernel driver documentation in order to determine which Palette is supported."), NULL);
+      break;
+
+    case Ekiga::ERR_FPS:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("Error while setting the frame rate."), NULL);
+      break;
+
+    case Ekiga::ERR_SCALE:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("Error while setting the frame size."), NULL);
+      break;
+
+    case Ekiga::ERR_NONE:
+    default:
+      dialog_msg = g_strconcat (tmp_msg, "\n\n", _("Unknown error."), NULL);
+      break;
+  }
+
+  gnomemeeting_warning_dialog_on_widget (GTK_WINDOW (GTK_WIDGET (self)),
+                                         VIDEO_DEVICES_KEY "enable_preview",
+                                         dialog_title,
+                                         "%s", dialog_msg);
+  g_free (dialog_msg);
+  g_free (dialog_title);
+  g_free (tmp_msg);
+}
+
+void
 on_logo_update_required_cb (Ekiga::DisplayManager & /* manager */, gpointer self)
 {
   gm_main_window_update_logo_have_window (GTK_WIDGET (self));
@@ -3800,6 +3872,14 @@
   std::vector <Ekiga::VidInputDevice> vidinput_devices;
   vidinput_core->get_vidinput_devices(vidinput_devices);
 
+  conn = vidinput_core->vidinputdevice_opened.connect (sigc::bind (sigc::ptr_fun (on_vidinputdevice_opened_cb), (gpointer) window));
+  mw->connections.push_back (conn);
+
+  conn = vidinput_core->vidinputdevice_closed.connect (sigc::bind (sigc::ptr_fun (on_vidinputdevice_closed_cb), (gpointer) window));
+  mw->connections.push_back (conn);
+
+  conn = vidinput_core->vidinputdevice_error.connect (sigc::bind (sigc::ptr_fun (on_vidinputdevice_error_cb), (gpointer) window));
+  mw->connections.push_back (conn);
   // we have to register the error callback here...		    
 // 	dialog_title =
 // 	  g_strdup_printf (_("Error while opening video device %s"),



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