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

Commit a3e6afe9 authored by Naresh Tanniru's avatar Naresh Tanniru Committed by Gerrit - the friendly Code Review server
Browse files

hal: Add support to get active microphones on input stream

Add support to get active microphones on input stream.
Get microphone device id and channel map based on active
usecase and sound device. Active microphone characteristics
are retrieved from platform info using this device id.

Change-Id: I63ec99e70980869097fa896bc4b309fc0583fb3a
parent 2b3d86ba
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -5612,6 +5612,36 @@ static int in_get_mmap_position(const struct audio_stream_in *stream,
    return 0;
}

static int in_get_active_microphones(const struct audio_stream_in *stream,
                                     struct audio_microphone_characteristic_t *mic_array,
                                     size_t *mic_count) {
    struct stream_in *in = (struct stream_in *)stream;
    struct audio_device *adev = in->dev;
    ALOGVV("%s", __func__);

    lock_input_stream(in);
    pthread_mutex_lock(&adev->lock);
    int ret = platform_get_active_microphones(adev->platform,
                                              audio_channel_count_from_in_mask(in->channel_mask),
                                              in->usecase, mic_array, mic_count);
    pthread_mutex_unlock(&adev->lock);
    pthread_mutex_unlock(&in->lock);

    return ret;
}

static int adev_get_microphones(const struct audio_hw_device *dev,
                                struct audio_microphone_characteristic_t *mic_array,
                                size_t *mic_count) {
    struct audio_device *adev = (struct audio_device *)dev;
    ALOGVV("%s", __func__);

    pthread_mutex_lock(&adev->lock);
    int ret = platform_get_microphones(adev->platform, mic_array, mic_count);
    pthread_mutex_unlock(&adev->lock);

    return ret;
}
int adev_open_output_stream(struct audio_hw_device *dev,
                            audio_io_handle_t handle,
                            audio_devices_t devices,
@@ -6795,6 +6825,7 @@ static int adev_open_input_stream(struct audio_hw_device *dev,
    in->stream.set_gain = in_set_gain;
    in->stream.read = in_read;
    in->stream.get_input_frames_lost = in_get_input_frames_lost;
    in->stream.get_active_microphones = in_get_active_microphones;

    in->device = devices;
    in->source = source;
@@ -7334,6 +7365,7 @@ static int adev_open(const hw_module_t *module, const char *name,
    adev->device.get_audio_port = adev_get_audio_port;
    adev->device.set_audio_port_config = adev_set_audio_port_config;
    adev->device.dump = adev_dump;
    adev->device.get_microphones = adev_get_microphones;

    /* Set the default route before the PCM stream is opened */
    adev->mode = AUDIO_MODE_NORMAL;
+23 −0
Original line number Diff line number Diff line
@@ -8101,3 +8101,26 @@ static const char *platform_get_mixer_control(struct mixer_ctl *ctl)

    return id_string;
}

bool platform_set_microphone_characteristic(void *platform __unused,
                                            struct audio_microphone_characteristic_t mic __unused) {
    return -ENOSYS;
}

int platform_get_microphones(void *platform __unused,
                             struct audio_microphone_characteristic_t *mic_array __unused,
                             size_t *mic_count __unused) {
    return -ENOSYS;
}

bool platform_set_microphone_map(void *platform __unused, snd_device_t in_snd_device __unused,
                                 const struct mic_info *info __unused) {
    return false;
}

int platform_get_active_microphones(void *platform __unused, unsigned int channels __unused,
                                    audio_usecase_t usecase __unused,
                                    struct audio_microphone_characteristic_t *mic_array __unused,
                                    size_t *mic_count __unused) {
    return -ENOSYS;
}
+3 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
 * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 * Not a Contribution.
 *
 * Copyright (C) 2013 The Android Open Source Project
@@ -398,6 +398,8 @@ enum {
#define TX_VOICE_FV5ECNS_SM 0x10F09
#define TX_VOICE_FV5ECNS_DM 0x10F0A

#define AUDIO_MAKE_STRING_FROM_ENUM(X)   { #X, X }

#define LIB_CSD_CLIENT "libcsd-client.so"
/* CSD-CLIENT related functions */
typedef int (*init_t)();
+19 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
 * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 * Not a contribution.
 *
 * Copyright (C) 2013 The Android Open Source Project
@@ -1363,3 +1363,21 @@ int platform_get_mmap_data_fd(void *platform, int fe_dev, int dir, int *fd,
{
    return -ENOSYS;
}

bool platform_set_microphone_characteristic(void *platform __unused,
                                            struct audio_microphone_characteristic_t mic __unused) {
    return -ENOSYS;
}

int platform_get_microphones(void *platform __unused,
                             struct audio_microphone_characteristic_t *mic_array __unused,
                             size_t *mic_count __unused) {
    return -ENOSYS;
}

int platform_get_active_microphones(void *platform __unused, unsigned int channels __unused,
                                    audio_usecase_t usecase __unused,
                                    struct audio_microphone_characteristic_t *mic_array __unused,
                                    size_t *mic_count __unused) {
    return -ENOSYS;
}
+4 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013, 2016 The Linux Foundation. All rights reserved.
 * Copyright (c) 2013 - 2018 The Linux Foundation. All rights reserved.
 * Not a contribution.
 *
 * Copyright (C) 2013 The Android Open Source Project
@@ -166,4 +166,7 @@ enum {

#define DEVICE_NAME_MAX_SIZE 128

#define AUDIO_MAKE_STRING_FROM_ENUM(X)   { #X, X }


#endif // QCOM_AUDIO_PLATFORM_H
Loading