diff options
author | Szymon Janc <szymon.janc@tieto.com> | 2014-09-26 15:42:15 +0200 |
---|---|---|
committer | Szymon Janc <szymon.janc@gmail.com> | 2014-09-29 17:26:55 +0200 |
commit | 21d3e1230379dbe50f90427aa4e4c0304fbcf8ba (patch) | |
tree | 3c02d7036d3dc6bdf1f559f6e8feeb5c89630b01 /android/hal-audio.c | |
parent | ee3f793f706f56022a5951af65b73b889398192f (diff) | |
download | bluez-21d3e1230379dbe50f90427aa4e4c0304fbcf8ba.tar.gz |
android/hal-audio: Remove use of shared queue code
Diffstat (limited to 'android/hal-audio.c')
-rw-r--r-- | android/hal-audio.c | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/android/hal-audio.c b/android/hal-audio.c index 66dc46aa2..1bbc0736b 100644 --- a/android/hal-audio.c +++ b/android/hal-audio.c @@ -36,7 +36,6 @@ #include "hal-msg.h" #include "hal-audio.h" #include "src/shared/util.h" -#include "src/shared/queue.h" #define FIXED_A2DP_PLAYBACK_LATENCY_MS 25 @@ -97,17 +96,18 @@ extern int clock_nanosleep(clockid_t clock_id, int flags, struct timespec *remain); #endif -static const audio_codec_get_t audio_codecs[] = { - codec_aptx, - codec_sbc, +static struct { + const audio_codec_get_t get_codec; + bool loaded; +} audio_codecs[] = { + { .get_codec = codec_aptx, .loaded = false }, + { .get_codec = codec_sbc, .loaded = false }, }; #define NUM_CODECS (sizeof(audio_codecs) / sizeof(audio_codecs[0])) #define MAX_AUDIO_ENDPOINTS NUM_CODECS -static struct queue *loaded_codecs; - struct audio_endpoint { uint8_t id; const struct audio_codec *codec; @@ -423,10 +423,9 @@ struct register_state { bool error; }; -static void register_endpoint(void *data, void *user_data) +static void register_endpoint(const struct audio_codec *codec, + struct register_state *state) { - struct audio_codec *codec = data; - struct register_state *state = user_data; struct audio_endpoint *ep = state->ep; /* don't even try to register more endpoints if one failed */ @@ -451,11 +450,19 @@ static void register_endpoint(void *data, void *user_data) static int register_endpoints(void) { struct register_state state; + unsigned int i; state.ep = &audio_endpoints[0]; state.error = false; - queue_foreach(loaded_codecs, register_endpoint, &state); + for (i = 0; i < NUM_CODECS; i++) { + const struct audio_codec *codec = audio_codecs[i].get_codec(); + + if (!audio_codecs[i].loaded) + continue; + + register_endpoint(codec, &state); + } return state.error ? AUDIO_STATUS_FAILED : AUDIO_STATUS_SUCCESS; } @@ -1293,24 +1300,26 @@ static int audio_dump(const audio_hw_device_t *device, int fd) return -ENOSYS; } -static void unload_codec(void *data) -{ - struct audio_codec *codec = data; - - if (codec->unload) - codec->unload(); -} - static int audio_close(hw_device_t *device) { struct a2dp_audio_dev *a2dp_dev = (struct a2dp_audio_dev *)device; + unsigned int i; DBG(""); unregister_endpoints(); - queue_destroy(loaded_codecs, unload_codec); - loaded_codecs = NULL; + for (i = 0; i < NUM_CODECS; i++) { + const struct audio_codec *codec = audio_codecs[i].get_codec(); + + if (!audio_codecs[i].loaded) + continue; + + if (codec->unload) + codec->unload(); + + audio_codecs[i].loaded = false; + } shutdown(listen_sk, SHUT_RDWR); shutdown(audio_sk, SHUT_RDWR); @@ -1488,16 +1497,13 @@ static int audio_open(const hw_module_t *module, const char *name, a2dp_dev->dev.close_input_stream = audio_close_input_stream; a2dp_dev->dev.dump = audio_dump; - loaded_codecs = queue_new(); - for (i = 0; i < NUM_CODECS; i++) { - audio_codec_get_t get_codec = audio_codecs[i]; - const struct audio_codec *codec = get_codec(); + const struct audio_codec *codec = audio_codecs[i].get_codec(); if (codec->load && !codec->load()) continue; - queue_push_tail(loaded_codecs, (void *) codec); + audio_codecs[i].loaded = true; } /* |