ekiga r6102 - in trunk: . lib/engine/vidinput/mlogo lib/engine/vidinput/ptlib lib/engine/vidinput/skel
- From: mschneid svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6102 - in trunk: . lib/engine/vidinput/mlogo lib/engine/vidinput/ptlib lib/engine/vidinput/skel
- Date: Mon, 31 Mar 2008 20:34:27 +0100 (BST)
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]