Skip to content
Snippets Groups Projects
Commit 25845858 authored by Eric Laurent's avatar Eric Laurent
Browse files

SpatializerHelper: assimilate speaker safe to speaker device for SA compatibility

Although speaker safe is a mono device and should not be compatible with
transaural spatilization, we consider it is to avoid transient SA availability
changes propagated to apps that would cause failures to play SA content.
This can happen for instance if ringtone playback is still active when
the onRoutingUpdated() calback is called by APM due to an audio mode change.

A better longer term solution would be to trigger the onRoutingUpdated()
callback more dynamically each time the media routing changes but the
impact on performance and other consumers of this callback must be investigated.

Bug: 331349123
Test: repro steps in the bug
Change-Id: Id5d48427ff4ecef02a01a6e7fe46c5f910825e81
Merged-In: Id5d48427ff4ecef02a01a6e7fe46c5f910825e81
parent 97a462b1
No related branches found
No related tags found
No related merge requests found
......@@ -88,6 +88,10 @@ public class SpatializerHelper {
/*package*/ static final SparseIntArray SPAT_MODE_FOR_DEVICE_TYPE = new SparseIntArray(14) {
{
append(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, Spatialization.Mode.TRANSAURAL);
// Speaker safe is considered compatible with spatial audio because routing media usage
// to speaker safe only happens in transient situations and should not affect app
// decisions to play spatial audio content.
append(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER_SAFE, Spatialization.Mode.TRANSAURAL);
append(AudioDeviceInfo.TYPE_WIRED_HEADSET, Spatialization.Mode.BINAURAL);
append(AudioDeviceInfo.TYPE_WIRED_HEADPHONES, Spatialization.Mode.BINAURAL);
// assumption for A2DP: mostly headsets
......@@ -805,7 +809,7 @@ public class SpatializerHelper {
private boolean isDeviceCompatibleWithSpatializationModes(@NonNull AudioDeviceAttributes ada) {
// modeForDevice will be neither transaural or binaural for devices that do not support
// spatial audio. For instance mono devices like earpiece, speaker safe or sco must
// spatial audio. For instance mono devices like earpiece or sco must
// not be included.
final byte modeForDevice = (byte) SPAT_MODE_FOR_DEVICE_TYPE.get(ada.getType(),
/*default when type not found*/ -1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment