Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 42422 Details for
Bug 68553
Patch pwlib to use alsa + dmix on gnomemeeting
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch alsa_sound plugin
pwlib-1.6.6-dmix-fix.diff (text/plain), 7.27 KB, created by
Benoit C
on 2004-10-22 08:24:45 UTC
(
hide
)
Description:
patch alsa_sound plugin
Filename:
MIME Type:
Creator:
Benoit C
Created:
2004-10-22 08:24:45 UTC
Size:
7.27 KB
patch
obsolete
>diff -ru pwlib-orig/plugins/sound_alsa/sound_alsa.cxx pwlib/plugins/sound_alsa/sound_alsa.cxx >--- pwlib-orig/plugins/sound_alsa/sound_alsa.cxx 2004-03-13 13:36:14.000000000 +0100 >+++ pwlib/plugins/sound_alsa/sound_alsa.cxx 2004-10-21 18:33:38.562610536 +0200 >@@ -28,6 +28,21 @@ > * Contributor(s): / > * > * $Log: sound_alsa.cxx,v $ >+ * Revision 1.21 2004/10/18 11:43:39 dsandras >+ * Use Capture instead of Mic when changing the volume. Use the correct mixer when using the Default device. >+ * >+ * Revision 1.20 2004/10/14 19:30:16 dsandras >+ * Removed DMIX and DSNOOP plugins and added support for DEFAULT as it is the correcti way to do things. >+ * >+ * Revision 1.19 2004/08/30 21:09:41 dsandras >+ * Added DSNOOP plugin support. >+ * >+ * Revision 1.18 2004/05/14 10:15:26 dominance >+ * Fixes direct opening of sound output devices. The list of devices does no longer return NULL in that case. Patch provided by Julien Puydt <julien.puydt@laposte.net>. >+ * >+ * Revision 1.17 2004/04/03 10:33:45 dsandras >+ * Use PStringToOrdinal to store the detected devices, that fixes problems if there is a discontinuity in the succession of soundcard ID's. For example the user has card ID 1 and 3, but not 2. >+ * > * Revision 1.16 2004/03/13 12:36:14 dsandras > * Added support for DMIX plugin output. > * >@@ -81,8 +96,8 @@ > PCREATE_SOUND_PLUGIN(ALSA, PSoundChannelALSA) > > >-static PStringArray playback_devices; >-static PStringArray capture_devices; >+static PStringToOrdinal playback_devices; >+static PStringToOrdinal capture_devices; > > /////////////////////////////////////////////////////////////////////////////// > >@@ -119,8 +134,9 @@ > } > > >-PStringArray PSoundChannelALSA::GetDeviceNames (Directions dir) >+void PSoundChannelALSA::UpdateDictionary (Directions dir) > { >+ > int card = -1, dev = -1; > > snd_ctl_t *handle = NULL; >@@ -134,12 +150,12 @@ > if (dir == Recorder) { > > stream = SND_PCM_STREAM_CAPTURE; >- capture_devices = PStringArray (); >+ capture_devices = PStringToOrdinal (); > } > else { > > stream = SND_PCM_STREAM_PLAYBACK; >- playback_devices = PStringArray (); >+ playback_devices = PStringToOrdinal (); > } > > snd_ctl_card_info_alloca (&info); >@@ -148,7 +164,7 @@ > /* No sound card found */ > if (snd_card_next (&card) < 0 || card < 0) { > >- return PStringArray (); >+ return; > } > > >@@ -176,13 +192,11 @@ > snd_card_get_name (card, &name); > if (dir == Recorder) { > >- if (capture_devices.GetStringsIndex (name) == P_MAX_INDEX) >- capture_devices.AppendString (name); >+ capture_devices.SetAt (name, card); > } > else { > >- if (playback_devices.GetStringsIndex (name) == P_MAX_INDEX) >- playback_devices.AppendString (name); >+ playback_devices.SetAt (name, card); > } > > free (name); >@@ -193,17 +207,27 @@ > snd_ctl_close(handle); > snd_card_next (&card); > } >+} > >- >- if (dir == Recorder) >- return capture_devices; >- else { >+PStringArray PSoundChannelALSA::GetDeviceNames (Directions dir) >+{ >+ PStringArray devices; >+ PStringToOrdinal devices_dict; > >- if (playback_devices.GetSize () > 0) >- playback_devices += "DMIX Plugin"; >+ if (dir == Recorder) >+ devices_dict = capture_devices; >+ else >+ devices_dict = playback_devices; >+ >+ UpdateDictionary (dir); >+ >+ if (devices_dict.GetSize () > 0) >+ devices += "Default"; >+ >+ for (PINDEX j = 0 ; j < devices_dict.GetSize () ; j++) >+ devices += devices_dict.GetKeyAt (j); > >- return playback_devices; >- } >+ return devices; > } > > >@@ -223,7 +247,7 @@ > unsigned _bitsPerSample) > { > PString real_device_name; >- PINDEX i = 0; >+ POrdinalKey *i = NULL; > snd_pcm_stream_t stream; > > Close(); >@@ -236,21 +260,31 @@ > stream = SND_PCM_STREAM_PLAYBACK; > > /* Open in NONBLOCK mode */ >- if (_dir != Recorder && _device == "DMIX Plugin") { >+ if (_device == "Default") { > >- real_device_name = "plug:dmix"; >+ real_device_name = "default"; >+ card_nr = -2; > } >- else if ((i = (_dir == Recorder) ? capture_devices.GetStringsIndex (_device) : playback_devices.GetStringsIndex (_device)) != P_MAX_INDEX) { >+ else { >+ >+ if ((_dir == Recorder && capture_devices.IsEmpty ()) >+ || (_dir == Player && playback_devices.IsEmpty ())) >+ UpdateDictionary (_dir); >+ >+ i = (_dir == Recorder) ? capture_devices.GetAt (_device) : playback_devices.GetAt (_device); > >- real_device_name = "plughw:" + PString (i); >- card_nr = i; >+ if (i) { >+ >+ real_device_name = "plughw:" + PString (*i); >+ card_nr = *i; >+ } >+ else { >+ >+ PTRACE (1, "ALSA\tDevice not found"); >+ return FALSE; >+ } > } >- else { > >- PTRACE (1, "ALSA\tDevice unavailable"); >- return FALSE; >- } >- > if (snd_pcm_open (&os_handle, real_device_name, stream, SND_PCM_NONBLOCK) < 0) { > > PTRACE (1, "ALSA\tOpen Failed"); >@@ -735,7 +769,7 @@ > snd_mixer_elem_t *elem; > snd_mixer_selem_id_t *sid; > >- const char *play_mix_name = (direction == Player) ? "PCM": "Mic"; >+ const char *play_mix_name = (direction == Player) ? "PCM": "Capture"; > PString card_name; > > long pmin = 0, pmax = 0; >@@ -744,7 +778,10 @@ > if (!os_handle) > return FALSE; > >- card_name = "hw:" + PString (card_nr); >+ if (card_nr == -2) >+ card_name = "default"; >+ else >+ card_name = "hw:" + PString (card_nr); > > //allocate simple id > snd_mixer_selem_id_alloca (&sid); >@@ -796,23 +833,39 @@ > return FALSE; > } > >- snd_mixer_selem_get_playback_volume_range (elem, &pmin, &pmax); > > if (set) { >- >- vol = (set_vol * (pmax?pmax:31)) / 100; >- snd_mixer_selem_set_playback_volume (elem, >- SND_MIXER_SCHN_FRONT_LEFT, vol); >- snd_mixer_selem_set_playback_volume (elem, >- SND_MIXER_SCHN_FRONT_RIGHT, vol); > >+ if (direction == Player) { >+ >+ snd_mixer_selem_get_playback_volume_range (elem, &pmin, &pmax); >+ vol = (set_vol * (pmax?pmax:31)) / 100; >+ snd_mixer_selem_set_playback_volume_all (elem, vol); >+ } >+ else { >+ >+ snd_mixer_selem_get_capture_volume_range (elem, &pmin, &pmax); >+ vol = (set_vol * (pmax?pmax:31)) / 100; >+ snd_mixer_selem_set_capture_volume_all (elem, vol); >+ } > PTRACE (4, "Set volume to " << vol); > } > else { > >- snd_mixer_selem_get_playback_volume (elem, >- SND_MIXER_SCHN_FRONT_LEFT, &vol); >+ if (direction == Player) { >+ >+ snd_mixer_selem_get_playback_volume_range (elem, &pmin, &pmax); >+ snd_mixer_selem_get_playback_volume (elem, SND_MIXER_SCHN_FRONT_LEFT, >+ &vol); >+ } >+ else { >+ >+ snd_mixer_selem_get_capture_volume_range (elem, &pmin, &pmax); >+ snd_mixer_selem_get_capture_volume (elem, SND_MIXER_SCHN_FRONT_LEFT, >+ &vol); >+ } > get_vol = (vol * 100) / (pmax?pmax:31); >+ > PTRACE (4, "Got volume " << vol); > } > >Only in pwlib/plugins/sound_alsa: .sound_alsa.cxx-patch.swp >diff -ru pwlib-orig/plugins/sound_alsa/sound_alsa.h pwlib/plugins/sound_alsa/sound_alsa.h >--- pwlib-orig/plugins/sound_alsa/sound_alsa.h 2003-12-28 16:10:35.000000000 +0100 >+++ pwlib/plugins/sound_alsa/sound_alsa.h 2004-10-21 18:35:51.559391952 +0200 >@@ -89,7 +89,8 @@ > BOOL IsOpen() const; > > private: >- >+ >+ static void UpdateDictionary(PSoundChannel::Directions); > BOOL Volume (BOOL, unsigned, unsigned &); > PSoundChannel::Directions direction; > PString device;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 68553
: 42422 |
42423