diff options
Diffstat (limited to 'hal')
| -rw-r--r-- | hal/audio_hw.c | 25 | ||||
| -rw-r--r-- | hal/audio_hw.h | 7 |
2 files changed, 32 insertions, 0 deletions
diff --git a/hal/audio_hw.c b/hal/audio_hw.c index 4f92ea3a..c2997c66 100644 --- a/hal/audio_hw.c +++ b/hal/audio_hw.c @@ -29,6 +29,7 @@ #include <sys/time.h> #include <stdlib.h> #include <math.h> +#include <dlfcn.h> #include <sys/resource.h> #include <sys/prctl.h> @@ -797,6 +798,10 @@ static int stop_output_stream(struct stream_out *out) return -EINVAL; } + if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD && + adev->visualizer_stop_output != NULL) + adev->visualizer_stop_output(out->handle); + /* 1. Get and set stream specific mixer controls */ disable_audio_route(adev, uc_info, true); @@ -863,6 +868,9 @@ int start_output_stream(struct stream_out *out) } if (out->offload_callback) compress_nonblock(out->compr, out->non_blocking); + + if (adev->visualizer_start_output != NULL) + adev->visualizer_start_output(out->handle); } ALOGV("%s: exit", __func__); return 0; @@ -1742,6 +1750,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev, out->sample_rate = config->sample_rate; out->channel_mask = AUDIO_CHANNEL_OUT_STEREO; out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_STEREO; + out->handle = handle; /* Init use case and pcm_config */ if (out->flags & AUDIO_OUTPUT_FLAG_DIRECT && @@ -2263,6 +2272,22 @@ static int adev_open(const hw_module_t *module, const char *name, *device = NULL; return -EINVAL; } + + if (access(VISUALIZER_LIBRARY_PATH, R_OK) == 0) { + adev->visualizer_lib = dlopen(VISUALIZER_LIBRARY_PATH, RTLD_NOW); + if (adev->visualizer_lib == NULL) { + ALOGE("%s: DLOPEN failed for %s", __func__, VISUALIZER_LIBRARY_PATH); + } else { + ALOGV("%s: DLOPEN successful for %s", __func__, VISUALIZER_LIBRARY_PATH); + adev->visualizer_start_output = + (int (*)(audio_io_handle_t))dlsym(adev->visualizer_lib, + "visualizer_hal_start_output"); + adev->visualizer_stop_output = + (int (*)(audio_io_handle_t))dlsym(adev->visualizer_lib, + "visualizer_hal_stop_output"); + } + } + *device = &adev->device.common; ALOGV("%s: exit", __func__); diff --git a/hal/audio_hw.h b/hal/audio_hw.h index 2c7fffd8..717c0a6c 100644 --- a/hal/audio_hw.h +++ b/hal/audio_hw.h @@ -25,6 +25,8 @@ #include <audio_route/audio_route.h> +#define VISUALIZER_LIBRARY_PATH "/system/lib/soundfx/libqcomvisualizer.so" + /* Flags used to initialize acdb_settings variable that goes to ACDB library */ #define DMIC_FLAG 0x00000002 #define TTY_MODE_OFF 0x00000010 @@ -110,6 +112,7 @@ struct stream_out { audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1]; bool muted; uint64_t written; /* total frames written, not cleared when entering standby */ + audio_io_handle_t handle; int non_blocking; int playback_started; @@ -187,6 +190,10 @@ struct audio_device { bool speaker_lr_swap; void *platform; + + void *visualizer_lib; + int (*visualizer_start_output)(audio_io_handle_t); + int (*visualizer_stop_output)(audio_io_handle_t); }; /* |
