Re: [Ekiga-devel-list] Windows XP: "wave" volume goes to zero when calling

Michael Rickmann schrieb:
my kabelfunk de schrieb:

I've installed Ekiga 3.2.5 on Windows XP and as far as I see it works
fine, but... :-)

I used the call back service 530 ekiga net for my test.
When the incoming coming window pops up  the volume for WAVE in the
audio mixer goes to maximum.
After clicking anwer ("abnehmen") the volume of WAVE goes to zero and I
hear nothing.

Doing a 500 ekiga net echo test has the same effect: After the
connection is established the volume is zero.

This happens on a reals XP machine as well as in VirtualBox.


I know there is a small speaker button in ekiga where I can raise the
"wave" volume, too.
But the default seems to be zero, is only configurable during a call and
doesn't save the value between restarts.

Yes, it is a real nuisance. I think that Ptlib does not have control over the volume settings of the Windows Multimedia interface when opening the device, but Ekiga just relies on it. Attached patch fixes that. This does not yet allow Win32 Ekiga to restore output volume from the last run. I work on that using an extra config key.
The zero setting of the volume slider is a third different shortcoming.

Hi Dominik,
I think I fixed all the audio-output volume settings issues for Win32 with attached two patches. ekiga_1outvolume.diff keeps the output volume across calls, ekiga_2outvolume.diff across Ekiga sessions - the latter is more intrusive as it introduces a new config key into the database which for Win32 is in ekiga.conf. I am just uploading new files to my directory. Could you try I have tested it under XP-SP2 and 7RC. Could you tell me if it fixes the audio for you. For audio input use the general Windows sliders, its a thing I don't see any pattern yet.
diff -ur ekiga.orig/lib/engine/audiooutput/audiooutput-core.cpp ekiga/lib/engine/audiooutput/audiooutput-core.cpp
--- ekiga.orig/lib/engine/audiooutput/audiooutput-core.cpp	2009-08-15 18:44:04.000000000 +0200
+++ ekiga/lib/engine/audiooutput/audiooutput-core.cpp	2009-08-15 18:44:57.000000000 +0200
@@ -364,6 +364,14 @@
                                         AudioOutputSettings settings, 
                                         AudioOutputManager *manager)
+#ifdef WIN32
+  /* with the next frame the current volume will be updated
+     to the desired one without further notice, signal it in advance */
+  if (ps == primary) {		
+    current_primary_volume = settings.volume;
+    settings.volume = desired_primary_volume;
+  }
   device_opened.emit (*manager, ps, device, settings);
diff -ur ekiga.orig/lib/engine/audiooutput/audiooutput-core.cpp ekiga/lib/engine/audiooutput/audiooutput-core.cpp
--- ekiga.orig/lib/engine/audiooutput/audiooutput-core.cpp	2009-08-15 08:35:36.000000000 +0200
+++ ekiga/lib/engine/audiooutput/audiooutput-core.cpp	2009-08-15 08:36:08.000000000 +0200
@@ -260,6 +260,9 @@
 void AudioOutputCore::stop()
+#ifdef WIN32
+  audiooutput_core_conf_bridge->save_volume (primary, current_primary_volume);
   yield = true;
   PWaitAndSignal m_pri(core_mutex[primary]);
diff -ur ekiga.orig/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp ekiga/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp
--- ekiga.orig/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp	2009-08-15 08:34:53.000000000 +0200
+++ ekiga/lib/engine/audiooutput/audiooutput-gmconf-bridge.cpp	2009-08-15 08:36:16.000000000 +0200
@@ -52,6 +52,9 @@
   property_changed.connect (sigc::mem_fun (this, &AudioOutputCoreConfBridge::on_property_changed));
   keys.push_back (AUDIO_DEVICES_KEY "output_device"); 
+#ifdef WIN32
+  keys.push_back (AUDIO_DEVICES_KEY "output_volume"); 
   keys.push_back (SOUND_EVENTS_KEY "output_device"); 
   keys.push_back (SOUND_EVENTS_KEY "busy_tone_sound"); 
   keys.push_back (SOUND_EVENTS_KEY "incoming_call_sound"); 
@@ -102,6 +105,18 @@
     audioinput_core.set_device (primary, device);
+#ifdef WIN32
+  if (key == AUDIO_DEVICES_KEY "output_volume") {
+    PTRACE(4, "AudioOutputCoreConfBridge\tUpdating volume for primary");
+    gint volume = gm_conf_entry_get_int (entry);
+    if ((volume < 0) || (volume > 100))
+      volume = 0;
+    audioinput_core.set_volume (primary, volume);
+  }
   if (key == SOUND_EVENTS_KEY "output_device") {
     PTRACE(4, "AudioOutputCoreConfBridge\tUpdating device");
@@ -214,3 +229,13 @@
+#ifdef WIN32
+void AudioOutputCoreConfBridge::save_volume (AudioOutputPS ps, int volume)
+  AudioOutputCore & audioinput_core = (AudioOutputCore &) service;
+  if (ps == primary)
+    gm_conf_set_int (AUDIO_DEVICES_KEY "output_volume", volume);
diff -ur ekiga.orig/lib/engine/audiooutput/audiooutput-gmconf-bridge.h ekiga/lib/engine/audiooutput/audiooutput-gmconf-bridge.h
--- ekiga.orig/lib/engine/audiooutput/audiooutput-gmconf-bridge.h	2009-08-15 08:34:53.000000000 +0200
+++ ekiga/lib/engine/audiooutput/audiooutput-gmconf-bridge.h	2009-08-15 08:36:25.000000000 +0200
@@ -38,6 +38,9 @@
 #include "services.h"
+#ifdef WIN32
+#include "audiooutput-info.h"
 #include "gmconf-bridge.h"
 namespace Ekiga
@@ -50,6 +53,9 @@
     AudioOutputCoreConfBridge (Ekiga::Service & service);
     void on_property_changed (std::string key, GmConfEntry *value);
+#ifdef WIN32
+    void save_volume (AudioOutputPS ps, int volume);

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