diff --git a/audio/aidl/default/Configuration.cpp b/audio/aidl/default/Configuration.cpp index d63e353462..2a8e58f843 100644 --- a/audio/aidl/default/Configuration.cpp +++ b/audio/aidl/default/Configuration.cpp @@ -321,9 +321,9 @@ std::unique_ptr getPrimaryConfiguration() { // // Mix ports: // * "r_submix output", maximum 10 opened streams, maximum 10 active streams -// - profile PCM 16-bit; MONO, STEREO; 8000, 11025, 16000, 32000, 44100, 48000 +// - profile PCM 16-bit; STEREO; 8000, 11025, 16000, 32000, 44100, 48000 // * "r_submix input", maximum 10 opened streams, maximum 10 active streams -// - profile PCM 16-bit; MONO, STEREO; 8000, 11025, 16000, 32000, 44100, 48000 +// - profile PCM 16-bit; STEREO; 8000, 11025, 16000, 32000, 44100, 48000 // // Routes: // "r_submix output" -> "Remote Submix Out" diff --git a/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp b/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp index 3e8dd7cb39..2f4288976f 100644 --- a/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp +++ b/audio/aidl/default/r_submix/ModuleRemoteSubmix.cpp @@ -112,7 +112,7 @@ int32_t ModuleRemoteSubmix::getNominalLatencyMs(const AudioPortConfig&) { static constexpr int32_t kMaxLatencyMs = (r_submix::kDefaultPipeSizeInFrames * 1000) / r_submix::kDefaultSampleRateHz; static constexpr int32_t kMinLatencyMs = kMaxLatencyMs / r_submix::kDefaultPipePeriodCount; - return (kMaxLatencyMs + kMinLatencyMs) / 2; + return kMinLatencyMs; } } // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp index 6258c938b0..d238aa42b3 100644 --- a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp +++ b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp @@ -73,10 +73,8 @@ std::map> StreamRemoteSubmix::s LOG(ERROR) << __func__ << ": nullptr sink when opening stream"; return ::android::NO_INIT; } - // If the sink has been shutdown or pipe recreation is forced, delete the pipe and - // recreate it. - if (sink->isShutdown()) { - LOG(DEBUG) << __func__ << ": Non-nullptr shut down sink when opening stream"; + if ((!mIsInput || mCurrentRoute->isStreamInOpen()) && sink->isShutdown()) { + LOG(DEBUG) << __func__ << ": Shut down sink when opening stream"; if (::android::OK != mCurrentRoute->resetPipe()) { LOG(ERROR) << __func__ << ": reset pipe failed"; return ::android::NO_INIT; diff --git a/audio/aidl/default/r_submix/SubmixRoute.cpp b/audio/aidl/default/r_submix/SubmixRoute.cpp index f04e607283..235c9a3f32 100644 --- a/audio/aidl/default/r_submix/SubmixRoute.cpp +++ b/audio/aidl/default/r_submix/SubmixRoute.cpp @@ -98,6 +98,9 @@ void SubmixRoute::openStream(bool isInput) { } mStreamInStandby = true; mReadCounterFrames = 0; + if (mSink != nullptr) { + mSink->shutdown(false); + } } else { mStreamOutOpen = true; } @@ -106,8 +109,7 @@ void SubmixRoute::openStream(bool isInput) { void SubmixRoute::closeStream(bool isInput) { std::lock_guard guard(mLock); if (isInput) { - mInputRefCount--; - if (mInputRefCount == 0) { + if (--mInputRefCount == 0) { mStreamInOpen = false; if (mSink != nullptr) { mSink->shutdown(true);