Merge "visualizer: Pass sound card and capture device from audio HAL" into pi-dev
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 98d67c4..fb15db5 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2115,8 +2115,13 @@
if (out->offload_callback)
compress_nonblock(out->compr, out->non_blocking);
- if (adev->visualizer_start_output != NULL)
- adev->visualizer_start_output(out->handle, out->pcm_device_id);
+ if (adev->visualizer_start_output != NULL) {
+ int capture_device_id =
+ platform_get_pcm_device_id(USECASE_AUDIO_RECORD_AFE_PROXY,
+ PCM_CAPTURE);
+ adev->visualizer_start_output(out->handle, out->pcm_device_id,
+ adev->snd_card, capture_device_id);
+ }
if (adev->offload_effects_start_output != NULL)
adev->offload_effects_start_output(out->handle, out->pcm_device_id);
} else if (out->usecase == USECASE_AUDIO_PLAYBACK_MMAP) {
@@ -5618,7 +5623,7 @@
} else {
ALOGV("%s: DLOPEN successful for %s", __func__, VISUALIZER_LIBRARY_PATH);
adev->visualizer_start_output =
- (int (*)(audio_io_handle_t, int))dlsym(adev->visualizer_lib,
+ (int (*)(audio_io_handle_t, int, int, int))dlsym(adev->visualizer_lib,
"visualizer_hal_start_output");
adev->visualizer_stop_output =
(int (*)(audio_io_handle_t, int))dlsym(adev->visualizer_lib,
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 921c249..6379844 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -337,7 +337,7 @@
card_status_t card_status;
void *visualizer_lib;
- int (*visualizer_start_output)(audio_io_handle_t, int);
+ int (*visualizer_start_output)(audio_io_handle_t, int, int, int);
int (*visualizer_stop_output)(audio_io_handle_t, int);
/* The pcm_params use_case_table is loaded by adev_verify_devices() upon
diff --git a/visualizer/Android.mk b/visualizer/Android.mk
index 7d7cfe9..13a45c7 100644
--- a/visualizer/Android.mk
+++ b/visualizer/Android.mk
@@ -27,14 +27,6 @@
libdl \
libtinyalsa
-# HACK to set the right record proxy effect card number.
-# It should be retrieved from the primary hal USECASE_AUDIO_RECORD_AFE_PROXY.
-ifneq ($(filter msm8998,$(TARGET_BOARD_PLATFORM)),)
- LOCAL_CFLAGS := -DCAPTURE_DEVICE=7
-else
- LOCAL_CFLAGS := -DCAPTURE_DEVICE=8
-endif
-
LOCAL_CFLAGS += \
-Wall \
-Werror \
diff --git a/visualizer/offload_visualizer.c b/visualizer/offload_visualizer.c
index 860dfce..74beac7 100644
--- a/visualizer/offload_visualizer.c
+++ b/visualizer/offload_visualizer.c
@@ -145,6 +145,12 @@
NULL,
};
+struct pcm_capture_config {
+ int snd_card_num;
+ int capture_device_id;
+};
+
+struct pcm_capture_config capture_config;
pthread_once_t once = PTHREAD_ONCE_INIT;
int init_status;
@@ -172,16 +178,12 @@
/* 0 if the capture thread was created successfully */
int thread_status;
-
#define DSP_OUTPUT_LATENCY_MS 0 /* Fudge factor for latency after capture point in audio DSP */
/* Retry for delay for mixer open */
#define RETRY_NUMBER 10
#define RETRY_US 500000
-#define MIXER_CARD 0
-#define SOUND_CARD 0
-
/* Proxy port supports only MMAP read and those fixed parameters*/
#define AUDIO_CAPTURE_CHANNEL_COUNT 2
#define AUDIO_CAPTURE_SMP_RATE 48000
@@ -338,10 +340,10 @@
pthread_mutex_lock(&lock);
- mixer = mixer_open(MIXER_CARD);
+ mixer = mixer_open(capture_config.snd_card_num);
while (mixer == NULL && retry_num < RETRY_NUMBER) {
usleep(RETRY_US);
- mixer = mixer_open(MIXER_CARD);
+ mixer = mixer_open(capture_config.snd_card_num);
retry_num++;
}
if (mixer == NULL) {
@@ -357,7 +359,8 @@
if (!capture_enabled) {
ret = configure_proxy_capture(mixer, 1);
if (ret == 0) {
- pcm = pcm_open(SOUND_CARD, CAPTURE_DEVICE,
+ pcm = pcm_open(capture_config.snd_card_num,
+ capture_config.capture_device_id,
PCM_IN|PCM_MMAP|PCM_NOIRQ, &pcm_config_capture);
if (pcm && !pcm_is_ready(pcm)) {
ALOGW("%s: %s", __func__, pcm_get_error(pcm));
@@ -427,7 +430,8 @@
*/
__attribute__ ((visibility ("default")))
-int visualizer_hal_start_output(audio_io_handle_t output, int pcm_id) {
+int visualizer_hal_start_output(audio_io_handle_t output, int pcm_id,
+ int card_number, int pcm_capture_id) {
int ret = 0;
struct listnode *node;
@@ -444,6 +448,11 @@
goto exit;
}
+ ALOGV("%s card number %d pcm_capture_id %d",
+ __func__, card_number, pcm_capture_id);
+ capture_config.snd_card_num = card_number;
+ capture_config.capture_device_id = pcm_capture_id;
+
output_context_t *out_ctxt = (output_context_t *)malloc(sizeof(output_context_t));
out_ctxt->handle = output;
list_init(&out_ctxt->effects_list);