summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordeanna <deanna@openbsd.org>2007-09-10 05:39:07 +0000
committerdeanna <deanna@openbsd.org>2007-09-10 05:39:07 +0000
commitc8141f9f7667de6ab0863f26c45a1b2396004f73 (patch)
tree3ce297287caf497195df90e1550ad6a939f7b3f8
parentinitialize sc_outports->master and sc_inports->master. Fixes "set failed" (diff)
downloadwireguard-openbsd-c8141f9f7667de6ab0863f26c45a1b2396004f73.tar.xz
wireguard-openbsd-c8141f9f7667de6ab0863f26c45a1b2396004f73.zip
If 44.1kHz sample rate isn't supported, use 48kHz instead.
-rw-r--r--sys/dev/pci/azalia.c15
-rw-r--r--sys/dev/pci/azalia.h3
2 files changed, 14 insertions, 4 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index 779847ab653..fbdf3d683dc 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.c,v 1.31 2007/09/10 05:30:14 deanna Exp $ */
+/* $OpenBSD: azalia.c,v 1.32 2007/09/10 05:39:07 deanna Exp $ */
/* $NetBSD: azalia.c,v 1.20 2006/05/07 08:31:44 kent Exp $ */
/*-
@@ -1268,6 +1268,15 @@ azalia_codec_construct_format(codec_t *this, int newdac, int newadc)
}
rvariation = group->nconv * nbits;
+ if (bits_rates & COP_PCM_R441)
+ this->rate = 44100;
+ else if (bits_rates & COP_PCM_R480)
+ this->rate = 48000;
+ else {
+ printf("%s: %s/%d invalid PCM format: 0x%8.8x\n",
+ XNAME(this->az), __FILE__, __LINE__, bits_rates);
+ return -1;
+ }
if (this->formats != NULL)
free(this->formats, M_DEVBUF);
this->nformats = 0;
@@ -2010,7 +2019,7 @@ azalia_set_params(void *v, int smode, int umode, audio_params_t *p,
r->encoding = AUDIO_ENCODING_SLINEAR_LE;
r->precision = 16;
r->channels = 2;
- r->sample_rate = 44100;
+ r->sample_rate = codec->rate;
}
for (i = 0; i < codec->nformats; i++) {
if (r->encoding != codec->formats[i].encoding)
@@ -2043,7 +2052,7 @@ azalia_set_params(void *v, int smode, int umode, audio_params_t *p,
p->encoding = AUDIO_ENCODING_SLINEAR_LE;
p->precision = 16;
p->channels = 2;
- p->sample_rate = 44100;
+ p->sample_rate = codec->rate;
}
for (i = 0; i < codec->nformats; i++) {
if (p->encoding != codec->formats[i].encoding)
diff --git a/sys/dev/pci/azalia.h b/sys/dev/pci/azalia.h
index 34c455ef584..63be267fce3 100644
--- a/sys/dev/pci/azalia.h
+++ b/sys/dev/pci/azalia.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.h,v 1.12 2007/09/10 05:34:21 deanna Exp $ */
+/* $OpenBSD: azalia.h,v 1.13 2007/09/10 05:39:07 deanna Exp $ */
/* $NetBSD: azalia.h,v 1.6 2006/01/16 14:15:26 kent Exp $ */
/*-
@@ -565,6 +565,7 @@ typedef struct codec_t {
struct audio_encoding_set *encodings;
uint32_t *extra;
+ u_int rate;
} codec_t;