From 54b4dad4547d2d74cb57c059301decf45d402e6f Mon Sep 17 00:00:00 2001 From: aymeric <aymeric@3f6dc0c8-ddfe-455d-9043-3cd528dc4637> Date: Tue, 28 Apr 2009 22:18:51 +0000 Subject: [PATCH] fix volume control for alsa and add GET_SAMPLE_RATE method git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@450 3f6dc0c8-ddfe-455d-9043-3cd528dc4637 --- linphone/mediastreamer2/src/alsa.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/linphone/mediastreamer2/src/alsa.c b/linphone/mediastreamer2/src/alsa.c index 1294b416ad..b1a1604590 100644 --- a/linphone/mediastreamer2/src/alsa.c +++ b/linphone/mediastreamer2/src/alsa.c @@ -667,6 +667,16 @@ static MSSndCard * alsa_card_new(int id) obj->name=pos1; ad->pcmdev=ms_strdup_printf("default:%i",id); ad->mixdev=ms_strdup_printf("default:%i",id); + { + snd_mixer_t *mixer; + mixer = alsa_mixer_open(ad->mixdev); + if (mixer==NULL) { + ms_free(ad->mixdev); + ad->mixdev=ms_strdup_printf("hw:%i",id); + } else { + alsa_mixer_close(mixer); + } + } } /*check card capabilities: */ obj->capabilities=get_card_capabilities(ad->pcmdev); @@ -880,6 +890,12 @@ void alsa_read_process(MSFilter *obj){ } #endif +static int alsa_read_get_sample_rate(MSFilter *obj, void *param){ + AlsaReadData *ad=(AlsaReadData*)obj->data; + *((int*)param)=ad->rate; + return 0; +} + static int alsa_read_set_sample_rate(MSFilter *obj, void *param){ AlsaReadData *ad=(AlsaReadData*)obj->data; ad->rate=*((int*)param); @@ -893,8 +909,9 @@ static int alsa_read_set_nchannels(MSFilter *obj, void *param){ } MSFilterMethod alsa_read_methods[]={ + {MS_FILTER_GET_SAMPLE_RATE, alsa_read_get_sample_rate}, {MS_FILTER_SET_SAMPLE_RATE, alsa_read_set_sample_rate}, - {MS_FILTER_SET_SAMPLE_RATE, alsa_read_set_nchannels}, + {MS_FILTER_SET_NCHANNELS, alsa_read_set_nchannels}, {0,NULL} }; @@ -946,6 +963,12 @@ void alsa_write_uninit(MSFilter *obj){ ms_free(ad); } +static int alsa_write_get_sample_rate(MSFilter *obj, void *data){ + AlsaWriteData *ad=(AlsaWriteData*)obj->data; + *((int*)data)=ad->rate; + return 0; +} + int alsa_write_set_sample_rate(MSFilter *obj, void *data){ int *rate=(int*)data; AlsaWriteData *ad=(AlsaWriteData*)obj->data; @@ -990,6 +1013,7 @@ void alsa_write_process(MSFilter *obj){ } MSFilterMethod alsa_write_methods[]={ + {MS_FILTER_GET_SAMPLE_RATE, alsa_write_get_sample_rate}, {MS_FILTER_SET_SAMPLE_RATE, alsa_write_set_sample_rate}, {MS_FILTER_SET_NCHANNELS, alsa_write_set_nchannels}, {0,NULL} -- GitLab