Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72a3ceab authored by Aniket Kumar Lata's avatar Aniket Kumar Lata Committed by David Lin
Browse files

visualizer: Pass sound card and capture device from audio HAL

Sound card number and capture device id were hardcoded in
visualizer. Fix this by passing card number and capture
device id while starting visualizer output from audio HAL.

Bug: 65263761
Change-Id: Icc5c33e35d836f524918900b3bfdf2a587465505
(cherry picked from commit 90c3646a)
parent 702c1575
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -2115,8 +2115,13 @@ 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, 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 @@ static int adev_open(const hw_module_t *module, const char *name,
    } 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,
+1 −1
Original line number Diff line number Diff line
@@ -337,7 +337,7 @@ struct audio_device {
    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
+0 −8
Original line number Diff line number Diff line
@@ -27,14 +27,6 @@ LOCAL_SHARED_LIBRARIES := \
	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 \
+17 −8
Original line number Diff line number Diff line
@@ -145,6 +145,12 @@ const effect_descriptor_t *descriptors[] = {
        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 @@ bool exit_thread;
/* 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 @@ void *capture_thread_loop(void *arg __unused)

    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 @@ void *capture_thread_loop(void *arg __unused)
            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 @@ void *capture_thread_loop(void *arg __unused)
 */

__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 @@ int visualizer_hal_start_output(audio_io_handle_t output, int pcm_id) {
        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);