no comments? On Fri, Oct 23, 2009 at 01:16:18AM +0000, Jacob Meuser wrote: > this diff encodes the audio stream channel numbers converters will > process into converter mixer names. > > e.g. > > inputs.dac -> inputs.dac-0:1 > inputs.dac2 -> inputs.dac-2:3 > inputs.dac3 -> inputs.dac-4:5 > > pros: > * easier to understand what channels are going where > * very similar in format to aucat channel numbering > > cons: > * different than any other driver > > overcoming the con is not hard. software looking for 'dac' can also > look for 'dac-0:'. woudn't be surprised if programs are confused by > 'dac2' already anyway though. otoh, it wouldn't really bother me to > make such a change universal, but I'm not really pushing that either, > at this point. > > btw, this part of the manual change: > > However, a dac that is connected to built-in speaker(s) or front > panel headphone jack(s) by default will convert audio stream channels > starting at 0 if the dac would otherwise not be converting any channels. > For example, if dac-2:3 is the default dac for the built-in speakers in > a laptop, dac-2:3 will convert channels 0 and 1 when a stereo audio > stream is being played. This is to allow simultaneous stereo playback > on both the built-in speakers and a line or headphone jack. > > is not new behaviour, it just wasn't explained before. > > -- > [email protected] > SDF Public Access UNIX System - http://sdf.lonestar.org > > Index: share/man/man4/azalia.4 > =================================================================== > RCS file: /cvs/src/share/man/man4/azalia.4,v > retrieving revision 1.22 > diff -u -p share/man/man4/azalia.4 > --- share/man/man4/azalia.4 20 Oct 2009 06:31:26 -0000 1.22 > +++ share/man/man4/azalia.4 23 Oct 2009 00:44:35 -0000 > @@ -106,8 +106,7 @@ The widget type enumerator is used to distinguish diff > of the same type. > The enumeration starts at 2: the first widget of each type is not > enumerated. > -Except for dac and adc widget types, the enumeration order is > -meaningless. > +The enumeration order is meaningless. > The property is optional. > Generally, if there is no property, the mixer item is an amplifier gain > control. > @@ -117,22 +116,45 @@ The following are the widget type names used in mixer > .Bl -tag -width "SPDIF-in" > .It Cm dac > Digital to analog converter, usually used for playback. > -These widgets are enumerated according to the channels they convert. > -For example, if a codec has 3 stereo dacs, they would convert the > -following channels: dac channels 0 and 1, dac2 channels 2 and 3, > -dac3 channels 4 and 5. > +The audio stream channel(s) these widgets will convert are encoded into > +their name in the form of <start channel>:<end channel>. > +For example, > +.Cm dac-0:1 > +converts channels 0 and 1 (stereo). > +However, a dac that is connected to built-in speaker(s) or front > +panel headphone jack(s) by default will convert audio stream channels > +starting at 0 if the dac would otherwise not be converting any channels. > +For example, if > +.Cm dac-2:3 > +is the default dac for the built-in speakers in a laptop, > +.Cm dac-2:3 > +will convert channels 0 and 1 when a stereo audio stream is being played. > +This is to allow simultaneous stereo playback on both the built-in speakers > +and a line or headphone jack. > .Pp > .It Cm dig-dac > Digital output converter, usually an S/PDIF transmitter. > +The audio stream channel(s) these widgets will convert are encoded into > +their name in the form of <start channel>:<end channel>. > +For example, > +.Cm dig-dac-0:1 > +converts channels 0 and 1 (stereo). > .Pp > .It Cm adc > Analog to digital converter, usually used for recording. > -These widgets are enumerated according to the channels they convert. > -For example, if a codec has 2 stereo adcs, they would convert the > -following channels: adc channels 0 and 1, adc2 channels 2 and 3. > +The audio stream channel(s) these widgets will convert are encoded into > +their name in the form of <start channel>:<end channel>. > +For example, > +.Cm adc-0:1 > +converts channels 0 and 1 (stereo). > .Pp > .It Cm dig-adc > Digital input converter, usually an S/PDIF receiver. > +The audio stream channel(s) these widgets will convert are encoded into > +their name in the form of <start channel>:<end channel>. > +For example, > +.Cm dig-adc-0:1 > +converts channels 0 and 1 (stereo). > .Pp > .It Cm mix > Sums multiple audio sources into a single stream, but > Index: sys/dev/pci/azalia.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/azalia.c,v > retrieving revision 1.158 > diff -u -p sys/dev/pci/azalia.c > --- sys/dev/pci/azalia.c 13 Oct 2009 19:33:16 -0000 1.158 > +++ sys/dev/pci/azalia.c 23 Oct 2009 00:44:36 -0000 > @@ -2767,9 +2767,10 @@ int > azalia_widget_label_widgets(codec_t *codec) > { > widget_t *w; > + convgroup_t *group; > int types[16]; > int pins[16]; > - int colors_used, use_colors; > + int colors_used, use_colors, schan; > int i, j; > > bzero(&pins, sizeof(pins)); > @@ -2817,63 +2818,56 @@ azalia_widget_label_widgets(codec_t *codec) > case COP_AWTYPE_AUDIO_OUTPUT: > if (codec->dacs.ngroups < 1) > break; > - for (j = 0; j < codec->dacs.groups[0].nconv; j++) { > - if (w->nid == codec->dacs.groups[0].conv[j]) { > - if (j > 0) > - snprintf(w->name, > - sizeof(w->name), "%s%d", > - wtypes[w->type], j + 1); > - else > - snprintf(w->name, > - sizeof(w->name), "%s", > - wtypes[w->type]); > - break; > + group = &codec->dacs.groups[0]; > + schan = 0; > + for (j = 0; j < group->nconv; j++) { > + if (w->nid == group->conv[j]) { > + snprintf(w->name, sizeof(w->name), > + "%s-%d:%d", wtypes[w->type], schan, > + schan + WIDGET_CHANNELS(w) - 1); > } > + schan += WIDGET_CHANNELS(w); > } > if (codec->dacs.ngroups < 2) > break; > - for (j = 0; j < codec->dacs.groups[1].nconv; j++) { > - if (w->nid == codec->dacs.groups[1].conv[j]) { > - if (j > 0) > - snprintf(w->name, > - sizeof(w->name), "dig-%s%d", > - wtypes[w->type], j + 1); > - else > - snprintf(w->name, > - sizeof(w->name), "dig-%s", > - wtypes[w->type]); > + group = &codec->dacs.groups[1]; > + schan = 0; > + for (j = 0; j < group->nconv; j++) { > + if (w->nid == group->conv[j]) { > + snprintf(w->name, sizeof(w->name), > + "dig-%s-%d:%d", wtypes[w->type], > + schan, > + schan + WIDGET_CHANNELS(w) - 1); > } > + schan += WIDGET_CHANNELS(w); > } > break; > case COP_AWTYPE_AUDIO_INPUT: > + w->mixer_class = AZ_CLASS_RECORD; > if (codec->adcs.ngroups < 1) > break; > - w->mixer_class = AZ_CLASS_RECORD; > - for (j = 0; j < codec->adcs.groups[0].nconv; j++) { > - if (w->nid == codec->adcs.groups[0].conv[j]) { > - if (j > 0) > - snprintf(w->name, > - sizeof(w->name), "%s%d", > - wtypes[w->type], j + 1); > - else > - snprintf(w->name, > - sizeof(w->name), "%s", > - wtypes[w->type]); > + group = &codec->adcs.groups[0]; > + schan = 0; > + for (j = 0; j < group->nconv; j++) { > + if (w->nid == group->conv[j]) { > + snprintf(w->name, sizeof(w->name), > + "%s-%d:%d", wtypes[w->type], schan, > + schan + WIDGET_CHANNELS(w) - 1); > } > + schan += WIDGET_CHANNELS(w); > } > if (codec->adcs.ngroups < 2) > break; > - for (j = 0; j < codec->adcs.groups[1].nconv; j++) { > - if (w->nid == codec->adcs.groups[1].conv[j]) { > - if (j > 0) > - snprintf(w->name, > - sizeof(w->name), "dig-%s%d", > - wtypes[w->type], j + 1); > - else > - snprintf(w->name, > - sizeof(w->name), "dig-%s", > - wtypes[w->type]); > + group = &codec->adcs.groups[1]; > + schan = 0; > + for (j = 0; j < group->nconv; j++) { > + if (w->nid == group->conv[j]) { > + snprintf(w->name, sizeof(w->name), > + "dig-%s-%d:%d", wtypes[w->type], > + schan, > + schan + WIDGET_CHANNELS(w) - 1); > } > + schan += WIDGET_CHANNELS(w); > } > break; > default:
-- [email protected] SDF Public Access UNIX System - http://sdf.lonestar.org
