Thank you very much! The problem is gone now. Regarding uninitialized parameters, could you please point out, which of them are essential? I'm not sure it is stressed in the man-page. (Certainly I've overseen it.)
wbr Dimtri Sokolyuk On Sun, May 5, 2013 at 7:19 PM, Alexandre Ratchov <[email protected]> wrote: > On Sun, May 05, 2013 at 02:20:10PM +0200, Dimitri Sokolyuk wrote: > > Thanks Alexandre, the patch fixed the original issue. > > > > However I just noted another regression: in a monitoring mode only a left > > channel is copied back now. > > > > Since it is not as easy to demonstrate as the last issue, here is a link > to > > my little-ugly-home-brewed sound visualizer: > > http://www.dim13.org/cgi-bin/cvsweb/src/spectrogram/ (requires > > sndiod_flags="-m play,mon,midi" and some sound source like mplayer) which > > demonstrates the issue. > > nice program! it doesn't set initial audio parameters which exposes > few uninitialized variables in sndiod. Does this diff fix works for > you? > > -- Alexandre > > Index: dev.c > =================================================================== > RCS file: /var/anoncvs/sndio/sndio/sndiod/dev.c,v > retrieving revision 1.42 > diff -u -p -r1.42 dev.c > --- dev.c 5 May 2013 16:19:51 -0000 1.42 > +++ dev.c 5 May 2013 17:16:32 -0000 > @@ -1560,21 +1560,22 @@ found: > return 0; > } > s->mode = mode; > - s->par = d->par; > + aparams_init(&s->par); > if (s->mode & MODE_PLAY) { > - s->mix.slot_cmin = 0; > - s->mix.slot_cmax = d->pchan - 1; > + s->mix.slot_cmin = s->mix.dev_cmin = 0; > + s->mix.slot_cmax = s->mix.dev_cmax = d->pchan - 1; > } > if (s->mode & MODE_RECMASK) { > - s->sub.slot_cmin = 0; > - s->sub.slot_cmax = ((s->mode & MODE_MON) ? > - d->pchan : d->rchan) - 1; > + s->sub.slot_cmin = s->sub.dev_cmin = 0; > + s->sub.slot_cmax = s->sub.dev_cmax = > + ((s->mode & MODE_MON) ? d->pchan : d->rchan) - 1; > } > s->xrun = XRUN_IGNORE; > s->dup = 0; > s->appbufsz = d->bufsz; > s->round = d->round; > s->rate = d->rate; > + s->mix.maxweight = ADATA_UNIT; > dev_midi_slotdesc(d, s); > dev_midi_vol(d, s); > return s; > Index: sock.c > =================================================================== > RCS file: /var/anoncvs/sndio/sndio/sndiod/sock.c,v > retrieving revision 1.30 > diff -u -p -r1.30 sock.c > --- sock.c 6 Dec 2012 08:12:00 -0000 1.30 > +++ sock.c 5 May 2013 17:16:32 -0000 > @@ -670,13 +670,13 @@ sock_setpar(struct sock *f) > if (log_level >= 3) { > sock_log(f); > log_puts(": recording channels "); > - log_putu(s->sub.slot_cmin); > - log_puts(":"); > - log_putu(s->sub.slot_cmax); > - log_puts(" -> "); > log_putu(s->sub.dev_cmin); > log_puts(":"); > log_putu(s->sub.dev_cmax); > + log_puts(" -> "); > + log_putu(s->sub.slot_cmin); > + log_puts(":"); > + log_putu(s->sub.slot_cmax); > log_puts("\n"); > } > #endif > @@ -907,14 +907,13 @@ sock_hello(struct sock *f) > if (s == NULL) > return 0; > f->midi = NULL; > - aparams_init(&s->par); > if (s->mode & MODE_PLAY) { > - s->mix.slot_cmin = f->opt->pmin; > - s->mix.slot_cmax = f->opt->pmax; > + s->mix.slot_cmin = s->mix.dev_cmin = f->opt->pmin; > + s->mix.slot_cmax = s->mix.dev_cmax = f->opt->pmax; > } > if (s->mode & MODE_RECMASK) { > - s->sub.slot_cmin = f->opt->rmin; > - s->sub.slot_cmax = f->opt->rmax; > + s->sub.slot_cmin = s->sub.dev_cmin = f->opt->rmin; > + s->sub.slot_cmax = s->sub.dev_cmax = f->opt->rmax; > } > if (f->opt->mmc) { > s->xrun = XRUN_SYNC;
