Merge "audio: Fix remote submix configuration and 'prepareToClose'" into main am: 8a4394f8b8
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2825161 Change-Id: I370c8367226ef33724605f22354f8b3008becd41 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
ba113931bd
2 changed files with 11 additions and 9 deletions
|
@ -302,8 +302,9 @@ std::unique_ptr<Configuration> getPrimaryConfiguration() {
|
|||
// 2. The canonical r_submix configuration only lists 'STEREO' and '48000',
|
||||
// however the framework attempts to open streams for other sample rates
|
||||
// as well. The legacy r_submix implementation allowed that, but libaudiohal@aidl
|
||||
// will not find a mix port to use. Because of that, list all channel
|
||||
// masks and sample rates that the legacy implementation allowed.
|
||||
// will not find a mix port to use. Because of that, list all sample rates that
|
||||
// the legacy implementation allowed (note that mono was not allowed, the framework
|
||||
// is expected to upmix mono tracks into stereo if needed).
|
||||
// 3. The legacy implementation had a hard limit on the number of routes (10),
|
||||
// and this is checked indirectly by AudioPlaybackCaptureTest#testPlaybackCaptureDoS
|
||||
// CTS test. Instead of hardcoding the number of routes, we can use
|
||||
|
@ -331,9 +332,8 @@ std::unique_ptr<Configuration> getPrimaryConfiguration() {
|
|||
std::unique_ptr<Configuration> getRSubmixConfiguration() {
|
||||
static const Configuration configuration = []() {
|
||||
Configuration c;
|
||||
const std::vector<AudioProfile> standardPcmAudioProfiles{
|
||||
createProfile(PcmType::INT_16_BIT,
|
||||
{AudioChannelLayout::LAYOUT_MONO, AudioChannelLayout::LAYOUT_STEREO},
|
||||
const std::vector<AudioProfile> remoteSubmixPcmAudioProfiles{
|
||||
createProfile(PcmType::INT_16_BIT, {AudioChannelLayout::LAYOUT_STEREO},
|
||||
{8000, 11025, 16000, 32000, 44100, 48000})};
|
||||
|
||||
// Device ports
|
||||
|
@ -343,25 +343,25 @@ std::unique_ptr<Configuration> getRSubmixConfiguration() {
|
|||
createDeviceExt(AudioDeviceType::OUT_SUBMIX, 0,
|
||||
AudioDeviceDescription::CONNECTION_VIRTUAL));
|
||||
c.ports.push_back(rsubmixOutDevice);
|
||||
c.connectedProfiles[rsubmixOutDevice.id] = standardPcmAudioProfiles;
|
||||
c.connectedProfiles[rsubmixOutDevice.id] = remoteSubmixPcmAudioProfiles;
|
||||
|
||||
AudioPort rsubmixInDevice =
|
||||
createPort(c.nextPortId++, "Remote Submix In", 0, true,
|
||||
createDeviceExt(AudioDeviceType::IN_SUBMIX, 0,
|
||||
AudioDeviceDescription::CONNECTION_VIRTUAL));
|
||||
c.ports.push_back(rsubmixInDevice);
|
||||
c.connectedProfiles[rsubmixInDevice.id] = standardPcmAudioProfiles;
|
||||
c.connectedProfiles[rsubmixInDevice.id] = remoteSubmixPcmAudioProfiles;
|
||||
|
||||
// Mix ports
|
||||
|
||||
AudioPort rsubmixOutMix =
|
||||
createPort(c.nextPortId++, "r_submix output", 0, false, createPortMixExt(20, 10));
|
||||
rsubmixOutMix.profiles = standardPcmAudioProfiles;
|
||||
rsubmixOutMix.profiles = remoteSubmixPcmAudioProfiles;
|
||||
c.ports.push_back(rsubmixOutMix);
|
||||
|
||||
AudioPort rsubmixInMix =
|
||||
createPort(c.nextPortId++, "r_submix input", 0, true, createPortMixExt(20, 10));
|
||||
rsubmixInMix.profiles = standardPcmAudioProfiles;
|
||||
rsubmixInMix.profiles = remoteSubmixPcmAudioProfiles;
|
||||
c.ports.push_back(rsubmixInMix);
|
||||
|
||||
c.routes.push_back(createRoute({rsubmixOutMix}, rsubmixOutDevice));
|
||||
|
|
|
@ -131,6 +131,8 @@ ndk::ScopedAStatus StreamRemoteSubmix::prepareToClose() {
|
|||
LOG(DEBUG) << __func__ << ": shutting down MonoPipe sink";
|
||||
|
||||
sink->shutdown(true);
|
||||
// The client already considers this stream as closed, release the output end.
|
||||
route->closeStream(mIsInput);
|
||||
} else {
|
||||
LOG(DEBUG) << __func__ << ": stream already closed.";
|
||||
ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
|
||||
|
|
Loading…
Reference in a new issue