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

Commit 4e24653e authored by jiabin's avatar jiabin
Browse files

Initialize volume level of volume control effect as lowest level.

When a volume control effect is attached, set the volume as lowest level
for safer ramping.

Bug: 242159880
Test: repo steps from the bug
Change-Id: I084bb99106e7e06232db107b8e288bf5416d26cc
parent 77f77c68
Loading
Loading
Loading
Loading
+25 −17
Original line number Original line Diff line number Diff line
@@ -1058,6 +1058,13 @@ status_t AudioFlinger::EffectModule::configure()
                    &size,
                    &size,
                    &cmdStatus);
                    &cmdStatus);
        }
        }

        if (isVolumeControl()) {
            // Force initializing the volume as 0 for volume control effect for safer ramping
            uint32_t left = 0;
            uint32_t right = 0;
            setVolumeInternal(&left, &right, true /*controller*/);
        }
    }
    }


    // mConfig.outputCfg.buffer.frameCount cannot be zero.
    // mConfig.outputCfg.buffer.frameCount cannot be zero.
@@ -1431,15 +1438,17 @@ status_t AudioFlinger::EffectModule::setVolume(uint32_t *left, uint32_t *right,
            ((mDescriptor.flags & EFFECT_FLAG_VOLUME_MASK) == EFFECT_FLAG_VOLUME_CTRL ||
            ((mDescriptor.flags & EFFECT_FLAG_VOLUME_MASK) == EFFECT_FLAG_VOLUME_CTRL ||
             (mDescriptor.flags & EFFECT_FLAG_VOLUME_MASK) == EFFECT_FLAG_VOLUME_IND ||
             (mDescriptor.flags & EFFECT_FLAG_VOLUME_MASK) == EFFECT_FLAG_VOLUME_IND ||
             (mDescriptor.flags & EFFECT_FLAG_VOLUME_MASK) == EFFECT_FLAG_VOLUME_MONITOR)) {
             (mDescriptor.flags & EFFECT_FLAG_VOLUME_MASK) == EFFECT_FLAG_VOLUME_MONITOR)) {
        uint32_t volume[2];
        status = setVolumeInternal(left, right, controller);
        uint32_t *pVolume = NULL;
    }
        uint32_t size = sizeof(volume);
    return status;
        volume[0] = *left;
        volume[1] = *right;
        if (controller) {
            pVolume = volume;
}
}
        status = mEffectInterface->command(EFFECT_CMD_SET_VOLUME,

status_t AudioFlinger::EffectModule::setVolumeInternal(
        uint32_t *left, uint32_t *right, bool controller) {
    uint32_t volume[2] = {*left, *right};
    uint32_t *pVolume = controller ? volume : nullptr;
    uint32_t size = sizeof(volume);
    status_t status = mEffectInterface->command(EFFECT_CMD_SET_VOLUME,
                                                size,
                                                size,
                                                volume,
                                                volume,
                                                &size,
                                                &size,
@@ -1448,7 +1457,6 @@ status_t AudioFlinger::EffectModule::setVolume(uint32_t *left, uint32_t *right,
        *left = volume[0];
        *left = volume[0];
        *right = volume[1];
        *right = volume[1];
    }
    }
    }
    return status;
    return status;
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -306,6 +306,8 @@ private:
                ? EFFECT_BUFFER_ACCESS_WRITE : EFFECT_BUFFER_ACCESS_ACCUMULATE;
                ? EFFECT_BUFFER_ACCESS_WRITE : EFFECT_BUFFER_ACCESS_ACCUMULATE;
    }
    }


    status_t setVolumeInternal(uint32_t *left, uint32_t *right, bool controller);



    effect_config_t     mConfig;    // input and output audio configuration
    effect_config_t     mConfig;    // input and output audio configuration
    sp<EffectHalInterface> mEffectInterface; // Effect module HAL
    sp<EffectHalInterface> mEffectInterface; // Effect module HAL