From ee42cb2fc331d69c6d951bc453ee5165e583c309 Mon Sep 17 00:00:00 2001 From: Dongwon Kang Date: Fri, 12 Oct 2018 16:50:07 -0700 Subject: [PATCH] MediaPlayer2: remove AudioManager private API usage Private API AudioManager.getDevicesStatic() is being used in MediaPlayer2 for conversion between id <=> AudioDeviceInfo. This conversion was added to talk with internal native AudioTrack API, but in MediaPlayer2 since we will use public java AudioTrack API, the given AudioDeviceInfo can be directly passed to java AudioTrack instance. Test: CtsMediaTestCases:android.media.cts.RoutingTest Bug: 112767549 Change-Id: I03f01d17ef10e4edb074a160c877ca3aa711cbe1 --- .../java/android/media/MediaPlayer2Impl.java | 52 ++----------------- media/jni/android_media_MediaPlayer2.cpp | 14 ++--- 2 files changed, 10 insertions(+), 56 deletions(-) diff --git a/media/java/android/media/MediaPlayer2Impl.java b/media/java/android/media/MediaPlayer2Impl.java index 47ab7facbd821..8f475a1ab7234 100644 --- a/media/java/android/media/MediaPlayer2Impl.java +++ b/media/java/android/media/MediaPlayer2Impl.java @@ -798,11 +798,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { @Override public boolean setPreferredDevice(AudioDeviceInfo deviceInfo) { - if (deviceInfo != null && !deviceInfo.isSink()) { - return false; - } - int preferredDeviceId = deviceInfo != null ? deviceInfo.getId() : 0; - boolean status = native_setOutputDevice(preferredDeviceId); + boolean status = native_setPreferredDevice(deviceInfo); if (status == true) { synchronized (this) { mPreferredDevice = deviceInfo; @@ -819,20 +815,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } @Override - public AudioDeviceInfo getRoutedDevice() { - int deviceId = native_getRoutedDeviceId(); - if (deviceId == 0) { - return null; - } - AudioDeviceInfo[] devices = - AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_OUTPUTS); - for (int i = 0; i < devices.length; i++) { - if (devices[i].getId() == deviceId) { - return devices[i]; - } - } - return null; - } + public native AudioDeviceInfo getRoutedDevice(); @Override public void addOnRoutingChangedListener(AudioRouting.OnRoutingChangedListener listener, @@ -852,8 +835,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { native_removeDeviceCallback(listener); } - private native final boolean native_setOutputDevice(int deviceId); - private native final int native_getRoutedDeviceId(); + private native boolean native_setPreferredDevice(AudioDeviceInfo device); private native void native_addDeviceCallback(RoutingDelegate rd); private native void native_removeDeviceCallback( AudioRouting.OnRoutingChangedListener listener); @@ -2773,34 +2755,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } - // Called from the native side - @SuppressWarnings("unused") - private static boolean setAudioOutputDeviceById(AudioTrack track, int deviceId) { - if (track == null) { - return false; - } - - if (deviceId == 0) { - // Use default routing. - track.setPreferredDevice(null); - return true; - } - - // TODO: Unhide AudioManager.getDevicesStatic. - AudioDeviceInfo[] outputDevices = - AudioManager.getDevicesStatic(AudioManager.GET_DEVICES_OUTPUTS); - - boolean success = false; - for (AudioDeviceInfo device : outputDevices) { - if (device.getId() == deviceId) { - track.setPreferredDevice(device); - success = true; - break; - } - } - return success; - } - // Instantiated from the native side @SuppressWarnings("unused") private static class StreamEventCallback extends AudioTrack.StreamEventCallback { diff --git a/media/jni/android_media_MediaPlayer2.cpp b/media/jni/android_media_MediaPlayer2.cpp index 67005be24b823..520077fef9b08 100644 --- a/media/jni/android_media_MediaPlayer2.cpp +++ b/media/jni/android_media_MediaPlayer2.cpp @@ -1306,22 +1306,22 @@ static void android_media_MediaPlayer2_releaseDrm(JNIEnv *env, jobject thiz) ///////////////////////////////////////////////////////////////////////////////////// // AudioRouting begin -static jboolean android_media_MediaPlayer2_setOutputDevice(JNIEnv *env, jobject thiz, jint device_id) +static jboolean android_media_MediaPlayer2_setPreferredDevice(JNIEnv *env, jobject thiz, jobject device) { sp mp = getMediaPlayer(env, thiz); if (mp == NULL) { return false; } - return mp->setOutputDevice(device_id) == NO_ERROR; + return mp->setPreferredDevice(device) == NO_ERROR; } -static jint android_media_MediaPlayer2_getRoutedDeviceId(JNIEnv *env, jobject thiz) +static jobject android_media_MediaPlayer2_getRoutedDevice(JNIEnv *env, jobject thiz) { sp mp = getMediaPlayer(env, thiz); if (mp == NULL) { - return AUDIO_PORT_HANDLE_NONE; + return nullptr; } - return mp->getRoutedDeviceId(); + return mp->getRoutedDevice(); } static void android_media_MediaPlayer2_addDeviceCallback( @@ -1470,8 +1470,8 @@ static const JNINativeMethod gMethods[] = { { "_releaseDrm", "()V", (void *)android_media_MediaPlayer2_releaseDrm }, // AudioRouting - {"native_setOutputDevice", "(I)Z", (void *)android_media_MediaPlayer2_setOutputDevice}, - {"native_getRoutedDeviceId", "()I", (void *)android_media_MediaPlayer2_getRoutedDeviceId}, + {"native_setPreferredDevice", "(Landroid/media/AudioDeviceInfo;)Z", (void *)android_media_MediaPlayer2_setPreferredDevice}, + {"getRoutedDevice", "()Landroid/media/AudioDeviceInfo;", (void *)android_media_MediaPlayer2_getRoutedDevice}, {"native_addDeviceCallback", "(Landroid/media/RoutingDelegate;)V", (void *)android_media_MediaPlayer2_addDeviceCallback}, {"native_removeDeviceCallback", "(Landroid/media/AudioRouting$OnRoutingChangedListener;)V", (void *)android_media_MediaPlayer2_removeDeviceCallback},