static int play_alloc(struct auplay_st **stp, struct auplay *ap, struct auplay_prm *prm, const char *device, auplay_write_h *wh, void *arg) { struct auplay_st *st; int err; int i; (void)device; if (play_dev_count < 1) { DEBUG_WARNING("no winwave play devices\n"); return ENODEV; } st = mem_zalloc(sizeof(*st), auplay_destructor); if (!st) return ENOMEM; st->ap = mem_ref(ap); st->wh = wh; st->arg = arg; if (prm) { prm->fmt = AUFMT_S16LE; st->prm = *prm; } err = write_stream_open(st); if (err) goto out; /* The write runs at 100ms intervals * prepare enough buffers to suite its needs */ for (i = 0; i < 5; i++) dsp_write(st); out: if (err) mem_deref(st); else *stp = st; return err; }
int winwave_play_alloc(struct auplay_st **stp, struct auplay *ap, struct auplay_prm *prm, const char *device, auplay_write_h *wh, void *arg) { struct auplay_st *st; int i, err; (void)device; if (!stp || !ap || !prm) return EINVAL; st = mem_zalloc(sizeof(*st), auplay_destructor); if (!st) return ENOMEM; st->ap = mem_ref(ap); st->wh = wh; st->arg = arg; prm->fmt = AUFMT_S16LE; err = write_stream_open(st, prm); if (err) goto out; /* The write runs at 100ms intervals * prepare enough buffers to suite its needs */ for (i = 0; i < 5; i++) dsp_write(st); out: if (err) mem_deref(st); else *stp = st; return err; }