ekiga r6140 - in trunk: . lib/engine/vidinput/skel src/gui
- From: mschneid svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6140 - in trunk: . lib/engine/vidinput/skel src/gui
- Date: Mon, 7 Apr 2008 18:13:15 +0100 (BST)
Author: mschneid
Date: Mon Apr 7 18:13:14 2008
New Revision: 6140
URL: http://svn.gnome.org/viewvc/ekiga?rev=6140&view=rev
Log:
Perform video device settings updates when getting frames
in order not to block the GUI thread.
Modified:
trunk/ChangeLog
trunk/lib/engine/vidinput/skel/vidinput-core.cpp
trunk/lib/engine/vidinput/skel/vidinput-core.h
trunk/src/gui/main.cpp
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 7 18:13:14 2008
@@ -118,18 +118,36 @@
: runtime (_runtime),
preview_manager(*this, _display_core)
{
- PWaitAndSignal m(var_mutex);
+ PWaitAndSignal m_var(var_mutex);
+ PWaitAndSignal m_set(set_mutex);
preview_config.active = false;
preview_config.width = 176;
preview_config.height = 144;
preview_config.fps = 30;
-
+ preview_config.settings.brightness = 0;
+ preview_config.settings.whiteness = 0;
+ preview_config.settings.colour = 0;
+ preview_config.settings.contrast = 0;
+
+ new_preview_settings.brightness = 0;
+ new_preview_settings.whiteness = 0;
+ new_preview_settings.colour = 0;
+ new_preview_settings.contrast = 0;
stream_config.active = false;
stream_config.width = 176;
stream_config.height = 144;
stream_config.fps = 30;
+ stream_config.settings.brightness = 0;
+ stream_config.settings.whiteness = 0;
+ stream_config.settings.colour = 0;
+ stream_config.settings.contrast = 0;
+
+ new_stream_settings.brightness = 0;
+ new_stream_settings.whiteness = 0;
+ new_stream_settings.colour = 0;
+ new_stream_settings.contrast = 0;
current_manager = NULL;
vidinput_core_conf_bridge = NULL;
@@ -363,39 +381,100 @@
if (current_manager)
current_manager->get_frame_data(width, height, data); // the default device must always return true
}
+ apply_settings();
+ }
+}
+
+void VidInputCore::apply_settings()
+{
+ PWaitAndSignal m_set(set_mutex);
+ if (preview_config.active && !stream_config.active) {
+
+ if (new_preview_settings.colour != preview_config.settings.colour) {
+ current_manager->set_colour (new_preview_settings.colour);
+ preview_config.settings.colour = new_preview_settings.colour;
+ }
+
+ if (new_preview_settings.brightness != preview_config.settings.brightness) {
+ current_manager->set_brightness (new_preview_settings.brightness);
+ preview_config.settings.brightness = new_preview_settings.brightness;
+ }
+
+ if (new_preview_settings.whiteness != preview_config.settings.whiteness) {
+ current_manager->set_whiteness (new_preview_settings.whiteness);
+ preview_config.settings.whiteness = new_preview_settings.whiteness;
+ }
+
+ if (new_preview_settings.contrast != preview_config.settings.contrast) {
+ current_manager->set_contrast (new_preview_settings.contrast);
+ preview_config.settings.contrast = new_preview_settings.contrast;
+ }
+
+ }
+
+ if (!preview_config.active && stream_config.active) {
+
+ if (new_stream_settings.colour != stream_config.settings.colour) {
+ current_manager->set_colour (new_stream_settings.colour);
+ stream_config.settings.colour = new_stream_settings.colour;
+ }
+
+ if (new_stream_settings.brightness != stream_config.settings.brightness) {
+ current_manager->set_brightness (new_stream_settings.brightness);
+ stream_config.settings.brightness = new_stream_settings.brightness;
+ }
+
+ if (new_stream_settings.whiteness != stream_config.settings.whiteness) {
+ current_manager->set_whiteness (new_stream_settings.whiteness);
+ stream_config.settings.whiteness = new_stream_settings.whiteness;
+ }
+
+ if (new_stream_settings.contrast != stream_config.settings.contrast) {
+ current_manager->set_contrast (new_stream_settings.contrast);
+ stream_config.settings.contrast = new_stream_settings.contrast;
+ }
+
}
}
void VidInputCore::set_colour (unsigned colour)
{
- PWaitAndSignal m(var_mutex);
+ PWaitAndSignal m(set_mutex);
+ if (preview_config.active && !stream_config.active)
+ new_preview_settings.colour = colour;
- if (current_manager)
- current_manager->set_colour (colour);
+ if (!preview_config.active && stream_config.active)
+ new_stream_settings.colour = colour;
}
void VidInputCore::set_brightness (unsigned brightness)
{
- PWaitAndSignal m(var_mutex);
+ PWaitAndSignal m(set_mutex);
+ if (preview_config.active && !stream_config.active)
+ new_preview_settings.brightness = brightness;
- if (current_manager)
- current_manager->set_brightness (brightness);
+ if (!preview_config.active && stream_config.active)
+ new_stream_settings.brightness = brightness;
}
void VidInputCore::set_whiteness (unsigned whiteness)
{
- PWaitAndSignal m(var_mutex);
+ PWaitAndSignal m(set_mutex);
+ if (preview_config.active && !stream_config.active)
+ new_preview_settings.whiteness = whiteness;
- if (current_manager)
- current_manager->set_whiteness (whiteness);
+ if (!preview_config.active && stream_config.active)
+ new_stream_settings.whiteness = whiteness;
}
void VidInputCore::set_contrast (unsigned contrast)
{
- PWaitAndSignal m(var_mutex);
+ PWaitAndSignal m(set_mutex);
+ if (preview_config.active && !stream_config.active)
+ new_preview_settings.contrast = contrast ;
- if (current_manager)
- current_manager->set_contrast (contrast);
+ if (!preview_config.active && stream_config.active)
+ new_stream_settings.contrast = contrast ;
}
void VidInputCore::on_vidinputdevice_error (VidInputDevice vidinput_device, VidInputErrorCodes error_code, VidInputManager *manager)
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 7 18:13:14 2008
@@ -58,6 +58,7 @@
unsigned width;
unsigned height;
unsigned fps;
+ VidInputConfig settings;
};
class VidInputManager;
@@ -195,6 +196,8 @@
void internal_close();
void internal_set_device (const VidInputDevice & vidinput_device, int channel, VideoFormat format);
void internal_set_fallback ();
+ void apply_settings();
+
std::set<VidInputManager *> managers;
@@ -203,6 +206,9 @@
DeviceConfig preview_config;
DeviceConfig stream_config;
+ VidInputConfig new_stream_settings;
+ VidInputConfig new_preview_settings;
+
VidInputManager* current_manager;
VidInputDevice desired_device;
VidInputDevice current_device;
@@ -210,6 +216,7 @@
int current_channel;
PMutex var_mutex; /* To protect variables that are read and written */
+ PMutex set_mutex; /* To protect variables that are read and written */
PreviewManager preview_manager;
VidInputCoreConfBridge* vidinput_core_conf_bridge;
Modified: trunk/src/gui/main.cpp
==============================================================================
--- trunk/src/gui/main.cpp (original)
+++ trunk/src/gui/main.cpp Mon Apr 7 18:13:14 2008
@@ -2448,11 +2448,11 @@
g_return_if_fail (data != NULL);
mw = gm_mw_get_mw (GTK_WIDGET (data));
- // Ekiga::AudioInputCore *audioinput_core = dynamic_cast<Ekiga::AudioInputCore *> (mw->core.get ("audioinput-core"));
+ Ekiga::AudioInputCore *audioinput_core = dynamic_cast<Ekiga::AudioInputCore *> (mw->core.get ("audioinput-core"));
Ekiga::AudioOutputCore *audiooutput_core = dynamic_cast<Ekiga::AudioOutputCore *> (mw->core.get ("audiooutput-core"));
audiooutput_core->set_volume(Ekiga::primary, (unsigned)GTK_ADJUSTMENT (mw->adj_output_volume)->value);
-// audioinput_core->set_volume((unsigned)GTK_ADJUSTMENT (mw->adj_input_volume)->value); //FIXME
+ audioinput_core->set_volume((unsigned)GTK_ADJUSTMENT (mw->adj_input_volume)->value);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]