ekiga r6102 - in trunk: . lib/engine/vidinput/mlogo lib/engine/vidinput/ptlib lib/engine/vidinput/skel



Author: mschneid
Date: Mon Mar 31 20:34:26 2008
New Revision: 6102
URL: http://svn.gnome.org/viewvc/ekiga?rev=6102&view=rev

Log:
Add internal_set_fallback routing to VidInputCore.
Also fallback if get_frame_data fails.



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

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	Mon Mar 31 20:34:26 2008
@@ -109,13 +109,13 @@
   runtime.run_in_main (sigc::bind (vidinputdevice_closed.make_slot (), current_state.vidinput_device));
 }
 
-void GMVidInputManager_mlogo::get_frame_data (unsigned & width,
+bool GMVidInputManager_mlogo::get_frame_data (unsigned & width,
                      unsigned & height,
                      char *data)
 {
   if (!current_state.opened) {
     PTRACE(1, "GMVidInputManager_mlogo\tTrying to get frame from closed device");
-    return;
+    return true;
   }
   
   m_Pacing.Delay (1000 / current_state.fps);
@@ -137,6 +137,7 @@
 
   width  = current_state.width;
   height = current_state.height;
+  return true;
 }
 
 void GMVidInputManager_mlogo::CopyYUVArea (const char* srcFrame,

Modified: trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.h
==============================================================================
--- trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.h	(original)
+++ trunk/lib/engine/vidinput/mlogo/vidinput-manager-mlogo.h	Mon Mar 31 20:34:26 2008
@@ -79,7 +79,7 @@
 
       virtual void close();
 
-      virtual void get_frame_data (unsigned & width,
+      virtual bool get_frame_data (unsigned & width,
                            unsigned & height,
                            char *data);
 

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	Mon Mar 31 20:34:26 2008
@@ -157,13 +157,14 @@
   runtime.run_in_main (sigc::bind (vidinputdevice_closed.make_slot (), current_state.vidinput_device));
 }
 
-void GMVidInputManager_ptlib::get_frame_data (unsigned & width,
+bool GMVidInputManager_ptlib::get_frame_data (unsigned & width,
                      unsigned & height,
                      char *data)
 {
+  bool ret = false;
   if (!current_state.opened) {
     PTRACE(1, "GMVidInputManager_ptlib\tTrying to get frame from closed device");
-    return;
+    return false;
   }
 
   width = current_state.width;
@@ -172,10 +173,13 @@
   PINDEX I = 0;
 
   if (input_device)
-    input_device->GetFrameData ((BYTE*)data, &I);
+    ret = input_device->GetFrameData ((BYTE*)data, &I);
 
-  if ((unsigned) I != expectedFrameSize)
+  if ((unsigned) I != expectedFrameSize) {
     PTRACE(1, "GMVidInputManager_ptlib\tExpected a frame of " << expectedFrameSize << " bytes but got " << I << " bytes");
+    ret = false;
+  }
+  return ret;
 }
 
 void GMVidInputManager_ptlib::set_colour (unsigned colour)

Modified: trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.h
==============================================================================
--- trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.h	(original)
+++ trunk/lib/engine/vidinput/ptlib/vidinput-manager-ptlib.h	Mon Mar 31 20:34:26 2008
@@ -77,7 +77,7 @@
 
       virtual void close();
 
-      virtual void get_frame_data (unsigned & width,
+      virtual bool get_frame_data (unsigned & width,
                            unsigned & height,
                            char *data);
 

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	Mon Mar 31 20:34:26 2008
@@ -347,8 +347,23 @@
 {
   PWaitAndSignal m(var_mutex);
 
-  if (current_manager)
-    current_manager->get_frame_data(width, height, data);
+  if (current_manager) {
+    if (!current_manager->get_frame_data(width, height, data)) {
+
+      internal_close();
+
+      internal_set_fallback();
+
+      if (preview_config.active && !stream_config.active)
+        internal_open(preview_config.width, preview_config.height, preview_config.fps);
+
+      if (stream_config.active)
+        internal_open(stream_config.width, stream_config.height, stream_config.fps);
+
+      if (current_manager)
+        current_manager->get_frame_data(width, height, data); // the default device must always return true
+    }
+  }
 }
 
 void VidInputCore::set_colour (unsigned colour)
@@ -406,13 +421,7 @@
 
   if (current_manager && !current_manager->open(width, height, fps)) {
 
-    PTRACE(3, "VidInputCore\tFalling back to " << FALLBACK_DEVICE_TYPE << "/" << FALLBACK_DEVICE_SOURCE << "/" << FALLBACK_DEVICE_DEVICE);
-    VidInputDevice vidinput_device;
-    vidinput_device.type = FALLBACK_DEVICE_TYPE;
-    vidinput_device.source = FALLBACK_DEVICE_SOURCE;
-    vidinput_device.device = FALLBACK_DEVICE_DEVICE;
-
-    internal_set_device(vidinput_device, current_channel, current_format);
+    internal_set_fallback();
     if (current_manager)
       current_manager->open(width, height, fps);
   }
@@ -436,20 +445,8 @@
     current_device  = vidinput_device;
   }
   else {
-
     PTRACE(1, "VidInputCore\tTried to set unexisting device " << vidinput_device.type << "/" << vidinput_device.source << "/" << vidinput_device.device);
-    PTRACE(1, "VidInputCore\tFalling back to " << FALLBACK_DEVICE_TYPE << "/" << FALLBACK_DEVICE_SOURCE << "/" << FALLBACK_DEVICE_DEVICE);
-    current_device.type = FALLBACK_DEVICE_TYPE;
-    current_device.source = FALLBACK_DEVICE_SOURCE;
-    current_device.device = FALLBACK_DEVICE_DEVICE;
-
-    for (std::set<VidInputManager *>::iterator iter = managers.begin ();
-         iter != managers.end ();
-         iter++) {
-       if ((*iter)->set_vidinput_device (current_device, channel, format)) {
-         current_manager = (*iter);
-       }
-    }
+    internal_set_fallback();
   }
 
   current_channel = channel;
@@ -463,6 +460,16 @@
     current_manager->close();
 }
 
+void VidInputCore::internal_set_fallback ()
+{
+  PTRACE(3, "VidInputCore\tFalling back to " << FALLBACK_DEVICE_TYPE << "/" << FALLBACK_DEVICE_SOURCE << "/" << FALLBACK_DEVICE_DEVICE);
+  current_device.type = FALLBACK_DEVICE_TYPE;
+  current_device.source = FALLBACK_DEVICE_SOURCE;
+  current_device.device = FALLBACK_DEVICE_DEVICE;
+
+  internal_set_device(current_device, current_channel, current_format);
+}
+
 void VidInputCore::add_device (std::string & source, std::string & device, unsigned capabilities, HalManager* /*manager*/)
 {
   PTRACE(0, "VidInputCore\tAdding Device");
@@ -495,3 +502,4 @@
      }
   }
 }
+

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	Mon Mar 31 20:34:26 2008
@@ -194,6 +194,7 @@
       void internal_open (unsigned width, unsigned height, unsigned fps);
       void internal_close();
       void internal_set_device (const VidInputDevice & vidinput_device, int channel, VideoFormat format);
+      void internal_set_fallback ();
 
       std::set<VidInputManager *> managers;
 

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	Mon Mar 31 20:34:26 2008
@@ -90,7 +90,7 @@
 
       virtual bool open (unsigned width, unsigned height, unsigned fps) = 0;
 
-      virtual void get_frame_data (unsigned & width,
+      virtual bool get_frame_data (unsigned & width,
                            unsigned & height,
                            char *data) = 0;
 



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