diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2007-08-29 23:44:03 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2007-08-29 23:44:03 +0000 |
commit | f803f3511095e17811c50ebc85971ddd40c55618 (patch) | |
tree | 63b0ddccf21db4e57abc58f0df32e63a3c361ed5 /audio/unix.c | |
parent | 69e07f5a7b3934fac5bcf4c554e14e0d0b3cec47 (diff) |
Fix the ALSA plugin parameter mess
Diffstat (limited to 'audio/unix.c')
-rw-r--r-- | audio/unix.c | 203 |
1 files changed, 99 insertions, 104 deletions
diff --git a/audio/unix.c b/audio/unix.c index 7fa2db05..3b9d6d46 100644 --- a/audio/unix.c +++ b/audio/unix.c @@ -209,9 +209,9 @@ static int unix_send_cfg(int sock, struct ipc_data_cfg *cfg, int fd) return len; } - debug("fd=%d, fd_opt=%u, channels=%u, pkt_len=%u," - "sample_size=%u, rate=%u", fd, cfg->fd_opt, cfg->channels, - cfg->pkt_len, cfg->sample_size, cfg->rate); + debug("fd=%d, fd_opt=%u, pkt_len=%u, sample_size=%u, rate=%u", + fd, cfg->fd_opt, cfg->pkt_len, + cfg->sample_size, cfg->rate); if (cfg->codec == CFG_CODEC_SBC) codec_len = sizeof(struct ipc_codec_sbc); @@ -258,9 +258,8 @@ static void headset_setup_complete(struct device *dev, void *user_data) memset(&cfg, 0, sizeof(cfg)); cfg.fd_opt = CFG_FD_OPT_READWRITE; - cfg.codec = CFG_CODEC_NONE; - cfg.channels = 1; - cfg.channel_mode = CFG_CHANNEL_MODE_MONO; + cfg.codec = CFG_CODEC_SCO; + cfg.mode = CFG_MODE_MONO; cfg.pkt_len = 48; cfg.sample_size = 2; cfg.rate = 8000; @@ -327,24 +326,22 @@ static void a2dp_setup_complete(struct avdtp *session, struct device *dev, cfg->fd_opt = CFG_FD_OPT_WRITE; sbc_cap = (void *) codec_cap; - cfg->channels = sbc_cap->channel_mode == A2DP_CHANNEL_MODE_MONO ? - 1 : 2; - cfg->channel_mode = sbc_cap->channel_mode; + cfg->mode = sbc_cap->channel_mode; cfg->sample_size = 2; switch (sbc_cap->frequency) { - case A2DP_SAMPLING_FREQ_16000: - cfg->rate = 16000; - break; - case A2DP_SAMPLING_FREQ_32000: - cfg->rate = 32000; - break; - case A2DP_SAMPLING_FREQ_44100: - cfg->rate = 44100; - break; - case A2DP_SAMPLING_FREQ_48000: - cfg->rate = 48000; - break; + case A2DP_SAMPLING_FREQ_16000: + cfg->rate = 16000; + break; + case A2DP_SAMPLING_FREQ_32000: + cfg->rate = 32000; + break; + case A2DP_SAMPLING_FREQ_44100: + cfg->rate = 44100; + break; + case A2DP_SAMPLING_FREQ_48000: + cfg->rate = 48000; + break; } cfg->codec = CFG_CODEC_SBC; @@ -353,18 +350,18 @@ static void a2dp_setup_complete(struct avdtp *session, struct device *dev, sbc->subbands = sbc_cap->subbands == A2DP_SUBBANDS_4 ? 4 : 8; switch (sbc_cap->block_length) { - case A2DP_BLOCK_LENGTH_4: - sbc->blocks = 4; - break; - case A2DP_BLOCK_LENGTH_8: - sbc->blocks = 8; - break; - case A2DP_BLOCK_LENGTH_12: - sbc->blocks = 12; - break; - case A2DP_BLOCK_LENGTH_16: - sbc->blocks = 16; - break; + case A2DP_BLOCK_LENGTH_4: + sbc->blocks = 4; + break; + case A2DP_BLOCK_LENGTH_8: + sbc->blocks = 8; + break; + case A2DP_BLOCK_LENGTH_12: + sbc->blocks = 12; + break; + case A2DP_BLOCK_LENGTH_16: + sbc->blocks = 16; + break; } sbc->bitpool = sbc_cap->max_bitpool; @@ -454,92 +451,90 @@ static int cfg_to_caps(struct ipc_data_cfg *cfg, struct sbc_codec_cap *sbc_cap) sbc_cap->cap.media_type = AVDTP_MEDIA_TYPE_AUDIO; sbc_cap->cap.media_codec_type = A2DP_CODEC_SBC; - if (cfg->rate > 0) { - switch (cfg->rate) { - case 48000: - sbc_cap->frequency = A2DP_SAMPLING_FREQ_48000; - break; - case 44100: - sbc_cap->frequency = A2DP_SAMPLING_FREQ_44100; - break; - case 32000: - sbc_cap->frequency = A2DP_SAMPLING_FREQ_32000; - break; - case 16000: - sbc_cap->frequency = A2DP_SAMPLING_FREQ_16000; - break; - default: - return -EINVAL; - } - } else + switch (cfg->rate) { + case 48000: + sbc_cap->frequency = A2DP_SAMPLING_FREQ_48000; + break; + case 44100: + sbc_cap->frequency = A2DP_SAMPLING_FREQ_44100; + break; + case 32000: + sbc_cap->frequency = A2DP_SAMPLING_FREQ_32000; + break; + case 16000: + sbc_cap->frequency = A2DP_SAMPLING_FREQ_16000; + break; + default: sbc_cap->frequency = A2DP_SAMPLING_FREQ_44100; + break; + } - if (cfg->channel_mode > 0) { - switch (cfg->channel_mode) { - case A2DP_CHANNEL_MODE_JOINT_STEREO: - case A2DP_CHANNEL_MODE_STEREO: - case A2DP_CHANNEL_MODE_DUAL_CHANNEL: - case A2DP_CHANNEL_MODE_MONO: - sbc_cap->channel_mode = cfg->channel_mode; - break; - default: - return -EINVAL; - } - } else + switch (cfg->mode) { + case CFG_MODE_MONO: + sbc_cap->channel_mode = A2DP_CHANNEL_MODE_MONO; + break; + case CFG_MODE_DUAL_CHANNEL: + sbc_cap->channel_mode = A2DP_CHANNEL_MODE_DUAL_CHANNEL; + break; + case CFG_MODE_STEREO: + sbc_cap->channel_mode = A2DP_CHANNEL_MODE_STEREO; + break; + case CFG_MODE_JOINT_STEREO: + sbc_cap->channel_mode = A2DP_CHANNEL_MODE_JOINT_STEREO; + break; + default: sbc_cap->channel_mode = A2DP_CHANNEL_MODE_JOINT_STEREO; + break; + } - if (sbc->allocation > 0) { - switch (sbc->allocation) { - case A2DP_ALLOCATION_LOUDNESS: - case A2DP_ALLOCATION_SNR: - sbc_cap->allocation_method = sbc->allocation; - break; - default: - return -EINVAL; - } - } else + switch (sbc->allocation) { + case CFG_ALLOCATION_LOUDNESS: + sbc_cap->allocation_method = A2DP_ALLOCATION_LOUDNESS; + break; + case CFG_ALLOCATION_SNR: + sbc_cap->allocation_method = A2DP_ALLOCATION_LOUDNESS; + break; + default: sbc_cap->allocation_method = A2DP_ALLOCATION_LOUDNESS; + break; + } - if (sbc->subbands > 0) { - switch (sbc->subbands) { - case 8: - sbc_cap->subbands = A2DP_SUBBANDS_8; - break; - case 4: - sbc_cap->subbands = A2DP_SUBBANDS_4; - break; - default: - return -EINVAL; - } - } else + switch (sbc->subbands) { + case 8: sbc_cap->subbands = A2DP_SUBBANDS_8; + break; + case 4: + sbc_cap->subbands = A2DP_SUBBANDS_4; + break; + default: + sbc_cap->subbands = A2DP_SUBBANDS_8; + break; + } - if (sbc->blocks > 0) { - switch (sbc->blocks) { - case 16: - sbc_cap->block_length = A2DP_BLOCK_LENGTH_16; - break; - case 12: - sbc_cap->block_length = A2DP_BLOCK_LENGTH_12; - break; - case 8: - sbc_cap->block_length = A2DP_BLOCK_LENGTH_8; - break; - case 4: - sbc_cap->block_length = A2DP_BLOCK_LENGTH_4; - break; - default: - return -EINVAL; - } - } else + switch (sbc->blocks) { + case 16: sbc_cap->block_length = A2DP_BLOCK_LENGTH_16; + break; + case 12: + sbc_cap->block_length = A2DP_BLOCK_LENGTH_12; + break; + case 8: + sbc_cap->block_length = A2DP_BLOCK_LENGTH_8; + break; + case 4: + sbc_cap->block_length = A2DP_BLOCK_LENGTH_4; + break; + default: + sbc_cap->block_length = A2DP_BLOCK_LENGTH_16; + break; + } if (sbc->bitpool > 250) return -EINVAL; else if (sbc->bitpool > 0) sbc_cap->min_bitpool = sbc_cap->max_bitpool = sbc->bitpool; else - sbc_cap->min_bitpool = 53; + sbc_cap->min_bitpool = sbc_cap->max_bitpool = 53; return 0; } |