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;

Reply via email to