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

Commit 37bffc80 authored by Dhananjay Kumar's avatar Dhananjay Kumar Committed by Dan Pasanen
Browse files

post_proc: fix reverb processing issue when preset is set to NONE

Reverb effects are getting applied even after setting reverb preset
to REVERB_PRESET_NONE.
Preset NONE is used by client and is supposed to be equivalent to
disabled state, even though this preset is not supported in DSP.
Fix this issue by avoiding enable command from post processing HAL
to DSP when preset NONE is in use.

CRs-Fixed: 868041
Change-Id: Iad626a7400246e80a97a926234cfb7756ec6083e
parent bc7a72cb
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -281,6 +281,7 @@ void reverb_set_preset(reverb_context_t *context, int16_t preset)
    context->next_preset = preset;
    offload_reverb_set_preset(&(context->offload_reverb), preset);

    if (context->enabled_by_client) {
        enable = (preset == REVERB_PRESET_NONE) ? false: true;
        offload_reverb_set_enable_flag(&(context->offload_reverb), enable);

@@ -293,6 +294,7 @@ void reverb_set_preset(reverb_context_t *context, int16_t preset)
                                  OFFLOAD_SEND_REVERB_ENABLE_FLAG |
                                  OFFLOAD_SEND_REVERB_PRESET);
    }
}

void reverb_set_all_properties(reverb_context_t *context,
                               reverb_settings_t *reverb_settings)
@@ -600,6 +602,7 @@ int reverb_init(effect_context_t *context)
    set_config(context, &context->config);

    reverb_ctxt->hw_acc_fd = -1;
    reverb_ctxt->enabled_by_client = false;
    memset(&(reverb_ctxt->reverb_settings), 0, sizeof(reverb_settings_t));
    memset(&(reverb_ctxt->offload_reverb), 0, sizeof(struct reverb_params));

@@ -615,6 +618,16 @@ int reverb_enable(effect_context_t *context)
    reverb_context_t *reverb_ctxt = (reverb_context_t *)context;

    ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
    reverb_ctxt->enabled_by_client = true;

    /* REVERB_PRESET_NONE is equivalent to disabled state,
     * But support for this state is not provided in DSP.
     * Hence, do not set enable flag, if in peset mode with preset "NONE".
     * Effect would be enabled when valid preset is set.
     */
    if ((reverb_ctxt->preset == true) &&
        (reverb_ctxt->next_preset == REVERB_PRESET_NONE))
        return 0;

    if (!offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb)))
        offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), true);
@@ -626,6 +639,7 @@ int reverb_disable(effect_context_t *context)
    reverb_context_t *reverb_ctxt = (reverb_context_t *)context;

    ALOGV("%s: ctxt %p", __func__, reverb_ctxt);
    reverb_ctxt->enabled_by_client = false;
    if (offload_reverb_get_enable_flag(&(reverb_ctxt->offload_reverb))) {
        offload_reverb_set_enable_flag(&(reverb_ctxt->offload_reverb), false);
        if (reverb_ctxt->ctl)
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ typedef struct reverb_context_s {
    // Offload vars
    struct mixer_ctl *ctl;
    int hw_acc_fd;
    bool enabled_by_client;
    bool auxiliary;
    bool preset;
    uint16_t cur_preset;