summaryrefslogtreecommitdiffstats
path: root/oss.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-05-13 00:22:39 +0000
committerLennart Poettering <lennart@poettering.net>2007-05-13 00:22:39 +0000
commit559d26217310e5454c9cf5c80e49da51b192d7ca (patch)
tree23be3cce3836e447662317e3b8b8f2656a69373b /oss.c
parenta64e85acf96bc0c55363fe55c9e9116aef2a8584 (diff)
fix volume handling
git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@5 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce
Diffstat (limited to 'oss.c')
-rw-r--r--oss.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/oss.c b/oss.c
index 7b351ae..bd4f12b 100644
--- a/oss.c
+++ b/oss.c
@@ -62,6 +62,8 @@ int device_open(sa_device_t *dev) {
return SA_ERROR_SYSTEM;
}
+ fcntl(oss->fd, F_SETFL, fcntl(oss->fd, F_GETFL) & ~O_NONBLOCK); /* FIXME*/
+
if (!dev->device) {
if (!(n = sa_strdup(n)))
return SA_ERROR_OOM;
@@ -237,7 +239,10 @@ int device_open(sa_device_t *dev) {
}
r = dev->pcm_attrs.rate;
- r = 44100;
+
+ if (r < 8000)
+ r = 8000;
+
suggested = 0;
phase = 0;
@@ -393,8 +398,10 @@ int device_change_output_volume(sa_device_t *dev, int vol[]) {
int device_change_rate(sa_device_t *dev, unsigned rate) {
oss_device_t *oss = OSS_DEVICE(dev);
- converter_set_ratio(&oss->converter_read, oss->real_pcm_attrs.rate, dev->pcm_attrs.rate);
- converter_set_ratio(&oss->converter_write, dev->pcm_attrs.rate, oss->real_pcm_attrs.rate);
+ if (dev->mode & SA_MODE_RDONLY)
+ converter_set_ratio(&oss->converter_read, oss->real_pcm_attrs.rate, dev->pcm_attrs.rate);
+ if (dev->mode & SA_MODE_WRONLY)
+ converter_set_ratio(&oss->converter_write, dev->pcm_attrs.rate, oss->real_pcm_attrs.rate);
return SA_SUCCESS;
}