ekiga r6343 - in trunk: . lib/engine/audioinput/skel lib/engine/audiooutput/skel src/gui



Author: mschneid
Date: Mon Jun  2 15:05:33 2008
New Revision: 6343
URL: http://svn.gnome.org/viewvc/ekiga?rev=6343&view=rev

Log:
Add debug level 5.
Allow lower priority threads to catch the mutexes
in the audio cores by telling the high priority
threads to sleep 5 ms before taking it. Now
preferences can also be opened during a call
with decent latency.



Modified:
   trunk/ChangeLog
   trunk/lib/engine/audioinput/skel/audioinput-core.cpp
   trunk/lib/engine/audioinput/skel/audioinput-core.h
   trunk/lib/engine/audiooutput/skel/audiooutput-core.cpp
   trunk/lib/engine/audiooutput/skel/audiooutput-core.h
   trunk/src/gui/main.cpp

Modified: trunk/lib/engine/audioinput/skel/audioinput-core.cpp
==============================================================================
--- trunk/lib/engine/audioinput/skel/audioinput-core.cpp	(original)
+++ trunk/lib/engine/audioinput/skel/audioinput-core.cpp	Mon Jun  2 15:05:33 2008
@@ -138,6 +138,7 @@
   audioinput_core_conf_bridge = NULL;
   average_level = 0;
   calculate_average = false;
+  yield = false;
 }
 
 AudioInputCore::~AudioInputCore ()
@@ -172,6 +173,7 @@
 
 void AudioInputCore::visit_managers (sigc::slot<bool, AudioInputManager &> visitor)
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
   bool go_on = true;
   
@@ -183,6 +185,7 @@
 
 void AudioInputCore::get_devices (std::vector <AudioInputDevice> & devices)
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   devices.clear();
@@ -215,6 +218,7 @@
 void AudioInputCore::add_device (const std::string & source, const std::string & device_name, HalManager* /*manager*/)
 {
   PTRACE(0, "AudioInputCore\tAdding Device " << device_name);
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   AudioInputDevice device;
@@ -234,6 +238,7 @@
 void AudioInputCore::remove_device (const std::string & source, const std::string & device_name, HalManager* /*manager*/)
 {
   PTRACE(0, "AudioInputCore\tRemoving Device " << device_name);
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   AudioInputDevice device;
@@ -257,6 +262,7 @@
 
 void AudioInputCore::start_preview (unsigned channels, unsigned samplerate, unsigned bits_per_sample)
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   PTRACE(4, "AudioInputCore\tStarting preview " << channels << "x" << samplerate << "/" << bits_per_sample);
@@ -283,6 +289,7 @@
 
 void AudioInputCore::stop_preview ()
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   PTRACE(4, "AudioInputCore\tStopping Preview");
@@ -300,6 +307,7 @@
 
 void AudioInputCore::set_stream_buffer_size (unsigned buffer_size, unsigned num_buffers)
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   PTRACE(4, "AudioInputCore\tSetting stream buffer size " << num_buffers << "/" << buffer_size);
@@ -313,6 +321,7 @@
 
 void AudioInputCore::start_stream (unsigned channels, unsigned samplerate, unsigned bits_per_sample)
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   PTRACE(4, "AudioInputCore\tStarting stream " << channels << "x" << samplerate << "/" << bits_per_sample);
@@ -333,6 +342,7 @@
 
 void AudioInputCore::stop_stream ()
 {
+  yield = true;
   PWaitAndSignal m(core_mutex);
 
   PTRACE(4, "AudioInputCore\tStopping Stream");
@@ -353,6 +363,10 @@
                                      unsigned size,
 				     unsigned & bytes_read)
 {
+  if (yield) {
+    yield = false;
+     PThread::Current()->Sleep(5);
+  }
   PWaitAndSignal m_var(core_mutex);
 
   if (current_manager) {

Modified: trunk/lib/engine/audioinput/skel/audioinput-core.h
==============================================================================
--- trunk/lib/engine/audioinput/skel/audioinput-core.h	(original)
+++ trunk/lib/engine/audioinput/skel/audioinput-core.h	Mon Jun  2 15:05:33 2008
@@ -351,6 +351,7 @@
 
       float average_level;
       bool calculate_average;
+      bool yield;
     };
 /**
  * @}

Modified: trunk/lib/engine/audiooutput/skel/audiooutput-core.cpp
==============================================================================
--- trunk/lib/engine/audiooutput/skel/audiooutput-core.cpp	(original)
+++ trunk/lib/engine/audiooutput/skel/audiooutput-core.cpp	Mon Jun  2 15:05:33 2008
@@ -62,6 +62,7 @@
   audiooutput_core_conf_bridge = NULL;
   average_level = 0;
   calculate_average = false;
+  yield = false;
 }
 
 AudioOutputCore::~AudioOutputCore ()
@@ -97,6 +98,7 @@
 
 void AudioOutputCore::visit_managers (sigc::slot<bool, AudioOutputManager &> visitor)
 {
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
   PWaitAndSignal m_sec(core_mutex[secondary]);
   bool go_on = true;
@@ -134,6 +136,7 @@
 
 void AudioOutputCore::get_devices (std::vector <AudioOutputDevice> & devices)
 {
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
   PWaitAndSignal m_sec(core_mutex[secondary]);
 
@@ -157,11 +160,12 @@
 void AudioOutputCore::set_device(AudioOutputPS ps, const AudioOutputDevice & device)
 {
   PTRACE(4, "AudioOutputCore\tSetting device[" << ps << "]: " << device);
-
+  yield = true;
   PWaitAndSignal m_sec(core_mutex[secondary]);
 
   switch (ps) {
     case primary:
+      yield = true;
       core_mutex[primary].Wait();
       internal_set_primary_device (device);
       desired_primary_device = device;
@@ -188,6 +192,7 @@
 void AudioOutputCore::add_device (const std::string & sink, const std::string & device_name, HalManager* /*manager*/)
 {
   PTRACE(0, "AudioOutputCore\tAdding Device " << device_name);
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
 
   AudioOutputDevice device;
@@ -208,6 +213,7 @@
 void AudioOutputCore::remove_device (const std::string & sink, const std::string & device_name, HalManager* /*manager*/)
 {
   PTRACE(0, "AudioOutputCore\tRemoving Device " << device_name);
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
 
   AudioOutputDevice device;
@@ -231,6 +237,7 @@
 
 void AudioOutputCore::start (unsigned channels, unsigned samplerate, unsigned bits_per_sample)
 {
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
 
   if (current_primary_config.active) {
@@ -250,6 +257,7 @@
 
 void AudioOutputCore::stop()
 {
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
 
   average_level = 0;
@@ -260,6 +268,7 @@
 }
 
 void AudioOutputCore::set_buffer_size (unsigned buffer_size, unsigned num_buffers) {
+  yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
 
   if (current_manager[primary])
@@ -273,6 +282,10 @@
                                       unsigned size,
 				      unsigned & bytes_written)
 {
+  if (yield) {
+    yield = false;
+    PThread::Current()->Sleep(5);
+  }
   PWaitAndSignal m_pri(core_mutex[primary]);
 
   if (current_manager[primary]) {

Modified: trunk/lib/engine/audiooutput/skel/audiooutput-core.h
==============================================================================
--- trunk/lib/engine/audiooutput/skel/audiooutput-core.h	(original)
+++ trunk/lib/engine/audiooutput/skel/audiooutput-core.h	Mon Jun  2 15:05:33 2008
@@ -371,6 +371,7 @@
 
       float average_level;
       bool calculate_average;
+      bool yield;
     };
 /**
  * @}

Modified: trunk/src/gui/main.cpp
==============================================================================
--- trunk/src/gui/main.cpp	(original)
+++ trunk/src/gui/main.cpp	Mon Jun  2 15:05:33 2008
@@ -4254,7 +4254,7 @@
     {
       {
 	"debug", 'd', 0, G_OPTION_ARG_INT, &debug_level, 
-       N_("Prints debug messages in the console (level between 1 and 4)"), 
+       N_("Prints debug messages in the console (level between 1 and 5)"), 
        NULL
       },
       {
@@ -4311,7 +4311,7 @@
   static GnomeMeeting instance;
 
   if (debug_level != 0)
-    PTrace::Initialise (PMAX (PMIN (4, debug_level), 0), NULL,
+    PTrace::Initialise (PMAX (PMIN (5, debug_level), 0), NULL,
 			PTrace::Timestamp | PTrace::Thread
 			| PTrace::Blocks | PTrace::DateAndTime);
 



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