ekiga r5979 - in trunk: . lib/engine/display/skel



Author: mschneid
Date: Wed Feb 20 18:46:30 2008
New Revision: 5979
URL: http://svn.gnome.org/viewvc/ekiga?rev=5979&view=rev

Log:
Added a counter to DisplayCore for keeping track 
of how often it was started.
Also added a mutext for that counter and the 
statistics variables.



Modified:
   trunk/ChangeLog
   trunk/lib/engine/display/skel/display-core.cpp
   trunk/lib/engine/display/skel/display-core.h
   trunk/lib/engine/display/skel/display-info.h

Modified: trunk/lib/engine/display/skel/display-core.cpp
==============================================================================
--- trunk/lib/engine/display/skel/display-core.cpp	(original)
+++ trunk/lib/engine/display/skel/display-core.cpp	Wed Feb 20 18:46:30 2008
@@ -48,14 +48,19 @@
 
 DisplayCore::DisplayCore ()
 {
+  PWaitAndSignal m(var_mutex);
+
   display_stats.rx_width = display_stats.rx_height = display_stats.rx_fps = 0;
   display_stats.tx_width = display_stats.tx_height = display_stats.tx_fps = 0;
   display_stats.rx_frames = 0;
   display_stats.tx_frames = 0;
+  number_times_started = 0;
 }
 
 void DisplayCore::add_manager (DisplayManager &manager)
 {
+  PWaitAndSignal m(var_mutex);
+
   managers.insert (&manager);
   manager_added.emit (manager);
 
@@ -81,6 +86,12 @@
 
 void DisplayCore::start ()
 {
+   PWaitAndSignal m(var_mutex);
+
+   number_times_started++;
+   if (number_times_started > 1)
+     return;
+
   g_get_current_time (&last_stats);
 
   for (std::set<DisplayManager *>::iterator iter = managers.begin ();
@@ -92,6 +103,18 @@
 
 void DisplayCore::stop ()
 {
+  PWaitAndSignal m(var_mutex);
+
+  number_times_started--;
+
+  if (number_times_started < 0) {
+    number_times_started = 0;
+    return;
+  }
+
+  if (number_times_started != 0)
+    return;
+    
   for (std::set<DisplayManager *>::iterator iter = managers.begin ();
        iter != managers.end ();
        iter++) {
@@ -109,6 +132,8 @@
                                   bool local,
                                   int devices_nbr)
 {
+  var_mutex.Wait ();
+
   if (local) {
     display_stats.tx_frames++;
     display_stats.tx_width = width;
@@ -134,6 +159,8 @@
     g_get_current_time (&last_stats);
   }
 
+  var_mutex.Signal ();
+  
   for (std::set<DisplayManager *>::iterator iter = managers.begin ();
        iter != managers.end ();
        iter++) {
@@ -143,6 +170,8 @@
 
 void DisplayCore::set_display_info (const DisplayInfo & _display_info)
 {
+  PWaitAndSignal m(var_mutex);
+
   for (std::set<DisplayManager *>::iterator iter = managers.begin ();
        iter != managers.end ();
        iter++) {

Modified: trunk/lib/engine/display/skel/display-core.h
==============================================================================
--- trunk/lib/engine/display/skel/display-core.h	(original)
+++ trunk/lib/engine/display/skel/display-core.h	Wed Feb 20 18:46:30 2008
@@ -47,6 +47,10 @@
 
 #include <glib.h>
 
+//FIXME
+#include "ptbuildopts.h"
+#include "ptlib.h"
+
 namespace Ekiga
 {
 
@@ -147,6 +151,10 @@
 
       DisplayStats display_stats;
       GTimeVal last_stats;
+      int number_times_started;
+
+      PMutex var_mutex;     /* Protect start, stop and number_times_started */
+       
     };
 /**
  * @}

Modified: trunk/lib/engine/display/skel/display-info.h
==============================================================================
--- trunk/lib/engine/display/skel/display-info.h	(original)
+++ trunk/lib/engine/display/skel/display-info.h	Wed Feb 20 18:46:30 2008
@@ -44,6 +44,9 @@
 #ifdef None
 #undef None
 #endif
+#ifdef BadRequest
+#undef BadRequest
+#endif
 #endif
 //namespace Ekiga {
 



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