diff options
| author | 2022-08-04 16:49:02 +0000 | |
|---|---|---|
| committer | 2022-08-04 16:49:02 +0000 | |
| commit | bca87132c8c69beffbe2b5d29cf46e170a3a6458 (patch) | |
| tree | 02e7307678fc74cb09b739f4e7f7b2d5b3735728 | |
| parent | 30e2cea72f4d30c2e193803a98a9fa24abff780c (diff) | |
| parent | 06350ce4ffa9068b5dcea2eb89c2abce487e29c6 (diff) | |
Merge "AudioService: Fix SpatializerHelper asserts" into tm-qpr-dev am: 06350ce4ff
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19527709
Change-Id: I8896de61bc5dc7b8eb29b8446277a6098108674b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 16 | ||||
| -rw-r--r-- | services/core/java/com/android/server/audio/SpatializerHelper.java | 27 |
2 files changed, 33 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 56802d79bdca..75f9fe8964c9 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -368,6 +368,7 @@ public class AudioService extends IAudioService.Stub private static final int MSG_DISPATCH_DEVICE_VOLUME_BEHAVIOR = 47; private static final int MSG_ROTATION_UPDATE = 48; private static final int MSG_FOLD_UPDATE = 49; + private static final int MSG_RESET_SPATIALIZER = 50; // start of messages handled under wakelock // these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(), @@ -375,6 +376,7 @@ public class AudioService extends IAudioService.Stub 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_SPATIALIZER = 102; + // end of messages handled under wakelock // retry delay in case of failure to indicate system ready to AudioFlinger @@ -8297,6 +8299,10 @@ public class AudioService extends IAudioService.Stub onPersistSpatialAudioDeviceSettings(); break; + case MSG_RESET_SPATIALIZER: + mSpatializerHelper.reset(/* featureEnabled */ mHasSpatializerEffect); + break; + case MSG_CHECK_MUSIC_ACTIVE: onCheckMusicActive((String) msg.obj); break; @@ -9275,6 +9281,16 @@ public class AudioService extends IAudioService.Stub /*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() { final String settings = mSettings.getSecureStringForUser(mContentResolver, Settings.Secure.SPATIAL_AUDIO_ENABLED, UserHandle.USER_CURRENT); diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java index d23b95b80ec9..e27fb1141850 100644 --- a/services/core/java/com/android/server/audio/SpatializerHelper.java +++ b/services/core/java/com/android/server/audio/SpatializerHelper.java @@ -389,10 +389,10 @@ public class SpatializerHelper { try { mSpat.setLevel(level); } catch (RemoteException e) { - Log.e(TAG, "Can't set spatializer level", e); - mState = STATE_NOT_SUPPORTED; - mCapableSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE; - enabled = false; + Log.e(TAG, "onRoutingUpdated() Can't set spatializer level", e); + // try to recover by resetting the native spatializer state + postReset(); + return; } } @@ -404,6 +404,10 @@ public class SpatializerHelper { } } + private void postReset() { + mAudioService.postResetSpatializer(); + } + //------------------------------------------------------ // spatializer callback from native private final class SpatializerCallback extends INativeSpatializerCallback.Stub { @@ -1157,8 +1161,11 @@ public class SpatializerHelper { case STATE_DISABLED_AVAILABLE: case STATE_ENABLED_AVAILABLE: if (mSpat == null) { - throw (new IllegalStateException( - "null Spatializer when calling " + funcName)); + // try to recover by resetting the native spatializer state + Log.e(TAG, "checkSpatForHeadTracking(): " + + "native spatializer should not be null in state: " + mState); + postReset(); + return false; } break; } @@ -1248,8 +1255,8 @@ public class SpatializerHelper { case STATE_DISABLED_AVAILABLE: case STATE_ENABLED_AVAILABLE: if (mSpat == null) { - throw (new IllegalStateException( - "null Spatializer for setParameter for key:" + key)); + Log.e(TAG, "setParameter(" + key + "): null spatializer in state: " + mState); + return; } break; } @@ -1272,8 +1279,8 @@ public class SpatializerHelper { case STATE_DISABLED_AVAILABLE: case STATE_ENABLED_AVAILABLE: if (mSpat == null) { - throw (new IllegalStateException( - "null Spatializer for getParameter for key:" + key)); + Log.e(TAG, "getParameter(" + key + "): null spatializer in state: " + mState); + return; } break; } |