Merge "AudioService: Fix SpatializerHelper asserts" am: 4fca0605bd am: 53514bfa8c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2209997

Change-Id: I034ed5ea601f8e3b91110e902c31e9a687e0363f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Andy Hung
2022-09-08 22:01:50 +00:00
committed by Automerger Merge Worker
2 changed files with 33 additions and 10 deletions

View File

@@ -346,6 +346,7 @@ public class AudioService extends IAudioService.Stub
private static final int MSG_REMOVE_ASSISTANT_SERVICE_UID = 45; private static final int MSG_REMOVE_ASSISTANT_SERVICE_UID = 45;
private static final int MSG_UPDATE_ACTIVE_ASSISTANT_SERVICE_UID = 46; private static final int MSG_UPDATE_ACTIVE_ASSISTANT_SERVICE_UID = 46;
private static final int MSG_DISPATCH_DEVICE_VOLUME_BEHAVIOR = 47; private static final int MSG_DISPATCH_DEVICE_VOLUME_BEHAVIOR = 47;
private static final int MSG_RESET_SPATIALIZER = 50;
// start of messages handled under wakelock // start of messages handled under wakelock
// these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(), // these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(),
@@ -353,6 +354,7 @@ public class AudioService extends IAudioService.Stub
private static final int MSG_DISABLE_AUDIO_FOR_UID = 100; private static final int MSG_DISABLE_AUDIO_FOR_UID = 100;
private static final int MSG_INIT_STREAMS_VOLUMES = 101; private static final int MSG_INIT_STREAMS_VOLUMES = 101;
private static final int MSG_INIT_SPATIALIZER = 102; private static final int MSG_INIT_SPATIALIZER = 102;
// end of messages handled under wakelock // end of messages handled under wakelock
// retry delay in case of failure to indicate system ready to AudioFlinger // retry delay in case of failure to indicate system ready to AudioFlinger
@@ -8165,6 +8167,10 @@ public class AudioService extends IAudioService.Stub
onPersistSpatialAudioDeviceSettings(); onPersistSpatialAudioDeviceSettings();
break; break;
case MSG_RESET_SPATIALIZER:
mSpatializerHelper.reset(/* featureEnabled */ mHasSpatializerEffect);
break;
case MSG_CHECK_MUSIC_ACTIVE: case MSG_CHECK_MUSIC_ACTIVE:
onCheckMusicActive((String) msg.obj); onCheckMusicActive((String) msg.obj);
break; break;
@@ -9133,6 +9139,16 @@ public class AudioService extends IAudioService.Stub
/*arg1*/ 0, /*arg2*/ 0, TAG, /*delay*/ 0); /*arg1*/ 0, /*arg2*/ 0, TAG, /*delay*/ 0);
} }
/**
* post a message to schedule a reset of the spatializer state
*/
void postResetSpatializer() {
sendMsg(mAudioHandler,
MSG_RESET_SPATIALIZER,
SENDMSG_REPLACE,
/*arg1*/ 0, /*arg2*/ 0, TAG, /*delay*/ 0);
}
void onInitSpatializer() { void onInitSpatializer() {
final String settings = mSettings.getSecureStringForUser(mContentResolver, final String settings = mSettings.getSecureStringForUser(mContentResolver,
Settings.Secure.SPATIAL_AUDIO_ENABLED, UserHandle.USER_CURRENT); Settings.Secure.SPATIAL_AUDIO_ENABLED, UserHandle.USER_CURRENT);

View File

@@ -408,10 +408,10 @@ public class SpatializerHelper {
try { try {
mSpat.setLevel(level); mSpat.setLevel(level);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Can't set spatializer level", e); Log.e(TAG, "onRoutingUpdated() Can't set spatializer level", e);
mState = STATE_NOT_SUPPORTED; // try to recover by resetting the native spatializer state
mCapableSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; postReset();
enabled = false; return;
} }
} }
@@ -423,6 +423,10 @@ public class SpatializerHelper {
} }
} }
private void postReset() {
mAudioService.postResetSpatializer();
}
//------------------------------------------------------ //------------------------------------------------------
// spatializer callback from native // spatializer callback from native
private final class SpatializerCallback extends INativeSpatializerCallback.Stub { private final class SpatializerCallback extends INativeSpatializerCallback.Stub {
@@ -1182,8 +1186,11 @@ public class SpatializerHelper {
case STATE_DISABLED_AVAILABLE: case STATE_DISABLED_AVAILABLE:
case STATE_ENABLED_AVAILABLE: case STATE_ENABLED_AVAILABLE:
if (mSpat == null) { if (mSpat == null) {
throw (new IllegalStateException( // try to recover by resetting the native spatializer state
"null Spatializer when calling " + funcName)); Log.e(TAG, "checkSpatForHeadTracking(): "
+ "native spatializer should not be null in state: " + mState);
postReset();
return false;
} }
break; break;
} }
@@ -1273,8 +1280,8 @@ public class SpatializerHelper {
case STATE_DISABLED_AVAILABLE: case STATE_DISABLED_AVAILABLE:
case STATE_ENABLED_AVAILABLE: case STATE_ENABLED_AVAILABLE:
if (mSpat == null) { if (mSpat == null) {
throw (new IllegalStateException( Log.e(TAG, "setParameter(" + key + "): null spatializer in state: " + mState);
"null Spatializer for setParameter for key:" + key)); return;
} }
break; break;
} }
@@ -1297,8 +1304,8 @@ public class SpatializerHelper {
case STATE_DISABLED_AVAILABLE: case STATE_DISABLED_AVAILABLE:
case STATE_ENABLED_AVAILABLE: case STATE_ENABLED_AVAILABLE:
if (mSpat == null) { if (mSpat == null) {
throw (new IllegalStateException( Log.e(TAG, "getParameter(" + key + "): null spatializer in state: " + mState);
"null Spatializer for getParameter for key:" + key)); return;
} }
break; break;
} }