From 7ab6103aae697d9166a57edbd9c17ee2330f1d14 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Wed, 17 May 2023 14:40:01 +0200 Subject: [PATCH] Soundpool: use audio attributes instead of legacy stream type Use audio attributes to specifcy the use case and make sure performance flags in audio attributes are reflecting the output flags passed to the AudioTrack by Stream::play_l(). Bug: 283003710 Test: make Change-Id: If9c53e807425abe71f4172b5160af0a5be24e81c --- media/jni/soundpool/Stream.cpp | 6 ++---- media/jni/soundpool/StreamManager.cpp | 5 ++++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/media/jni/soundpool/Stream.cpp b/media/jni/soundpool/Stream.cpp index 4194a22bfb675..45dde74039509 100644 --- a/media/jni/soundpool/Stream.cpp +++ b/media/jni/soundpool/Stream.cpp @@ -282,8 +282,6 @@ void Stream::play_l(const std::shared_ptr& sound, int32_t nextStreamID, priority, loop, rate, playerIId); // initialize track - const audio_stream_type_t streamType = - AudioSystem::attributesToStreamType(*mStreamManager->getAttributes()); const int32_t channelCount = sound->getChannelCount(); const auto sampleRate = (uint32_t)lround(double(sound->getSampleRate()) * rate); size_t frameCount = 0; @@ -328,8 +326,8 @@ void Stream::play_l(const std::shared_ptr& sound, int32_t nextStreamID, attributionSource.token = sp::make(); mCallback = sp::make(this, toggle), // TODO b/182469354 make consistent with AudioRecord, add util for native source - mAudioTrack = new AudioTrack(streamType, sampleRate, sound->getFormat(), - channelMask, sound->getIMemory(), AUDIO_OUTPUT_FLAG_FAST, + mAudioTrack = new AudioTrack(AUDIO_STREAM_DEFAULT, sampleRate, sound->getFormat(), + channelMask, sound->getIMemory(), AUDIO_OUTPUT_FLAG_NONE, mCallback, 0 /*default notification frames*/, AUDIO_SESSION_ALLOCATE, AudioTrack::TRANSFER_DEFAULT, diff --git a/media/jni/soundpool/StreamManager.cpp b/media/jni/soundpool/StreamManager.cpp index acd4badad9b03..52060f1e6209f 100644 --- a/media/jni/soundpool/StreamManager.cpp +++ b/media/jni/soundpool/StreamManager.cpp @@ -109,7 +109,10 @@ StreamManager::StreamManager( int32_t streams, size_t threads, const audio_attributes_t& attributes, std::string opPackageName) : StreamMap(streams) - , mAttributes(attributes) + , mAttributes([attributes](){ + audio_attributes_t attr = attributes; + attr.flags = static_cast(attr.flags | AUDIO_FLAG_LOW_LATENCY); + return attr; }()) , mOpPackageName(std::move(opPackageName)) , mLockStreamManagerStop(streams == 1 || kForceLockStreamManagerStop) {