ekiga r6195 - in trunk: . lib/engine/vidinput/skel
- From: mschneid svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6195 - in trunk: . lib/engine/vidinput/skel
- Date: Mon, 14 Apr 2008 19:47:59 +0100 (BST)
Author: mschneid
Date: Mon Apr 14 19:47:59 2008
New Revision: 6195
URL: http://svn.gnome.org/viewvc/ekiga?rev=6195&view=rev
Log:
Fallback on receiption of the video inut device removed
signal as well. Should not happen too often since the
get_frame_data should have failed anyway before...
Modified:
trunk/ChangeLog
trunk/lib/engine/vidinput/skel/vidinput-core.cpp
trunk/lib/engine/vidinput/skel/vidinput-core.h
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 Apr 14 19:47:59 2008
@@ -212,31 +212,8 @@
void VidInputCore::set_vidinput_device(const VidInputDevice & vidinput_device, int channel, VideoFormat format)
{
- PTRACE(4, "VidInputCore\tSetting device: " << vidinput_device.type << "/" << vidinput_device.source << "/" << vidinput_device.device);
-
- if ( ( desired_device.type != vidinput_device.type ) ||
- ( desired_device.source != vidinput_device.source ) ||
- ( desired_device.device != vidinput_device.device ) ||
- ( current_channel != channel ) ||
- ( current_format != format ) ) {
-
- if (preview_config.active && !stream_config.active)
- preview_manager.stop();
-
- if (preview_config.active || stream_config.active)
- internal_close();
-
- internal_set_device (vidinput_device, channel, format);
-
- if (preview_config.active && !stream_config.active) {
- internal_open(preview_config.width, preview_config.height, preview_config.fps);
- preview_manager.start(preview_config.width,preview_config.height);
- }
-
- if (stream_config.active)
- internal_open(stream_config.width, stream_config.height, stream_config.fps);
-
- }
+ PWaitAndSignal m(var_mutex);
+ internal_set_vidinput_device(vidinput_device, channel, format);
desired_device = vidinput_device;
}
@@ -490,6 +467,27 @@
vidinputdevice_closed.emit (*manager, vidinput_device);
}
+void VidInputCore::internal_set_vidinput_device(const VidInputDevice & vidinput_device, int channel, VideoFormat format)
+{
+ PTRACE(4, "VidInputCore\tSetting device: " << vidinput_device.type << "/" << vidinput_device.source << "/" << vidinput_device.device);
+
+ if (preview_config.active && !stream_config.active)
+ preview_manager.stop();
+
+ if (preview_config.active || stream_config.active)
+ internal_close();
+
+ internal_set_device (vidinput_device, channel, format);
+
+ if (preview_config.active && !stream_config.active) {
+ internal_open(preview_config.width, preview_config.height, preview_config.fps);
+ preview_manager.start(preview_config.width,preview_config.height);
+ }
+
+ if (stream_config.active)
+ internal_open(stream_config.width, stream_config.height, stream_config.fps);
+}
+
void VidInputCore::internal_open (unsigned width, unsigned height, unsigned fps)
{
PTRACE(4, "VidInputCore\tOpening device with " << width << "x" << height << "/" << fps );
@@ -547,7 +545,9 @@
void VidInputCore::add_device (std::string & source, std::string & device, unsigned capabilities, HalManager* /*manager*/)
{
- PTRACE(0, "VidInputCore\tAdding Device");
+ PTRACE(0, "VidInputCore\tAdding Device " << device);
+ PWaitAndSignal m(var_mutex);
+
VidInputDevice vidinput_device;
for (std::set<VidInputManager *>::iterator iter = managers.begin ();
iter != managers.end ();
@@ -557,10 +557,7 @@
if ( ( desired_device.type == vidinput_device.type ) &&
( desired_device.source == vidinput_device.source ) &&
( desired_device.device == vidinput_device.device ) ) {
- desired_device.type = "";
- desired_device.source = "";
- desired_device.device = "";
- set_vidinput_device(vidinput_device, current_channel, current_format);
+ internal_set_vidinput_device(vidinput_device, current_channel, current_format);
}
runtime.run_in_main (sigc::bind (vidinputdevice_added.make_slot (), vidinput_device));
@@ -570,12 +567,25 @@
void VidInputCore::remove_device (std::string & source, std::string & device, unsigned capabilities, HalManager* /*manager*/)
{
- PTRACE(0, "VidInputCore\tRemoving Device");
+ PTRACE(0, "VidInputCore\tRemoving Device " << device);
+ PWaitAndSignal m(var_mutex);
+
VidInputDevice vidinput_device;
for (std::set<VidInputManager *>::iterator iter = managers.begin ();
iter != managers.end ();
iter++) {
if ((*iter)->has_device (source, device, capabilities, vidinput_device)) {
+ if ( ( current_device.type == vidinput_device.type ) &&
+ ( current_device.source == vidinput_device.source ) &&
+ ( current_device.device == vidinput_device.device ) ) {
+
+ VidInputDevice new_vidinput_device;
+ new_vidinput_device.type = VIDEO_INPUT_FALLBACK_DEVICE_TYPE;
+ new_vidinput_device.source = VIDEO_INPUT_FALLBACK_DEVICE_SOURCE;
+ new_vidinput_device.device = VIDEO_INPUT_FALLBACK_DEVICE_DEVICE;
+ internal_set_vidinput_device(new_vidinput_device, current_channel, current_format);
+ }
+
runtime.run_in_main (sigc::bind (vidinputdevice_removed.make_slot (), 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 Mon Apr 14 19:47:59 2008
@@ -196,6 +196,7 @@
VidInputManager *manager);
void on_vidinputdevice_closed (VidInputDevice vidinput_device, VidInputManager *manager);
+ void internal_set_vidinput_device(const VidInputDevice & vidinput_device, int channel, VideoFormat format);
void internal_open (unsigned width, unsigned height, unsigned fps);
void internal_close();
void internal_set_device (const VidInputDevice & vidinput_device, int channel, VideoFormat format);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]