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

Commit 81a2b192 authored by Jiabin Huang's avatar Jiabin Huang Committed by Android (Google) Code Review
Browse files

Merge "Release AudioTrackCallback when the track is removed."

parents 1cd2025a 18a4b1c3
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -2385,7 +2385,7 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrac
        {
            Mutex::Autolock _atCbL(mAudioTrackCbLock);
            if (callback.get() != nullptr) {
                mAudioTrackCallbacks.emplace(callback);
                mAudioTrackCallbacks.emplace(track, callback);
            }
        }

@@ -2619,6 +2619,10 @@ void AudioFlinger::PlaybackThread::removeTrack_l(const sp<Track>& track)
    mLocalLog.log("removeTrack_l (%p) %s", track.get(), result.string());

    mTracks.remove(track);
    {
        Mutex::Autolock _atCbL(mAudioTrackCbLock);
        mAudioTrackCallbacks.erase(track);
    }
    if (track->isFastTrack()) {
        int index = track->mFastIndex;
        ALOG_ASSERT(0 < index && index < (int)FastMixerState::sMaxFastTracks);
@@ -2714,8 +2718,8 @@ void AudioFlinger::PlaybackThread::onCodecFormatChanged(
                    audio_utils::metadata::byteStringFromData(metadata);
            std::vector metadataVec(metaDataStr.begin(), metaDataStr.end());
            Mutex::Autolock _l(mAudioTrackCbLock);
            for (const auto& callback : mAudioTrackCallbacks) {
                callback->onCodecFormatChanged(metadataVec);
            for (const auto& callbackPair : mAudioTrackCallbacks) {
                callbackPair.second->onCodecFormatChanged(metadataVec);
            }
    }).detach();
}
+1 −1
Original line number Diff line number Diff line
@@ -1219,7 +1219,7 @@ private:

    Mutex                                    mAudioTrackCbLock;
    // Record of IAudioTrackCallback
    std::set<sp<media::IAudioTrackCallback>> mAudioTrackCallbacks;
    std::map<sp<Track>, sp<media::IAudioTrackCallback>> mAudioTrackCallbacks;

private:
    // The HAL output sink is treated as non-blocking, but current implementation is blocking