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

Commit f6074fe3 authored by Jasmine Cha's avatar Jasmine Cha
Browse files

audio: Exported recommendedMuteDurationMs for output profiles



- Added muteDuration to customize mute duration while switching device's
path to avoid truncated sound at beginning.
- Muted duration will be replaced only when there are defined duration
in audio_policy_configuration.xml.

Bug: 183344508
Test: manual audio test with different audio_policy_configuration.xml,
which is with/without muteDuration definition.

Signed-off-by: default avatarJasmine Cha <chajasmine@google.com>
Change-Id: Idced0e256a6b8e91ba2704c5ad89fbf8aba62bf5
parent db009c9b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -307,6 +307,8 @@ public:
    DeviceVector mDevices; /**< current devices this output is routed to */
    wp<AudioPolicyMix> mPolicyMix;  // non NULL when used by a dynamic policy

    virtual uint32_t getRecommendedMuteDurationMs() const { return 0; }

protected:
    const sp<PolicyAudioPort> mPolicyAudioPort;
    AudioPolicyClientInterface * const mClientInterface;
@@ -415,6 +417,8 @@ public:
     */
    DeviceVector filterSupportedDevices(const DeviceVector &devices) const;

    uint32_t getRecommendedMuteDurationMs() const override;

    const sp<IOProfile> mProfile;          // I/O profile this output derives from
    audio_io_handle_t mIoHandle;           // output handle
    uint32_t mLatency;                  //
+2 −0
Original line number Diff line number Diff line
@@ -207,6 +207,8 @@ public:
    // Number of streams currently active for this profile. This is not the number of active clients
    // (AudioTrack or AudioRecord) but the number of active HAL streams.
    uint32_t     curActiveCount;
    // Mute duration while changing device on this output profile.
    uint32_t     recommendedMuteDurationMs = 0;

private:
    DeviceVector mSupportedDevices; // supported devices: this input/output can be routed from/to
+9 −0
Original line number Diff line number Diff line
@@ -670,6 +670,15 @@ status_t SwAudioOutputDescriptor::openDuplicating(const sp<SwAudioOutputDescript
    return NO_ERROR;
}

uint32_t SwAudioOutputDescriptor::getRecommendedMuteDurationMs() const
{
    if (isDuplicated()) {
        return std::max(mOutput1->getRecommendedMuteDurationMs(),
                mOutput2->getRecommendedMuteDurationMs());
    }
    return mProfile->recommendedMuteDurationMs;
}

// HwAudioOutputDescriptor implementation
HwAudioOutputDescriptor::HwAudioOutputDescriptor(const sp<SourceClientDescriptor>& source,
                                                 AudioPolicyClientInterface *clientInterface)
+1 −0
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@ void IOProfile::dump(String8 *dst) const
             maxOpenCount, curOpenCount);
    dst->appendFormat("    - maxActiveCount: %u - curActiveCount: %u\n",
             maxActiveCount, curActiveCount);
    dst->appendFormat("    - recommendedMuteDurationMs: %u ms\n", recommendedMuteDurationMs);
}

void IOProfile::log()
+8 −0
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ struct MixPortTraits : public AndroidCollectionTraits<IOProfile, IOProfileCollec
        static constexpr const char *flags = "flags";
        static constexpr const char *maxOpenCount = "maxOpenCount";
        static constexpr const char *maxActiveCount = "maxActiveCount";
        static constexpr const char *recommendedMuteDurationMs = "recommendedMuteDurationMs";
    };

    // Children: GainTraits
@@ -496,6 +497,13 @@ std::variant<status_t, MixPortTraits::Element> PolicySerializer::deserialize<Mix
    if (!maxActiveCount.empty()) {
        convertTo(maxActiveCount, mixPort->maxActiveCount);
    }

    std::string recommendedmuteDurationMsLiteral =
            getXmlAttribute(child, Attributes::recommendedMuteDurationMs);
    if (!recommendedmuteDurationMsLiteral.empty()) {
        convertTo(recommendedmuteDurationMsLiteral, mixPort->recommendedMuteDurationMs);
    }

    // Deserialize children
    AudioGainTraits::Collection gains;
    status = deserializeCollection<AudioGainTraits>(child, &gains, NULL);
Loading