From f03a7e43db145273408414d32fbae49800ab7a29 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 17 Jan 2009 02:00:57 +0100 Subject: Split up pa_alsa_init_proplist into two seperate functions for the card and snd_pcm_t specific parts --- src/modules/alsa/alsa-util.c | 36 ++++++++++++++++++++++------------- src/modules/alsa/alsa-util.h | 3 ++- src/modules/alsa/module-alsa-sink.c | 14 ++++++-------- src/modules/alsa/module-alsa-source.c | 12 +++++------- 4 files changed, 36 insertions(+), 29 deletions(-) (limited to 'src/modules') diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c index 37b12dc8..a4301f42 100644 --- a/src/modules/alsa/alsa-util.c +++ b/src/modules/alsa/alsa-util.c @@ -1205,7 +1205,26 @@ void pa_alsa_redirect_errors_dec(void) { snd_lib_error_set_handler(NULL); } -void pa_alsa_init_proplist(pa_proplist *p, snd_pcm_info_t *pcm_info) { +void pa_alsa_init_proplist_card(pa_proplist *p, int card) { + char *cn, *lcn; + + pa_assert(p); + pa_assert(card >= 0); + + pa_proplist_setf(p, "alsa.card", "%i", card); + + if (snd_card_get_name(card, &cn) >= 0) { + pa_proplist_sets(p, "alsa.card_name", cn); + free(cn); + } + + if (snd_card_get_longname(card, &lcn) >= 0) { + pa_proplist_sets(p, "alsa.long_card_name", lcn); + free(lcn); + } +} + +void pa_alsa_init_proplist_pcm(pa_proplist *p, snd_pcm_info_t *pcm_info) { static const char * const alsa_class_table[SND_PCM_CLASS_LAST+1] = { [SND_PCM_CLASS_GENERIC] = "generic", @@ -1226,8 +1245,7 @@ void pa_alsa_init_proplist(pa_proplist *p, snd_pcm_info_t *pcm_info) { snd_pcm_class_t class; snd_pcm_subclass_t subclass; - const char *n, *id, *sdn; - char *cn = NULL, *lcn = NULL; + const char *n, *id, *sdn, *cn; int card; pa_assert(p); @@ -1260,13 +1278,8 @@ void pa_alsa_init_proplist(pa_proplist *p, snd_pcm_info_t *pcm_info) { pa_proplist_setf(p, "alsa.device", "%u", snd_pcm_info_get_device(pcm_info)); if ((card = snd_pcm_info_get_card(pcm_info)) >= 0) { - pa_proplist_setf(p, "alsa.card", "%i", card); - - if (snd_card_get_name(card, &cn) >= 0) - pa_proplist_sets(p, "alsa.card_name", cn); - - if (snd_card_get_longname(card, &lcn) >= 0) - pa_proplist_sets(p, "alsa.long_card_name", lcn); + pa_alsa_init_proplist_card(p, card); + cn = pa_proplist_gets(p, "alsa.card_name"); } if (cn && n) @@ -1275,9 +1288,6 @@ void pa_alsa_init_proplist(pa_proplist *p, snd_pcm_info_t *pcm_info) { pa_proplist_sets(p, PA_PROP_DEVICE_DESCRIPTION, cn); else if (n) pa_proplist_sets(p, PA_PROP_DEVICE_DESCRIPTION, n); - - free(lcn); - free(cn); } int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents) { diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h index 86b76b7d..f58ec8e0 100644 --- a/src/modules/alsa/alsa-util.h +++ b/src/modules/alsa/alsa-util.h @@ -102,7 +102,8 @@ void pa_alsa_dump_status(snd_pcm_t *pcm); void pa_alsa_redirect_errors_inc(void); void pa_alsa_redirect_errors_dec(void); -void pa_alsa_init_proplist(pa_proplist *p, snd_pcm_info_t *pcm_info); +void pa_alsa_init_proplist_pcm(pa_proplist *p, snd_pcm_info_t *pcm_info); +void pa_alsa_init_proplist_card(pa_proplist *p, int card); int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents); diff --git a/src/modules/alsa/module-alsa-sink.c b/src/modules/alsa/module-alsa-sink.c index 977d7e4b..62ce89cb 100644 --- a/src/modules/alsa/module-alsa-sink.c +++ b/src/modules/alsa/module-alsa-sink.c @@ -1308,10 +1308,9 @@ int pa__init(pa_module*m) { use_tsched = FALSE; } - u = pa_xnew0(struct userdata, 1); + m->userdata = u = pa_xnew0(struct userdata, 1); u->core = m->core; u->module = m; - m->userdata = u; u->use_mmap = use_mmap; u->use_tsched = use_tsched; u->first = TRUE; @@ -1439,7 +1438,7 @@ int pa__init(pa_module*m) { pa_sink_new_data_set_sample_spec(&data, &ss); pa_sink_new_data_set_channel_map(&data, &map); - pa_alsa_init_proplist(data.proplist, pcm_info); + pa_alsa_init_proplist_pcm(data.proplist, pcm_info); pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_name); pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE, "%lu", (unsigned long) (period_frames * frame_size * nfrags)); pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE, "%lu", (unsigned long) (period_frames * frame_size)); @@ -1633,10 +1632,8 @@ void pa__done(pa_module*m) { pa_assert(m); - if (!(u = m->userdata)) { - pa_alsa_redirect_errors_dec(); - return; - } + if (!(u = m->userdata)) + goto finish; if (u->sink) pa_sink_unlink(u->sink); @@ -1677,7 +1674,8 @@ void pa__done(pa_module*m) { pa_xfree(u->device_name); pa_xfree(u); - snd_config_update_free_global(); +finish: + snd_config_update_free_global(); pa_alsa_redirect_errors_dec(); } diff --git a/src/modules/alsa/module-alsa-source.c b/src/modules/alsa/module-alsa-source.c index 5ad76018..7ca305f5 100644 --- a/src/modules/alsa/module-alsa-source.c +++ b/src/modules/alsa/module-alsa-source.c @@ -1142,10 +1142,9 @@ int pa__init(pa_module*m) { use_tsched = FALSE; } - u = pa_xnew0(struct userdata, 1); + m->userdata = u = pa_xnew0(struct userdata, 1); u->core = m->core; u->module = m; - m->userdata = u; u->use_mmap = use_mmap; u->use_tsched = use_tsched; u->rtpoll = pa_rtpoll_new(); @@ -1266,7 +1265,7 @@ int pa__init(pa_module*m) { pa_source_new_data_set_sample_spec(&data, &ss); pa_source_new_data_set_channel_map(&data, &map); - pa_alsa_init_proplist(data.proplist, pcm_info); + pa_alsa_init_proplist_pcm(data.proplist, pcm_info); pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_name); pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE, "%lu", (unsigned long) (period_frames * frame_size * nfrags)); pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE, "%lu", (unsigned long) (period_frames * frame_size)); @@ -1454,10 +1453,8 @@ void pa__done(pa_module*m) { pa_assert(m); - if (!(u = m->userdata)) { - pa_alsa_redirect_errors_dec(); - return; - } + if (!(u = m->userdata)) + goto finish; if (u->source) pa_source_unlink(u->source); @@ -1495,6 +1492,7 @@ void pa__done(pa_module*m) { pa_xfree(u->device_name); pa_xfree(u); +finish: snd_config_update_free_global(); pa_alsa_redirect_errors_dec(); } -- cgit