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
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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<MediaPlayer2> 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<MediaPlayer2> 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},
|
||||
|
||||
Reference in New Issue
Block a user