version 1.22, 2018/06/26 07:12:35 |
version 1.23, 2018/06/26 07:13:54 |
|
|
|
|
f = xmalloc(sizeof(struct sock)); |
f = xmalloc(sizeof(struct sock)); |
f->pstate = SOCK_AUTH; |
f->pstate = SOCK_AUTH; |
f->opt = NULL; |
|
f->slot = NULL; |
f->slot = NULL; |
f->port = NULL; |
f->port = NULL; |
f->midi = NULL; |
f->midi = NULL; |
|
|
rchan = 1; |
rchan = 1; |
else if (rchan > NCHAN_MAX) |
else if (rchan > NCHAN_MAX) |
rchan = NCHAN_MAX; |
rchan = NCHAN_MAX; |
s->sub.slot_cmin = f->opt->rmin; |
s->sub.slot_cmin = s->opt->rmin; |
s->sub.slot_cmax = f->opt->rmin + rchan - 1; |
s->sub.slot_cmax = s->opt->rmin + rchan - 1; |
s->sub.dev_cmin = f->opt->rmin; |
s->sub.dev_cmin = s->opt->rmin; |
s->sub.dev_cmax = f->opt->rmax; |
s->sub.dev_cmax = s->opt->rmax; |
#ifdef DEBUG |
#ifdef DEBUG |
if (log_level >= 3) { |
if (log_level >= 3) { |
sock_log(f); |
sock_log(f); |
|
|
pchan = 1; |
pchan = 1; |
else if (pchan > NCHAN_MAX) |
else if (pchan > NCHAN_MAX) |
pchan = NCHAN_MAX; |
pchan = NCHAN_MAX; |
s->mix.slot_cmin = f->opt->pmin; |
s->mix.slot_cmin = s->opt->pmin; |
s->mix.slot_cmax = f->opt->pmin + pchan - 1; |
s->mix.slot_cmax = s->opt->pmin + pchan - 1; |
s->mix.dev_cmin = f->opt->pmin; |
s->mix.dev_cmin = s->opt->pmin; |
s->mix.dev_cmax = f->opt->pmax; |
s->mix.dev_cmax = s->opt->pmax; |
#ifdef DEBUG |
#ifdef DEBUG |
if (log_level >= 3) { |
if (log_level >= 3) { |
sock_log(f); |
sock_log(f); |
|
|
return 0; |
return 0; |
} |
} |
s->xrun = p->xrun; |
s->xrun = p->xrun; |
if (f->opt->mmc && s->xrun == XRUN_IGNORE) |
if (s->opt->mmc && s->xrun == XRUN_IGNORE) |
s->xrun = XRUN_SYNC; |
s->xrun = XRUN_SYNC; |
#ifdef DEBUG |
#ifdef DEBUG |
if (log_level >= 3) { |
if (log_level >= 3) { |
|
|
struct slot *s; |
struct slot *s; |
struct port *c; |
struct port *c; |
struct dev *d; |
struct dev *d; |
|
struct opt *opt; |
unsigned int mode; |
unsigned int mode; |
|
|
mode = ntohs(p->mode); |
mode = ntohs(p->mode); |
|
|
d = dev_bynum(p->devnum); |
d = dev_bynum(p->devnum); |
if (d == NULL) |
if (d == NULL) |
return 0; |
return 0; |
f->opt = opt_byname(d, p->opt); |
opt = opt_byname(d, p->opt); |
if (f->opt == NULL) |
if (opt == NULL) |
return 0; |
return 0; |
#ifdef DEBUG |
#ifdef DEBUG |
if (log_level >= 3) { |
if (log_level >= 3) { |
|
|
log_puts(": using "); |
log_puts(": using "); |
dev_log(d); |
dev_log(d); |
log_puts("."); |
log_puts("."); |
log_puts(f->opt->name); |
log_puts(opt->name); |
log_puts(", mode = "); |
log_puts(", mode = "); |
log_putx(mode); |
log_putx(mode); |
log_puts("\n"); |
log_puts("\n"); |
} |
} |
#endif |
#endif |
if ((mode & MODE_REC) && (f->opt->mode & MODE_MON)) { |
if ((mode & MODE_REC) && (opt->mode & MODE_MON)) { |
mode |= MODE_MON; |
mode |= MODE_MON; |
mode &= ~MODE_REC; |
mode &= ~MODE_REC; |
} |
} |
if ((mode & f->opt->mode) != mode) { |
if ((mode & opt->mode) != mode) { |
if (log_level >= 1) { |
if (log_level >= 1) { |
sock_log(f); |
sock_log(f); |
log_puts(": requested mode not allowed\n"); |
log_puts(": requested mode not allowed\n"); |
|
|
s = slot_new(d, p->who, &sock_slotops, f, mode); |
s = slot_new(d, p->who, &sock_slotops, f, mode); |
if (s == NULL) |
if (s == NULL) |
return 0; |
return 0; |
|
s->opt = opt; |
f->midi = NULL; |
f->midi = NULL; |
if (s->mode & MODE_PLAY) { |
if (s->mode & MODE_PLAY) { |
s->mix.slot_cmin = s->mix.dev_cmin = f->opt->pmin; |
s->mix.slot_cmin = s->mix.dev_cmin = s->opt->pmin; |
s->mix.slot_cmax = s->mix.dev_cmax = f->opt->pmax; |
s->mix.slot_cmax = s->mix.dev_cmax = s->opt->pmax; |
} |
} |
if (s->mode & MODE_RECMASK) { |
if (s->mode & MODE_RECMASK) { |
s->sub.slot_cmin = s->sub.dev_cmin = f->opt->rmin; |
s->sub.slot_cmin = s->sub.dev_cmin = s->opt->rmin; |
s->sub.slot_cmax = s->sub.dev_cmax = f->opt->rmax; |
s->sub.slot_cmax = s->sub.dev_cmax = s->opt->rmax; |
} |
} |
if (f->opt->mmc) { |
if (s->opt->mmc) { |
s->xrun = XRUN_SYNC; |
s->xrun = XRUN_SYNC; |
s->tstate = MMC_STOP; |
s->tstate = MMC_STOP; |
} else { |
} else { |
s->xrun = XRUN_IGNORE; |
s->xrun = XRUN_IGNORE; |
s->tstate = MMC_OFF; |
s->tstate = MMC_OFF; |
} |
} |
s->mix.maxweight = f->opt->maxweight; |
s->mix.maxweight = s->opt->maxweight; |
s->dup = f->opt->dup; |
s->dup = s->opt->dup; |
f->slot = s; |
f->slot = s; |
return 1; |
return 1; |
} |
} |