diff options
author | Michal Ratajsky <[email protected]> | 2014-10-31 14:33:16 +0100 |
---|---|---|
committer | Michal Ratajsky <[email protected]> | 2014-10-31 14:33:16 +0100 |
commit | b839e8ca0c73f9715654497e241d4aa3e3042125 (patch) | |
tree | e7fad3a59d028ba407c4af4ef3b27b1e74085527 /backends/alsa | |
parent | 9d928d858194db5bb65535f521e4f9e169f1b2d9 (diff) | |
download | libmatemixer-b839e8ca0c73f9715654497e241d4aa3e3042125.tar.bz2 libmatemixer-b839e8ca0c73f9715654497e241d4aa3e3042125.tar.xz |
alsa: Improve *_list_streams functions
Avoids including useless streams in the list and optimizes GList construction.
Diffstat (limited to 'backends/alsa')
-rw-r--r-- | backends/alsa/alsa-backend.c | 20 | ||||
-rw-r--r-- | backends/alsa/alsa-device.c | 17 |
2 files changed, 21 insertions, 16 deletions
diff --git a/backends/alsa/alsa-backend.c b/backends/alsa/alsa-backend.c index 0b7895e..8c4913a 100644 --- a/backends/alsa/alsa-backend.c +++ b/backends/alsa/alsa-backend.c @@ -248,23 +248,23 @@ alsa_backend_list_streams (MateMixerBackend *backend) /* Walk through the list of devices and create the stream list, each * device has at most one input and one output stream */ - list = alsa->priv->devices; + list = g_list_last (alsa->priv->devices); while (list != NULL) { AlsaDevice *device = ALSA_DEVICE (list->data); AlsaStream *stream; - stream = alsa_device_get_input_stream (device); - if (stream != NULL) { - alsa->priv->streams = - g_list_append (alsa->priv->streams, g_object_ref (stream)); - } stream = alsa_device_get_output_stream (device); - if (stream != NULL) { + if (stream != NULL) + alsa->priv->streams = + g_list_prepend (alsa->priv->streams, g_object_ref (stream)); + + stream = alsa_device_get_input_stream (device); + if (stream != NULL) alsa->priv->streams = - g_list_append (alsa->priv->streams, g_object_ref (stream)); - } - list = list->next; + g_list_prepend (alsa->priv->streams, g_object_ref (stream)); + + list = list->prev; } } return alsa->priv->streams; diff --git a/backends/alsa/alsa-device.c b/backends/alsa/alsa-device.c index 6a2c54a..643e46e 100644 --- a/backends/alsa/alsa-device.c +++ b/backends/alsa/alsa-device.c @@ -465,12 +465,17 @@ alsa_device_list_streams (MateMixerDevice *mmd) device = ALSA_DEVICE (mmd); if (device->priv->streams == NULL) { - if (device->priv->output != NULL) - device->priv->streams = g_list_prepend (device->priv->streams, - g_object_ref (device->priv->output)); - if (device->priv->input != NULL) - device->priv->streams = g_list_prepend (device->priv->streams, - g_object_ref (device->priv->input)); + AlsaStream *stream; + + stream = alsa_device_get_output_stream (device); + if (stream != NULL) + device->priv->streams = + g_list_prepend (device->priv->streams, g_object_ref (stream)); + + stream = alsa_device_get_input_stream (device); + if (stream != NULL) + device->priv->streams = + g_list_prepend (device->priv->streams, g_object_ref (stream)); } return device->priv->streams; } |