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

Commit 15b84ea5 authored by Siddartha Shaik's avatar Siddartha Shaik Committed by Gerrit - the friendly Code Review server
Browse files

audio: hal: Check to enable IP handler interface

IP handler interface is disabled for direct
passthrough and enabled for all other usecases.

CRs-Fixed: 2088973
Change-Id: Idd11455777abea504203d632f1abdfb148b51a03
parent c8bbc8db
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -270,7 +270,7 @@ int32_t release_loopback_session(loopback_patch_t *active_loopback_patch)

    adev->active_input = get_next_active_input(adev);

    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) && inout->ip_hdlr_handle) {
    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false) && inout->ip_hdlr_handle) {
        ret = audio_extn_ip_hdlr_intf_close(inout->ip_hdlr_handle, true, inout);
        if (ret < 0)
            ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
@@ -284,7 +284,7 @@ int32_t release_loopback_session(loopback_patch_t *active_loopback_patch)
        inout->adsp_hdlr_stream_handle = NULL;
    }

    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) &&
    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false) &&
        inout->ip_hdlr_handle) {
        audio_extn_ip_hdlr_intf_deinit(inout->ip_hdlr_handle);
        inout->ip_hdlr_handle = NULL;
@@ -381,7 +381,7 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
        inout->adsp_hdlr_stream_handle = NULL;
        goto exit;
    }
    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format)) {
    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false)) {
        ret = audio_extn_ip_hdlr_intf_init(&inout->ip_hdlr_handle, NULL, NULL);
        if (ret < 0) {
            ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d", __func__, ret);
@@ -467,7 +467,7 @@ int create_loopback_session(loopback_patch_t *active_loopback_patch)
        ret = -EINVAL;
        goto exit;
    }
    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format) && inout->ip_hdlr_handle) {
    if (audio_extn_ip_hdlr_intf_supported(source_patch_config->format, false) && inout->ip_hdlr_handle) {
        ret = audio_extn_ip_hdlr_intf_open(inout->ip_hdlr_handle, true, inout,
                                           USECASE_AUDIO_TRANSCODE_LOOPBACK);
        if (ret < 0) {
+2 −2
Original line number Diff line number Diff line
@@ -116,10 +116,10 @@ struct rtic_event {
    uint8_t payload[0];
};

bool audio_extn_ip_hdlr_intf_supported(audio_format_t format)
bool audio_extn_ip_hdlr_intf_supported(audio_format_t format,bool is_direct_passthru)
{
    if (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_DOLBY_TRUEHD) ||
        ((!property_get_bool("audio.offload.passthrough", false)) &&
        ((!is_direct_passthru) &&
         (((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_E_AC3) ||
         ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AC3))))
        return true;
+2 −2
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ int audio_extn_ip_hdlr_intf_open(void *handle, bool is_dsp_decode, void *aud_ses
int audio_extn_ip_hdlr_intf_close(void *handle, bool is_dsp_decode, void *aud_sess_handle);
int audio_extn_ip_hdlr_intf_init(void **handle, char *lib_path, void **lib_handle);
int audio_extn_ip_hdlr_intf_deinit(void *handle);
bool audio_extn_ip_hdlr_intf_supported(audio_format_t format);
bool audio_extn_ip_hdlr_intf_supported(audio_format_t format, bool is_direct_passthru);

#else

@@ -45,7 +45,7 @@ bool audio_extn_ip_hdlr_intf_supported(audio_format_t format);
#define audio_extn_ip_hdlr_intf_close(handle, is_dsp_decode, aud_sess_handle) (0)
#define audio_extn_ip_hdlr_intf_init(handle, lib_path, lib_handle)            (0)
#define audio_extn_ip_hdlr_intf_deinit(handle)                                (0)
#define audio_extn_ip_hdlr_intf_supported(format)                             (0)
#define audio_extn_ip_hdlr_intf_supported(format, is_direct_passthru)                             (0)

#endif

+13 −0
Original line number Diff line number Diff line
@@ -417,6 +417,19 @@ void audio_extn_passthru_update_stream_configuration(

}

bool audio_extn_passthru_is_direct_passthrough(struct stream_out *out)
{
    //check passthrough system property
    if (!property_get_bool("audio.offload.passthrough", false)) {
        return false;
    }

    if ((out != NULL) && (out->compr_config.codec->compr_passthr == PASSTHROUGH || out->compr_config.codec->compr_passthr == PASSTHROUGH_IEC61937))
        return true;
    else
        return false;
}

bool audio_extn_passthru_is_passthrough_stream(struct stream_out *out)
{
    //check passthrough system property
+5 −5
Original line number Diff line number Diff line
@@ -2346,7 +2346,7 @@ static int stop_output_stream(struct stream_out *out)
    if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)
        audio_extn_keep_alive_start();

    if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
    if (audio_extn_ip_hdlr_intf_supported(out->format, audio_extn_passthru_is_direct_passthrough(out)) && out->ip_hdlr_handle) {
        ret = audio_extn_ip_hdlr_intf_close(out->ip_hdlr_handle, true, out);
        if (ret < 0)
            ALOGE("%s: audio_extn_ip_hdlr_intf_close failed %d",__func__, ret);
@@ -2587,7 +2587,7 @@ int start_output_stream(struct stream_out *out)
    audio_extn_perf_lock_release(&adev->perf_lock_handle);
    ALOGD("%s: exit", __func__);

    if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
    if (audio_extn_ip_hdlr_intf_supported(out->format, audio_extn_passthru_is_direct_passthrough(out)) && out->ip_hdlr_handle) {
        ret = audio_extn_ip_hdlr_intf_open(out->ip_hdlr_handle, true, out, out->usecase);
        if (ret < 0)
            ALOGE("%s: audio_extn_ip_hdlr_intf_open failed %d",__func__, ret);
@@ -4914,7 +4914,7 @@ int adev_open_output_stream(struct audio_hw_device *dev,
    /* setup a channel for client <--> adsp communication for stream events */
    if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) ||
            (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) ||
            (audio_extn_ip_hdlr_intf_supported(config->format))) {
            (audio_extn_ip_hdlr_intf_supported(config->format, audio_extn_passthru_is_direct_passthrough(out)))) {
        hdlr_stream_cfg.pcm_device_id = platform_get_pcm_device_id(
                out->usecase, PCM_PLAYBACK);
        hdlr_stream_cfg.flags = out->flags;
@@ -4926,7 +4926,7 @@ int adev_open_output_stream(struct audio_hw_device *dev,
            out->adsp_hdlr_stream_handle = NULL;
        }
    }
    if (audio_extn_ip_hdlr_intf_supported(config->format)) {
    if (audio_extn_ip_hdlr_intf_supported(config->format, audio_extn_passthru_is_direct_passthrough(out))) {
        ret = audio_extn_ip_hdlr_intf_init(&out->ip_hdlr_handle, NULL, NULL);
        if (ret < 0) {
            ALOGE("%s: audio_extn_ip_hdlr_intf_init failed %d",__func__, ret);
@@ -4966,7 +4966,7 @@ void adev_close_output_stream(struct audio_hw_device *dev __unused,
        out->adsp_hdlr_stream_handle = NULL;
    }

    if (audio_extn_ip_hdlr_intf_supported(out->format) && out->ip_hdlr_handle) {
    if (audio_extn_ip_hdlr_intf_supported(out->format, audio_extn_passthru_is_direct_passthrough(out)) && out->ip_hdlr_handle) {
        audio_extn_ip_hdlr_intf_deinit(out->ip_hdlr_handle);
        out->ip_hdlr_handle = NULL;
    }