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

Commit cdd17c79 authored by Derek Chen's avatar Derek Chen
Browse files

hal: Add audio hal plugin for external codec

Add audio hal plugin for external codec support
so that OEM can add their own codec implementation.

Change-Id: I67f6808c41c5d9d85d9b6a6a8b49a4f9fd042ab0
parent ccfe6837
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -424,6 +424,11 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_SND_MONITOR)), true)
    LOCAL_SRC_FILES += audio_extn/sndmonitor.c
endif

ifeq ($(strip $(AUDIO_FEATURE_ENABLED_EXT_HW_PLUGIN)),true)
    LOCAL_CFLAGS += -DEXT_HW_PLUGIN_ENABLED
    LOCAL_SRC_FILES += audio_extn/ext_hw_plugin.c
endif

LOCAL_MODULE := audio.primary.$(TARGET_BOARD_PLATFORM)

LOCAL_MODULE_RELATIVE_PATH := hw

hal/audio_extn/audio_extn.c

100755 → 100644
+2 −0
Original line number Diff line number Diff line
@@ -884,6 +884,7 @@ void audio_extn_set_parameters(struct audio_device *adev,
       adev->offload_effects_set_parameters(parms);
   audio_extn_set_aptx_dec_bt_addr(adev, parms);
   audio_extn_ffv_set_parameters(adev, parms);
   audio_extn_ext_hw_plugin_set_parameters(adev->ext_hw_plugin, parms);
}

void audio_extn_get_parameters(const struct audio_device *adev,
@@ -902,6 +903,7 @@ void audio_extn_get_parameters(const struct audio_device *adev,
    audio_extn_sound_trigger_get_parameters(adev, query, reply);
    if (adev->offload_effects_get_parameters != NULL)
        adev->offload_effects_get_parameters(query, reply);
    audio_extn_ext_hw_plugin_get_parameters(adev->ext_hw_plugin, query, reply);

    kv_pairs = str_parms_to_str(reply);
    ALOGD_IF(kv_pairs != NULL, "%s: returns %s", __func__, kv_pairs);
+25 −0
Original line number Diff line number Diff line
@@ -1106,4 +1106,29 @@ void audio_extn_ffv_check_and_append_ec_ref_dev(char *device_name);
snd_device_t audio_extn_ffv_get_capture_snd_device();
void audio_extn_ffv_append_ec_ref_dev_name(char *device_name);
#endif

#ifndef EXT_HW_PLUGIN_ENABLED
#define audio_extn_ext_hw_plugin_init(adev)                (0)
#define audio_extn_ext_hw_plugin_deinit(plugin)              (0)
#define audio_extn_ext_hw_plugin_usecase_start(plugin, usecase) (0)
#define audio_extn_ext_hw_plugin_usecase_stop(plugin, usecase) (0)
#define audio_extn_ext_hw_plugin_set_parameters(plugin, parms) (0)
#define audio_extn_ext_hw_plugin_get_parameters(plugin, query, reply) (0)
#define audio_extn_ext_hw_plugin_set_mic_mute(plugin, mute) (0)
#define audio_extn_ext_hw_plugin_get_mic_mute(plugin, mute) (0)
#define audio_extn_ext_hw_plugin_set_audio_gain(plugin, usecase, gain) (0)
#else
void* audio_extn_ext_hw_plugin_init(struct audio_device *adev);
int audio_extn_ext_hw_plugin_deinit(void *plugin);
int audio_extn_ext_hw_plugin_usecase_start(void *plugin, struct audio_usecase *usecase);
int audio_extn_ext_hw_plugin_usecase_stop(void *plugin, struct audio_usecase *usecase);
int audio_extn_ext_hw_plugin_set_parameters(void *plugin,
                                           struct str_parms *parms);
int audio_extn_ext_hw_plugin_get_parameters(void *plugin,
                  struct str_parms *query, struct str_parms *reply);
int audio_extn_ext_hw_plugin_set_mic_mute(void *plugin, bool mute);
int audio_extn_ext_hw_plugin_get_mic_mute(void *plugin, bool *mute);
int audio_extn_ext_hw_plugin_set_audio_gain(void *plugin,
            struct audio_usecase *usecase, uint32_t gain);
#endif
#endif /* AUDIO_EXTN_H */
+1542 −0

File added.

Preview size limit exceeded, changes collapsed.

+13 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
#include "platform_api.h"
#include <stdlib.h>
#include <cutils/str_parms.h>
#include "audio_extn.h"

#ifdef DYNAMIC_LOG_ENABLED
#include <log_xml_parser.h>
@@ -163,6 +164,12 @@ static int32_t start_hfp(struct audio_device *adev,

    select_devices(adev, hfpmod.ucid);

    if ((uc_info->out_snd_device != SND_DEVICE_NONE) ||
        (uc_info->in_snd_device != SND_DEVICE_NONE)) {
        if (audio_extn_ext_hw_plugin_usecase_start(adev->ext_hw_plugin, uc_info))
            ALOGE("%s: failed to start ext hw plugin", __func__);
    }

    pcm_dev_rx_id = platform_get_pcm_device_id(uc_info->id, PCM_PLAYBACK);
    pcm_dev_tx_id = platform_get_pcm_device_id(uc_info->id, PCM_CAPTURE);
    pcm_dev_asm_rx_id = hfpmod.hfp_pcm_dev_id;
@@ -280,6 +287,12 @@ static int32_t stop_hfp(struct audio_device *adev)
        return -EINVAL;
    }

    if ((uc_info->out_snd_device != SND_DEVICE_NONE) ||
        (uc_info->in_snd_device != SND_DEVICE_NONE)) {
        if (audio_extn_ext_hw_plugin_usecase_stop(adev->ext_hw_plugin, uc_info))
            ALOGE("%s: failed to stop ext hw plugin", __func__);
    }

    /* 2. Disable echo reference while stopping hfp */
    platform_set_echo_reference(adev, false, uc_info->devices);

Loading