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

Commit 2d12989c authored by Shiv Maliyappanahalli's avatar Shiv Maliyappanahalli Committed by Gerrit - the friendly Code Review server
Browse files

hal: Add support for 3-mic surround sound recording/stereo

Change-Id: I741dd5507d72ac45dff8006d3875abe8dbdc2df2
parent 05772c18
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -96,6 +96,7 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_SSR)),true)
    LOCAL_CFLAGS += -DSSR_ENABLED
    LOCAL_CFLAGS += -DSSR_ENABLED
    LOCAL_SRC_FILES += audio_extn/ssr.c
    LOCAL_SRC_FILES += audio_extn/ssr.c
    LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/surround_sound/
    LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/surround_sound/
    LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/surround_sound_3mic/
    LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/common/inc/
    LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/common/inc/
endif
endif


+2 −0
Original line number Original line Diff line number Diff line
@@ -528,6 +528,7 @@ void audio_extn_set_parameters(struct audio_device *adev,
   audio_extn_fm_set_parameters(adev, parms);
   audio_extn_fm_set_parameters(adev, parms);
   audio_extn_sound_trigger_set_parameters(adev, parms);
   audio_extn_sound_trigger_set_parameters(adev, parms);
   audio_extn_listen_set_parameters(adev, parms);
   audio_extn_listen_set_parameters(adev, parms);
   audio_extn_ssr_set_parameters(adev, parms);
   audio_extn_hfp_set_parameters(adev, parms);
   audio_extn_hfp_set_parameters(adev, parms);
   audio_extn_dts_eagle_set_parameters(adev, parms);
   audio_extn_dts_eagle_set_parameters(adev, parms);
   audio_extn_ddp_set_parameters(adev, parms);
   audio_extn_ddp_set_parameters(adev, parms);
@@ -543,6 +544,7 @@ void audio_extn_get_parameters(const struct audio_device *adev,
    char *kv_pairs = NULL;
    char *kv_pairs = NULL;
    audio_extn_get_afe_proxy_parameters(query, reply);
    audio_extn_get_afe_proxy_parameters(query, reply);
    audio_extn_get_fluence_parameters(adev, query, reply);
    audio_extn_get_fluence_parameters(adev, query, reply);
    audio_extn_ssr_get_parameters(adev, query, reply);
    get_active_offload_usecases(adev, query, reply);
    get_active_offload_usecases(adev, query, reply);
    audio_extn_dts_eagle_get_parameters(adev, query, reply);
    audio_extn_dts_eagle_get_parameters(adev, query, reply);
    audio_extn_hpx_get_parameters(query, reply);
    audio_extn_hpx_get_parameters(query, reply);
+12 −2
Original line number Original line Diff line number Diff line
@@ -146,18 +146,28 @@ bool audio_extn_usb_is_proxy_inuse();
#endif
#endif


#ifndef SSR_ENABLED
#ifndef SSR_ENABLED
#define audio_extn_ssr_init(in)                       (0)
#define audio_extn_ssr_init(in, num_out_chan)         (0)
#define audio_extn_ssr_deinit()                       (0)
#define audio_extn_ssr_deinit()                       (0)
#define audio_extn_ssr_update_enabled()               (0)
#define audio_extn_ssr_update_enabled()               (0)
#define audio_extn_ssr_get_enabled()                  (0)
#define audio_extn_ssr_get_enabled()                  (0)
#define audio_extn_ssr_read(stream, buffer, bytes)    (0)
#define audio_extn_ssr_read(stream, buffer, bytes)    (0)
#define audio_extn_ssr_set_parameters(adev, parms)    (0)
#define audio_extn_ssr_get_parameters(adev, parms, reply) (0)
#define audio_extn_ssr_get_stream()                   (0)
#else
#else
int32_t audio_extn_ssr_init(struct stream_in *in);
int32_t audio_extn_ssr_init(struct stream_in *in,
                            int num_out_chan);
int32_t audio_extn_ssr_deinit();
int32_t audio_extn_ssr_deinit();
void audio_extn_ssr_update_enabled();
void audio_extn_ssr_update_enabled();
bool audio_extn_ssr_get_enabled();
bool audio_extn_ssr_get_enabled();
int32_t audio_extn_ssr_read(struct audio_stream_in *stream,
int32_t audio_extn_ssr_read(struct audio_stream_in *stream,
                       void *buffer, size_t bytes);
                       void *buffer, size_t bytes);
void audio_extn_ssr_set_parameters(struct audio_device *adev,
                                   struct str_parms *parms);
void audio_extn_ssr_get_parameters(const struct audio_device *adev,
                                   struct str_parms *query,
                                   struct str_parms *reply);
struct stream_in *audio_extn_ssr_get_stream();
#endif
#endif


#ifndef HW_VARIANTS_ENABLED
#ifndef HW_VARIANTS_ENABLED
+632 −46

File changed.

Preview size limit exceeded, changes collapsed.

+29 −14
Original line number Original line Diff line number Diff line
@@ -175,6 +175,7 @@ const char * const use_case_table[AUDIO_USECASE_MAX] = {
    [USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress",
    [USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress",
    [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
    [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record",
    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
    [USECASE_AUDIO_RECORD_FM_VIRTUAL] = "fm-virtual-record",
    [USECASE_AUDIO_RECORD_3MIC_SSR] = "audio-record-3mic-ssr",
    [USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
    [USECASE_AUDIO_PLAYBACK_FM] = "play-fm",
    [USECASE_AUDIO_HFP_SCO] = "hfp-sco",
    [USECASE_AUDIO_HFP_SCO] = "hfp-sco",
    [USECASE_AUDIO_HFP_SCO_WB] = "hfp-sco-wb",
    [USECASE_AUDIO_HFP_SCO_WB] = "hfp-sco-wb",
@@ -975,6 +976,10 @@ static int stop_input_stream(struct stream_in *in)
    /* 2. Disable the tx device */
    /* 2. Disable the tx device */
    disable_snd_device(adev, uc_info->in_snd_device);
    disable_snd_device(adev, uc_info->in_snd_device);


    if (audio_extn_ssr_get_enabled() && (audio_extn_ssr_get_stream() == in)) {
        audio_extn_ssr_deinit();
    }

    list_remove(&uc_info->list);
    list_remove(&uc_info->list);
    free(uc_info);
    free(uc_info);


@@ -2594,8 +2599,7 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,
    }
    }


    if (in->pcm) {
    if (in->pcm) {
        if (audio_extn_ssr_get_enabled() &&
        if (audio_extn_ssr_get_enabled() && (audio_extn_ssr_get_stream() == in))
                audio_channel_count_from_in_mask(in->channel_mask) == 6)
            ret = audio_extn_ssr_read(stream, buffer, bytes);
            ret = audio_extn_ssr_read(stream, buffer, bytes);
        else if (audio_extn_compr_cap_usecase_supported(in->usecase))
        else if (audio_extn_compr_cap_usecase_supported(in->usecase))
            ret = audio_extn_compr_cap_read(in, buffer, bytes);
            ret = audio_extn_compr_cap_read(in, buffer, bytes);
@@ -3428,16 +3432,28 @@ static int adev_open_input_stream(struct audio_hw_device *dev,
        in->config = pcm_config_afe_proxy_record;
        in->config = pcm_config_afe_proxy_record;
        in->config.channels = channel_count;
        in->config.channels = channel_count;
        in->config.rate = config->sample_rate;
        in->config.rate = config->sample_rate;
    } else if (channel_count == 6) {
    } else if (audio_extn_ssr_get_enabled() &&
        if(audio_extn_ssr_get_enabled()) {
                 ((channel_count == 2) ||(channel_count == 6)) &&
            if(audio_extn_ssr_init(in)) {
                 ((AUDIO_SOURCE_MIC == source) || (AUDIO_SOURCE_CAMCORDER == source))) {
                ALOGD("Found SSR use case starting SSR lib with channel_count :%d", channel_count);
                if(audio_extn_ssr_init(in, channel_count)) {
                    ALOGE("%s: audio_extn_ssr_init failed", __func__);
                    ALOGE("%s: audio_extn_ssr_init failed", __func__);
                    if(channel_count == 2 ) {
                    ALOGD("%s:falling back to default record usecase", __func__);
                    in->config.channels = channel_count;
                    frame_size = audio_stream_in_frame_size(&in->stream);
                    buffer_size = get_input_buffer_size(config->sample_rate,
                                            config->format,
                                            channel_count,
                                            is_low_latency);
                    in->config.period_size = buffer_size / frame_size;
				} else {
                    ALOGD("%s:unable to start SSR record session for 6 channel input", __func__);
                    ret = -EINVAL;
                    ret = -EINVAL;
                    goto err_open;
                    goto err_open;
                }
                }
        } else {
            } else
            ALOGW("%s: surround sound recording is not supported", __func__);
	            in->usecase = USECASE_AUDIO_RECORD_3MIC_SSR;
        }
    } else if (audio_extn_compr_cap_enabled() &&
    } else if (audio_extn_compr_cap_enabled() &&
            audio_extn_compr_cap_format_supported(config->format) &&
            audio_extn_compr_cap_format_supported(config->format) &&
            (in->dev->mode != AUDIO_MODE_IN_COMMUNICATION)) {
            (in->dev->mode != AUDIO_MODE_IN_COMMUNICATION)) {
@@ -3496,8 +3512,7 @@ static void adev_close_input_stream(struct audio_hw_device *dev,
    } else
    } else
        in_standby(&stream->common);
        in_standby(&stream->common);


    if (audio_extn_ssr_get_enabled() && 
    if (audio_extn_ssr_get_enabled() && (audio_extn_ssr_get_stream() == in)) {
            (audio_channel_count_from_in_mask(in->channel_mask) == 6)) {
        audio_extn_ssr_deinit();
        audio_extn_ssr_deinit();
    }
    }


Loading