]> code.delx.au - pulseaudio/commitdiff
Split up pa_alsa_init_proplist into two seperate functions for the card and snd_pcm_t...
authorLennart Poettering <lennart@poettering.net>
Sat, 17 Jan 2009 01:00:57 +0000 (02:00 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 17 Jan 2009 01:00:57 +0000 (02:00 +0100)
src/modules/alsa/alsa-util.c
src/modules/alsa/alsa-util.h
src/modules/alsa/module-alsa-sink.c
src/modules/alsa/module-alsa-source.c

index 37b12dc81ba6e63b229be7e00a9195b9c178795b..a4301f427eb4754e8d2321eb0997251cd362a8d5 100644 (file)
@@ -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) {
index 86b76b7d657003f6ed83b8e6aeca199f96c9f4c9..f58ec8e05a8e10723f22a6858a33e38a6cccd732 100644 (file)
@@ -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);
 
index 977d7e4bf71f22cebba37441de72e2feaec454d7..62ce89cbbd34b736f7e343a0b6757f8f175442b9 100644 (file)
@@ -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();
 }
index 5ad760188d9d83a0c4a731322d34db3a11ea2cb9..7ca305f58ce2d33303dad0bd2893d3ccf5ac36de 100644 (file)
@@ -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();
 }