$OpenBSD: patch-libao2_ao_sndio_c,v 1.3 2014/02/19 19:12:43 ratchov Exp $
--- libao2/ao_sndio.c.orig	Mon Jan  6 23:02:58 2014
+++ libao2/ao_sndio.c	Tue Feb 18 14:31:47 2014
@@ -103,6 +103,8 @@ static int init(int rate, int channels, int format, in
     }
     sio_initpar(&par);
     par.bits = af_fmt2bits(format);
+    par.bps = (par.bits + 7) >> 3;
+    par.msb = 1;
     par.sig = (format & AF_FORMAT_SIGN_MASK) == AF_FORMAT_SI;
     if (par.bits > 8)
         par.le = (format & AF_FORMAT_END_MASK) == AF_FORMAT_LE;
@@ -118,7 +120,7 @@ static int init(int rate, int channels, int format, in
         mp_msg(MSGT_AO, MSGL_ERR, "ao2: couldn't get params\n");
         goto err_out;
     }
-    if (par.bps != SIO_BPS(par.bits)) {
+    if (par.bits < 8 * par.bps && !par.msb) {
         mp_msg(MSGT_AO, MSGL_ERR, "ao2: unsupported format\n");
         goto err_out;
     }
@@ -132,6 +134,8 @@ static int init(int rate, int channels, int format, in
     ao_data.format |= par.sig ? AF_FORMAT_SI : AF_FORMAT_US;
     if (par.bits > 8)
         ao_data.format |= par.le ? AF_FORMAT_LE : AF_FORMAT_BE;
+    else
+        ao_data.format |= AF_FORMAT_NE;
     ao_data.channels = par.pchan;
     ao_data.bps = bpf * par.rate;
     ao_data.buffersize = par.bufsz * bpf;
