[gstreamer-bugs] [Bug 336075] New: ALSA emu10k1 mixer tracks are wrongly classified as playback tracks

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Sun Mar 26 05:17:13 PST 2006


Do not reply to this via email (we are currently unable to handle email
responses and they get discarded).  You can add comments to this bug at
http://bugzilla.gnome.org/show_bug.cgi?id=336075
 GStreamer | gst-plugins | Ver: 0.10.x

           Summary: ALSA emu10k1 mixer tracks are wrongly classified as
                    playback tracks
           Product: GStreamer
           Version: 0.10.x
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: viktor.peters at gmail.com
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: Unspecified
   GNOME milestone: Unspecified


I have a Creative Audigy 1 Live!. Since GNOME 2.10 (or so) gnome-volume-control
aka gst-mixer classifies all capture mixer tracks as playback tracks. As a
result there are two PCM channels, two Microphone channels, and so on in the
playback panel.

This confuses the volume-control-applet, because I cannot select the right PCM
track of the two. If I select PCM it only controls the capture (because it was
added first to the track list?) but not the playback track.

So I decided to have a closer look at the gstreamer alsa plugin. I have written
a little utility, which outputs the results of the used alsa functions in
gstalsamixer.c:

Here the output of the one problematic tracks:
6: PCM
  has_common_volume=0
  has_capture_switch=0
  has_playback_switch=0
  has_capture_volume=1
  has_playback_volume=1

In gstalsamixer.c:gst_alsa_mixer_ensure_track_list is a loop which adds all
alsa mixer tracks. In this loop the gst flags are initialized to:

  gint flags = GST_MIXER_TRACK_OUTPUT;

Then there is an if-statement which uses snd_mixer_selem_has_capture_switch 
to classify between playback and capture (I guess this is the meaning) and sets
flags to GST_MIXER_TRACK_INPUT, if snd_mixer_selem_has_capture_switch is true.

But as you can see in the output above ALSA reports has_capture_switch==false
for the PCM channel. The gst flags are never changed to GST_MIXER_TRACK_INPUT
at this point, thou this track can control both capture and playback volume.

At later point an if-statement uses snd_mixer_selem_has_capture_volume to
decide if the track should be added to the capture list. Since this is true for
the PCM channel a new gst mixer track is created:

  track = gst_alsa_mixer_track_new (element, samename, i, channels, flags,
GST_ALSA_MIXER_TRACK_CAPTURE);

Here is the discrepancy: (gst) 'flags' is still GST_MIXER_TRACK_OUTPUT. ('alsa
flags' are set correctly to capture.)

Later a playback mixer track is added the same way. Therefore "duplicate" mixer
tracks are displayed in gst-mixer playback panel.


-- 
Configure bugmail: http://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.




More information about the Gstreamer-bugs mailing list