ekiga r6955 - in trunk: . src/devices src/gui



Author: mschneid
Date: Sat Sep 13 10:23:44 2008
New Revision: 6955
URL: http://svn.gnome.org/viewvc/ekiga?rev=6955&view=rev

Log:
Fix reference counting in video output device
(when coming out of a re-invited call whith
preview enabled it did not show the preview
video anymore). Also fix the quality meter
which was updated twice with different values.


Modified:
   trunk/ChangeLog
   trunk/src/devices/videooutput.cpp
   trunk/src/gui/main.cpp

Modified: trunk/src/devices/videooutput.cpp
==============================================================================
--- trunk/src/devices/videooutput.cpp	(original)
+++ trunk/src/devices/videooutput.cpp	Sat Sep 13 10:23:44 2008
@@ -93,10 +93,11 @@
 {
   PWaitAndSignal m(videoDisplay_mutex);
 
-  if (is_active)
+  if (is_active) {
     devices_nbr--;
-  if (devices_nbr == 0) {
-    videooutput_core.stop();
+    if (devices_nbr==0)
+      videooutput_core.stop();
+    is_active = false;
   }
 }
 
@@ -148,13 +149,14 @@
   if (!endFrame)
     return FALSE;
 
-  if (devices_nbr == 0)
-    videooutput_core.start();
-  /* Device is now open */
   if (!is_active) {
+    if (devices_nbr == 0) {
+      videooutput_core.start();
+    }
     is_active = TRUE;
     devices_nbr++;
   }
+
   videooutput_core.set_frame_data((const char*) data, width, height, (device_id == LOCAL), devices_nbr);
 
   return TRUE;

Modified: trunk/src/gui/main.cpp
==============================================================================
--- trunk/src/gui/main.cpp	(original)
+++ trunk/src/gui/main.cpp	Sat Sep 13 10:23:44 2008
@@ -669,48 +669,11 @@
     gm_main_window_set_call_duration (GTK_WIDGET (self), mw->current_call->get_duration ().c_str ());
     g_free (msg);
 
-    int jitter_quality = 0;
-    gfloat quality_level = 0.0;
     unsigned int jitter = mw->current_call->get_jitter_size ();
     double lost = mw->current_call->get_lost_packets ();
     double late = mw->current_call->get_late_packets ();
     double out_of_order = mw->current_call->get_out_of_order_packets ();
 
-    /* "arithmetics" for the quality level */
-    /* Thanks Snark for the math hints */
-    if (jitter < 30)
-      jitter_quality = 100;
-    if (jitter >= 30 && jitter < 50)
-      jitter_quality = 100 - (jitter - 30);
-    if (jitter >= 50 && jitter < 100)
-      jitter_quality = 80 - (jitter - 50) * 20 / 50;
-    if (jitter >= 100 && jitter < 150)
-      jitter_quality = 60 - (jitter - 100) * 20 / 50;
-    if (jitter >= 150 && jitter < 200)
-      jitter_quality = 40 - (jitter - 150) * 20 / 50;
-    if (jitter >= 200 && jitter < 300)
-      jitter_quality = 20 - (jitter - 200) * 20 / 100;
-    if (jitter >= 300 || jitter_quality < 0)
-      jitter_quality = 0;
-
-    quality_level = (float) jitter_quality / 100;
-
-    if ( (lost > 0.0) ||
-         (late > 0.0) ||
-         ((out_of_order > 0.0) && quality_level > 0.2) ) {
-      quality_level = 0.2;
-    }
-
-    if ( (lost > 0.02) ||
-         (late > 0.02) ||
-         (out_of_order > 0.02) ) {
-      quality_level = 0;
-    }
-
-    if (mw->qualitymeter)
-      gm_powermeter_set_level (GM_POWERMETER (mw->qualitymeter),
-  			       quality_level);
-
     gm_main_window_update_stats (GTK_WIDGET (self), lost, late, out_of_order, jitter, 
                                  0, 0, 0, 0,
                                  videooutput_stats.rx_width,
@@ -4515,34 +4478,40 @@
   }
   g_free (stats_msg);
 
-  /* "arithmetics" for the quality level */
-  /* Thanks Snark for the math hints */
-  if (jitter < 30)
-    jitter_quality = 100;
-  if (jitter >= 30 && jitter < 50)
-    jitter_quality = 100 - (jitter - 30);
-  if (jitter >= 50 && jitter < 100)
-    jitter_quality = 80 - (jitter - 50) * 20 / 50;
-  if (jitter >= 100 && jitter < 150)
-    jitter_quality = 60 - (jitter - 100) * 20 / 50;
-  if (jitter >= 150 && jitter < 200)
-    jitter_quality = 40 - (jitter - 150) * 20 / 50;
-  if (jitter >= 200 && jitter < 300)
-    jitter_quality = 20 - (jitter - 200) * 20 / 100;
-  if (jitter >= 300 || jitter_quality < 0)
-    jitter_quality = 0;
-
-  quality_level = (float) jitter_quality / 100;
-
-  if ((lost < 0.02 && lost >= 0.0) ||
-      (late < 0.02 && late >= 0.0) ||
-      ((out_of_order < 0.02 && out_of_order >= 0.0) &&
-       quality_level > 0.2))
-    quality_level = 0.2;
+    /* "arithmetics" for the quality level */
+    /* Thanks Snark for the math hints */
+    if (jitter < 30)
+      jitter_quality = 100;
+    if (jitter >= 30 && jitter < 50)
+      jitter_quality = 100 - (jitter - 30);
+    if (jitter >= 50 && jitter < 100)
+      jitter_quality = 80 - (jitter - 50) * 20 / 50;
+    if (jitter >= 100 && jitter < 150)
+      jitter_quality = 60 - (jitter - 100) * 20 / 50;
+    if (jitter >= 150 && jitter < 200)
+      jitter_quality = 40 - (jitter - 150) * 20 / 50;
+    if (jitter >= 200 && jitter < 300)
+      jitter_quality = 20 - (jitter - 200) * 20 / 100;
+    if (jitter >= 300 || jitter_quality < 0)
+      jitter_quality = 0;
 
-  if (mw->qualitymeter)
-    gm_powermeter_set_level (GM_POWERMETER (mw->qualitymeter),
-			     quality_level);
+    quality_level = (float) jitter_quality / 100;
+
+    if ( (lost > 0.0) ||
+         (late > 0.0) ||
+         ((out_of_order > 0.0) && quality_level > 0.2) ) {
+      quality_level = 0.2;
+    }
+
+    if ( (lost > 0.02) ||
+         (late > 0.02) ||
+         (out_of_order > 0.02) ) {
+      quality_level = 0;
+    }
+
+    if (mw->qualitymeter)
+      gm_powermeter_set_level (GM_POWERMETER (mw->qualitymeter),
+  			       quality_level);
 }
 
 



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