diff options
author | Daniel Norman <danielnorman@google.com> | 2021-06-18 15:33:36 -0700 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-06-21 23:21:54 +0000 |
commit | b6d6690a3594cd78966e26508247d4ab1b66776f (patch) | |
tree | 43afd0520ff98b8729b5c8f73ef2ee1c7e77041a /media | |
parent | 71c831703ae59baf47e0afe611fecd714c481cdf (diff) | |
parent | 233ce9ef453bc7b47f7ac5d0eb1d5fda0ce845ab (diff) |
Merge SP1A.210616.001
Change-Id: I9acdc955f698dbebb8fad19cfd5cb71fcdd27b45
Diffstat (limited to 'media')
-rw-r--r-- | media/java/android/media/AudioManager.java | 2 | ||||
-rw-r--r-- | media/java/android/media/AudioSystem.java | 3 | ||||
-rw-r--r-- | media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl | 4 | ||||
-rw-r--r-- | media/java/android/media/MediaRoute2ProviderService.java | 42 | ||||
-rw-r--r-- | media/java/android/media/MediaRouter.java | 17 | ||||
-rw-r--r-- | media/java/android/media/RingtoneManager.java | 4 | ||||
-rw-r--r-- | media/jni/soundpool/Sound.cpp | 2 |
7 files changed, 56 insertions, 18 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 98f066057c9f..ef478ee6aa6b 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -7111,6 +7111,8 @@ public class AudioManager { * @return a map where the key is a surround format and * the value indicates the surround format is enabled or not */ + @TestApi + @NonNull public Map<Integer, Boolean> getSurroundFormats() { Map<Integer, Boolean> surroundFormats = new HashMap<>(); int status = AudioSystem.getSurroundFormats(surroundFormats); diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index cefa3f82533e..54185daa5380 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -27,6 +27,7 @@ import android.content.pm.PackageManager; import android.media.audiofx.AudioEffect; import android.media.audiopolicy.AudioMix; import android.os.Build; +import android.os.IBinder; import android.os.Vibrator; import android.telephony.TelephonyManager; import android.util.Log; @@ -1680,6 +1681,8 @@ public class AudioSystem /** @hide */ @UnsupportedAppUsage public static native int checkAudioFlinger(); + /** @hide */ + public static native void setAudioFlingerBinder(IBinder audioFlinger); /** @hide */ public static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation); diff --git a/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl b/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl index 1755657ddc64..63c52a142fdd 100644 --- a/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl +++ b/media/java/android/media/IMediaRoute2ProviderServiceCallback.aidl @@ -26,9 +26,9 @@ import android.os.Bundle; */ oneway interface IMediaRoute2ProviderServiceCallback { // TODO: Change it to updateRoutes? - void updateState(in MediaRoute2ProviderInfo providerInfo); + void notifyProviderUpdated(in MediaRoute2ProviderInfo providerInfo); void notifySessionCreated(long requestId, in RoutingSessionInfo sessionInfo); - void notifySessionUpdated(in RoutingSessionInfo sessionInfo); + void notifySessionsUpdated(in List<RoutingSessionInfo> sessionInfo); void notifySessionReleased(in RoutingSessionInfo sessionInfo); void notifyRequestFailed(long requestId, int reason); } diff --git a/media/java/android/media/MediaRoute2ProviderService.java b/media/java/android/media/MediaRoute2ProviderService.java index 93fe06ac99aa..49e0411cc4d1 100644 --- a/media/java/android/media/MediaRoute2ProviderService.java +++ b/media/java/android/media/MediaRoute2ProviderService.java @@ -141,6 +141,7 @@ public abstract class MediaRoute2ProviderService extends Service { private final Object mSessionLock = new Object(); private final Object mRequestIdsLock = new Object(); private final AtomicBoolean mStatePublishScheduled = new AtomicBoolean(false); + private final AtomicBoolean mSessionUpdateScheduled = new AtomicBoolean(false); private MediaRoute2ProviderServiceStub mStub; private IMediaRoute2ProviderServiceCallback mRemoteCallback; private volatile MediaRoute2ProviderInfo mProviderInfo; @@ -287,16 +288,8 @@ public abstract class MediaRoute2ProviderService extends Service { Log.w(TAG, "notifySessionUpdated: Ignoring unknown session info."); return; } - - if (mRemoteCallback == null) { - return; - } - try { - mRemoteCallback.notifySessionUpdated(sessionInfo); - } catch (RemoteException ex) { - Log.w(TAG, "Failed to notify session info changed."); - } } + scheduleUpdateSessions(); } /** @@ -479,6 +472,7 @@ public abstract class MediaRoute2ProviderService extends Service { void setCallback(IMediaRoute2ProviderServiceCallback callback) { mRemoteCallback = callback; schedulePublishState(); + scheduleUpdateSessions(); } void schedulePublishState() { @@ -497,12 +491,40 @@ public abstract class MediaRoute2ProviderService extends Service { } try { - mRemoteCallback.updateState(mProviderInfo); + mRemoteCallback.notifyProviderUpdated(mProviderInfo); } catch (RemoteException ex) { Log.w(TAG, "Failed to publish provider state.", ex); } } + void scheduleUpdateSessions() { + if (mSessionUpdateScheduled.compareAndSet(false, true)) { + mHandler.post(this::updateSessions); + } + } + + private void updateSessions() { + if (!mSessionUpdateScheduled.compareAndSet(true, false)) { + return; + } + + if (mRemoteCallback == null) { + return; + } + + List<RoutingSessionInfo> sessions; + synchronized (mSessionLock) { + sessions = new ArrayList<>(mSessionInfo.values()); + } + + try { + mRemoteCallback.notifySessionsUpdated(sessions); + } catch (RemoteException ex) { + Log.w(TAG, "Failed to notify session info changed."); + } + + } + /** * Adds a requestId in the request ID list whose max size is {@link #MAX_REQUEST_IDS_SIZE}. * When the max size is reached, the first element is removed (FIFO). diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java index 4c8a8fa4a554..345d9b27c8a8 100644 --- a/media/java/android/media/MediaRouter.java +++ b/media/java/android/media/MediaRouter.java @@ -185,6 +185,7 @@ public class MediaRouter { AudioRoutesInfo newAudioRoutes = null; try { + mIsBluetoothA2dpOn = mAudioService.isBluetoothA2dpOn(); newAudioRoutes = mAudioService.startWatchingRoutes(mAudioRoutesObserver); } catch (RemoteException e) { } @@ -695,13 +696,17 @@ public class MediaRouter { @Override public void onGlobalA2dpChanged(boolean a2dpOn) { mHandler.post(() -> { - if (mSelectedRoute == null) { + if (mSelectedRoute == null || mBluetoothA2dpRoute == null) { return; } if (mSelectedRoute.isDefault() && a2dpOn) { - setSelectedRoute(mBluetoothA2dpRoute, /*explicit=*/false); + setSelectedRoute(mBluetoothA2dpRoute, /*explicit=*/ false); + dispatchRouteUnselected(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo); + dispatchRouteSelected(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute); } else if (mSelectedRoute.isBluetooth() && !a2dpOn) { - setSelectedRoute(mDefaultAudioVideo, /*explicit=*/false); + setSelectedRoute(mDefaultAudioVideo, /*explicit=*/ false); + dispatchRouteUnselected(ROUTE_TYPE_LIVE_AUDIO, mBluetoothA2dpRoute); + dispatchRouteSelected(ROUTE_TYPE_LIVE_AUDIO, mDefaultAudioVideo); } }); } @@ -1362,6 +1367,9 @@ public class MediaRouter { } static void dispatchRouteSelected(int type, RouteInfo info) { + if (DEBUG) { + Log.d(TAG, "Dispatching route selected: " + info); + } for (CallbackInfo cbi : sStatic.mCallbacks) { if (cbi.filterRouteEvent(info)) { cbi.cb.onRouteSelected(cbi.router, type, info); @@ -1370,6 +1378,9 @@ public class MediaRouter { } static void dispatchRouteUnselected(int type, RouteInfo info) { + if (DEBUG) { + Log.d(TAG, "Dispatching route unselected: " + info); + } for (CallbackInfo cbi : sStatic.mCallbacks) { if (cbi.filterRouteEvent(info)) { cbi.cb.onRouteUnselected(cbi.router, type, info); diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index e2e13b048cf7..be6ff1baadd6 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -521,12 +521,12 @@ public class RingtoneManager { public int getRingtonePosition(Uri ringtoneUri) { try { if (ringtoneUri == null) return -1; - final long ringtoneId = ContentUris.parseId(ringtoneUri); final Cursor cursor = getCursor(); cursor.moveToPosition(-1); while (cursor.moveToNext()) { - if (ringtoneId == cursor.getLong(ID_COLUMN_INDEX)) { + Uri uriFromCursor = getUriFromCursor(mContext, cursor); + if (ringtoneUri.equals(uriFromCursor)) { return cursor.getPosition(); } } diff --git a/media/jni/soundpool/Sound.cpp b/media/jni/soundpool/Sound.cpp index 50e0d336f981..6ef074090df8 100644 --- a/media/jni/soundpool/Sound.cpp +++ b/media/jni/soundpool/Sound.cpp @@ -214,7 +214,7 @@ status_t Sound::doLoad() } else if (sampleRate > kMaxSampleRate) { ALOGE("%s: sample rate (%u) out of range", __func__, sampleRate); status = BAD_VALUE; - } else if (channelCount < 1 || channelCount > FCC_8) { + } else if (channelCount < 1 || channelCount > FCC_LIMIT) { ALOGE("%s: sample channel count (%d) out of range", __func__, channelCount); status = BAD_VALUE; } else { |