ekiga r5979 - in trunk: . lib/engine/display/skel
- From: mschneid svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r5979 - in trunk: . lib/engine/display/skel
- Date: Wed, 20 Feb 2008 18:46:30 +0000 (GMT)
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]