AudioFlinger sends format updates to AudioManager
When a track starts, send format and spatialization status
through IAudioManager for playback activity monitoring.
Bug: 263300713
Test: atest android.media.audio.cts.AudioPlaybackConfigurationTest
Change-Id: I78401eb4bab490c9f05515c93cc73defb5195d5e
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index 950d555..e88401e 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -1160,6 +1160,23 @@
}
if (status == NO_ERROR) {
forEachTeePatchTrack([](auto patchTrack) { patchTrack->start(); });
+
+ // send format to AudioManager for playback activity monitoring
+ sp<IAudioManager> audioManager = thread->mAudioFlinger->getOrCreateAudioManager();
+ if (audioManager && mPortId != AUDIO_PORT_HANDLE_NONE) {
+ std::unique_ptr<os::PersistableBundle> bundle =
+ std::make_unique<os::PersistableBundle>();
+ bundle->putBoolean(String16(kExtraPlayerEventSpatializedKey),
+ isSpatialized());
+ bundle->putInt(String16(kExtraPlayerEventSampleRateKey), mSampleRate);
+ bundle->putInt(String16(kExtraPlayerEventChannelMaskKey), mChannelMask);
+ status_t result = audioManager->portEvent(mPortId,
+ PLAYER_UPDATE_FORMAT, bundle);
+ if (result != OK) {
+ ALOGE("%s: unable to send playback format for port ID %d, status error %d",
+ __func__, mPortId, result);
+ }
+ }
}
return status;
}