]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
oss: Bail out on unsupported audio formats.
authorAndre Noll <maan@tuebingen.mpg.de>
Wed, 1 Aug 2018 16:29:05 +0000 (18:29 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 30 Sep 2018 19:31:39 +0000 (21:31 +0200)
This is better than assuming signed 16 bit little endian. The patch
also improves the error message in oss.c that gets printed when the
audio format could not be set.

oss_write.c

index d4b765857a852013bd3145e1a042589957d3f2aa..311a514dc86ff6bfb01abf53d16a75672827af12 100644 (file)
@@ -57,7 +57,7 @@ static int get_oss_format(enum sample_format sf)
        case SF_S16_BE: return AFMT_S16_BE;
        case SF_U16_LE: return AFMT_U16_LE;
        case SF_U16_BE: return AFMT_U16_BE;
        case SF_S16_BE: return AFMT_S16_BE;
        case SF_U16_LE: return AFMT_U16_LE;
        case SF_U16_BE: return AFMT_U16_BE;
-       default: return AFMT_S16_LE;
+       default: return -E_BAD_SAMPLE_FORMAT;
        }
 }
 
        }
 }
 
@@ -113,10 +113,14 @@ static int oss_init(struct writer_node *wn, unsigned sample_rate,
        if (ret < 0)
                goto err;
        /* set PCM format */
        if (ret < 0)
                goto err;
        /* set PCM format */
-       sample_format = format = get_oss_format(sample_format);
+       ret = get_oss_format(sample_format);
+       if (ret < 0)
+               return ret;
+       sample_format = format = ret;
        ret = ioctl(powd->fd, SNDCTL_DSP_SETFMT, &format);
        if (ret < 0) {
                ret = -ERRNO_TO_PARA_ERROR(errno);
        ret = ioctl(powd->fd, SNDCTL_DSP_SETFMT, &format);
        if (ret < 0) {
                ret = -ERRNO_TO_PARA_ERROR(errno);
+               PARA_ERROR_LOG("could not set sample format\n");
                goto err;
        }
        ret = -E_BAD_SAMPLE_FORMAT;
                goto err;
        }
        ret = -E_BAD_SAMPLE_FORMAT;