X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=oss_write.c;h=96d7b1871a941bff1662ae2a9512b85c79e7b4b9;hp=311a514dc86ff6bfb01abf53d16a75672827af12;hb=HEAD;hpb=c75c35b176cdacf157d27617e954961c88f33975 diff --git a/oss_write.c b/oss_write.c index 311a514d..4ea85afa 100644 --- a/oss_write.c +++ b/oss_write.c @@ -61,7 +61,7 @@ static int get_oss_format(enum sample_format sf) } } -static void oss_pre_select(struct sched *s, void *context) +static void oss_pre_monitor(struct sched *s, void *context) { struct writer_node *wn = context; struct private_oss_write_data *powd = wn->private_data; @@ -71,7 +71,7 @@ static void oss_pre_select(struct sched *s, void *context) return; if (ret < 0 || !powd) return sched_min_delay(s); - para_fd_set(powd->fd, &s->wfds, &s->max_fileno); + sched_monitor_writefd(powd->fd, s); } static void oss_close(struct writer_node *wn) @@ -101,7 +101,7 @@ static int oss_init(struct writer_node *wn, unsigned sample_rate, { int ret, format; unsigned ch, rate; - struct private_oss_write_data *powd = para_calloc(sizeof(*powd)); + struct private_oss_write_data *powd = zalloc(sizeof(*powd)); const char *dev = WRITE_CMD_OPT_STRING_VAL(OSS, DEVICE, wn->lpr); PARA_INFO_LOG("opening %s\n", dev); @@ -178,7 +178,7 @@ err_free: return ret; } -static int oss_post_select(__a_unused struct sched *s, void *context) +static int oss_post_monitor(__a_unused struct sched *s, void *context) { struct writer_node *wn = context; struct private_oss_write_data *powd = wn->private_data; @@ -199,9 +199,15 @@ static int oss_post_select(__a_unused struct sched *s, void *context) if (sound_device_is_busy()) return 0; - get_btr_sample_rate(btrn, &rate); - get_btr_channels(btrn, &ch); - get_btr_sample_format(btrn, &format); + ret = get_btr_sample_rate(btrn, &rate); + if (ret < 0) + goto out; + ret = get_btr_channels(btrn, &ch); + if (ret < 0) + goto out; + ret = get_btr_sample_format(btrn, &format); + if (ret < 0) + goto out; ret = oss_init(wn, rate, ch, format); if (ret < 0) goto out; @@ -212,11 +218,11 @@ static int oss_post_select(__a_unused struct sched *s, void *context) bytes = btr_next_buffer(btrn, &data); frames = bytes / powd->bytes_per_frame; if (!frames) { /* eof and less than a single frame available */ - ret = -E_WRITE_COMMON_EOF; + ret = -E_EOF; goto out; } ret = 0; - if (!FD_ISSET(powd->fd, &s->wfds)) + if (!sched_write_ok(powd->fd, s)) goto out; /* get maximal number of bytes that can be written */ ret = ioctl(powd->fd, SNDCTL_DSP_GETOSPACE, &abi); @@ -239,7 +245,7 @@ out: } const struct writer lsg_write_cmd_com_oss_user_data = { - .pre_select = oss_pre_select, - .post_select = oss_post_select, + .pre_monitor = oss_pre_monitor, + .post_monitor = oss_post_monitor, .close = oss_close, };