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

Commit 698f5efd authored by Atneya Nair's avatar Atneya Nair
Browse files

Add query API for hotword streams

- Add query API for device support of hotword_tap and hw_lookback flags
- Allow AudioService to call directly into AudioPolicyManager via AIDL

Bug: 237449755
Test: atest AudioRecordTest, atest AudioManagerTest
Change-Id: I730ca36b2dd42baabd8087a51160f75ab294e27b
parent 0f0a8037
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -313,6 +313,15 @@ interface IAudioPolicyService {

    boolean isUltrasoundSupported();

    /**
     * Queries if there is hardware support for requesting audio capture content from
     * the DSP hotword pipeline.
     *
     * @param lookbackAudio true if additionally querying for the ability to capture audio
     *                      from the pipeline prior to capture stream open.
     */
    boolean isHotwordStreamSupported(boolean lookbackAudio);

    AudioProductStrategy[] listAudioProductStrategies();
    int /* product_strategy_t */ getProductStrategyFromAudioAttributes(
            in AudioAttributesInternal aa, boolean fallbackOnDefault);
+2 −0
Original line number Diff line number Diff line
@@ -300,6 +300,8 @@ public:

    virtual bool     isUltrasoundSupported() = 0;

    virtual bool     isHotwordStreamSupported(bool lookbackAudio) = 0;

    virtual status_t getHwOffloadFormatsSupportedForBluetoothMedia(
                audio_devices_t device, std::vector<audio_format_t> *formats) = 0;

+15 −0
Original line number Diff line number Diff line
@@ -5645,6 +5645,21 @@ bool AudioPolicyManager::isUltrasoundSupported()
    return false;
}

bool AudioPolicyManager::isHotwordStreamSupported(bool lookbackAudio)
{
    const auto mask = AUDIO_INPUT_FLAG_HOTWORD_TAP |
        (lookbackAudio ? AUDIO_INPUT_FLAG_HW_LOOKBACK : 0);
    for (const auto& hwModule : mHwModules) {
        const InputProfileCollection &inputProfiles = hwModule->getInputProfiles();
        for (const auto &inputProfile : inputProfiles) {
            if ((inputProfile->getFlags() & mask) == mask) {
                return true;
            }
        }
    }
    return false;
}

bool AudioPolicyManager::isCallScreenModeSupported()
{
    return getConfig().isCallScreenModeSupported();
+2 −0
Original line number Diff line number Diff line
@@ -352,6 +352,8 @@ public:

        virtual bool isUltrasoundSupported();

        bool isHotwordStreamSupported(bool lookbackAudio) override;

        virtual status_t listAudioProductStrategies(AudioProductStrategyVector &strategies)
        {
            return mEngine->listAudioProductStrategies(strategies);
+11 −0
Original line number Diff line number Diff line
@@ -2045,6 +2045,17 @@ Status AudioPolicyService::isUltrasoundSupported(bool* _aidl_return)
    return Status::ok();
}

Status AudioPolicyService::isHotwordStreamSupported(bool lookbackAudio, bool* _aidl_return)
{
    if (mAudioPolicyManager == nullptr) {
        return binderStatusFromStatusT(NO_INIT);
    }
    Mutex::Autolock _l(mLock);
    AutoCallerClear acc;
    *_aidl_return = mAudioPolicyManager->isHotwordStreamSupported(lookbackAudio);
    return Status::ok();
}

Status AudioPolicyService::listAudioProductStrategies(
        std::vector<media::AudioProductStrategy>* _aidl_return) {
    AudioProductStrategyVector strategies;
Loading