diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2005-07-19 19:03:26 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2005-07-19 19:03:26 +0000 |
commit | ecb294fb2177cd0658a60eaf72c21c4866cbd9d3 (patch) | |
tree | f6a0cafc4016578b2b9d680a9440fa2756249cec /sys/oss/gstosssink.c | |
parent | 14a7cbe19edbd660e6e816d199e8229cbe54971b (diff) |
sys/oss/gstosssink.c: Parse spec to set correct oss values.
Original commit message from CVS:
* sys/oss/gstosssink.c: (gst_oss_sink_get_format),
(gst_oss_sink_open):
Parse spec to set correct oss values.
Diffstat (limited to 'sys/oss/gstosssink.c')
-rw-r--r-- | sys/oss/gstosssink.c | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c index 788fa49d..2ad6d619 100644 --- a/sys/oss/gstosssink.c +++ b/sys/oss/gstosssink.c @@ -221,6 +221,49 @@ G_STMT_START { \ } \ } G_STMT_END +static gint +gst_oss_sink_get_format (GstBufferFormat fmt) +{ + gint result; + + switch (fmt) { + case GST_MU_LAW: + result = AFMT_MU_LAW; + break; + case GST_A_LAW: + result = AFMT_A_LAW; + break; + case GST_IMA_ADPCM: + result = AFMT_IMA_ADPCM; + break; + case GST_U8: + result = AFMT_U8; + break; + case GST_S16_LE: + result = AFMT_S16_LE; + break; + case GST_S16_BE: + result = AFMT_S16_BE; + break; + case GST_S8: + result = AFMT_S8; + break; + case GST_U16_LE: + result = AFMT_U16_LE; + break; + case GST_U16_BE: + result = AFMT_U16_BE; + break; + case GST_MPEG: + result = AFMT_MPEG; + break; + default: + result = 0; + break; + } + return result; +} + static gboolean gst_oss_sink_open (GstAudioSink * asink, GstRingBufferSpec * spec) { @@ -243,10 +286,15 @@ gst_oss_sink_open (GstAudioSink * asink, GstRingBufferSpec * spec) mode &= ~O_NONBLOCK; fcntl (oss->fd, F_SETFL, mode); - SET_PARAM (oss, SNDCTL_DSP_SETFMT, AFMT_S16_LE); - SET_PARAM (oss, SNDCTL_DSP_STEREO, 1); - SET_PARAM (oss, SNDCTL_DSP_CHANNELS, 2); - SET_PARAM (oss, SNDCTL_DSP_SPEED, 44100); + tmp = gst_oss_sink_get_format (spec->format); + if (tmp == 0) + goto wrong_format; + + SET_PARAM (oss, SNDCTL_DSP_SETFMT, tmp); + if (spec->channels == 2) + SET_PARAM (oss, SNDCTL_DSP_STEREO, 1); + SET_PARAM (oss, SNDCTL_DSP_CHANNELS, spec->channels); + SET_PARAM (oss, SNDCTL_DSP_SPEED, spec->rate); tmp = ilog2 (spec->segsize); tmp = ((spec->segtotal & 0x7fff) << 16) | tmp; @@ -266,6 +314,12 @@ gst_oss_sink_open (GstAudioSink * asink, GstRingBufferSpec * spec) spec->segtotal, tmp); return TRUE; + +wrong_format: + { + GST_DEBUG ("wrong format %d\n", spec->format); + return FALSE; + } } static gboolean |