Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71a9cfc0 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "Adding explicit routing API to AudioTrack"

parents 51c050a3 88e1d86a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -14972,6 +14972,7 @@ package android.media {
    method public int getPlaybackHeadPosition();
    method public int getPlaybackRate();
    method public int getPositionNotificationPeriod();
    method public android.media.AudioDeviceInfo getPreferredOutputDevice();
    method public int getSampleRate();
    method public int getState();
    method public int getStreamType();
@@ -14988,6 +14989,7 @@ package android.media {
    method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler);
    method public int setPlaybackRate(int);
    method public int setPositionNotificationPeriod(int);
    method public boolean setPreferredOutputDevice(android.media.AudioDeviceInfo);
    method protected deprecated void setState(int);
    method public deprecated int setStereoVolume(float, float);
    method public int setVolume(float);
+2 −0
Original line number Diff line number Diff line
@@ -16184,6 +16184,7 @@ package android.media {
    method public int getPlaybackHeadPosition();
    method public int getPlaybackRate();
    method public int getPositionNotificationPeriod();
    method public android.media.AudioDeviceInfo getPreferredOutputDevice();
    method public int getSampleRate();
    method public int getState();
    method public int getStreamType();
@@ -16200,6 +16201,7 @@ package android.media {
    method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler);
    method public int setPlaybackRate(int);
    method public int setPositionNotificationPeriod(int);
    method public boolean setPreferredOutputDevice(android.media.AudioDeviceInfo);
    method protected deprecated void setState(int);
    method public deprecated int setStereoVolume(float, float);
    method public int setVolume(float);
+9 −0
Original line number Diff line number Diff line
@@ -957,6 +957,13 @@ static jint android_media_AudioTrack_attachAuxEffect(JNIEnv *env, jobject thiz,
    return nativeToJavaStatus( lpTrack->attachAuxEffect(effectId) );
}

static jboolean android_media_AudioTrack_setOutputDevice(
                JNIEnv *env,  jobject thiz, jint device_id) {

    sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
    return lpTrack->setOutputDevice(device_id) == NO_ERROR;
}

// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
static JNINativeMethod gMethods[] = {
@@ -1002,6 +1009,8 @@ static JNINativeMethod gMethods[] = {
                             "(F)I",     (void *)android_media_AudioTrack_setAuxEffectSendLevel},
    {"native_attachAuxEffect",
                             "(I)I",     (void *)android_media_AudioTrack_attachAuxEffect},
    {"native_setOutputDevice", "(I)Z",
                             (void *)android_media_AudioTrack_setOutputDevice},
};


+35 −0
Original line number Diff line number Diff line
@@ -1851,6 +1851,39 @@ public class AudioTrack
        return err == 0 ? SUCCESS : ERROR;
    }

    //--------------------------------------------------------------------------
    // Explicit Routing
    //--------------------
    private AudioDeviceInfo mPreferredDevice = null;

    /**
     * Specifies an audio device (via and {@link AudioDeviceInfo} object) to route
     * the output from this AudioTrack.
     * @param deviceSpec The {@link AudioDeviceInfo} specifying the physical audio device.
     *  If deviceSpec is null, default routing is restored.
     * @return true if succesful, false if the specified {@link AudioDeviceInfo} is non-null and
     * does not correspond to a valid audio output device.
     */
    public boolean setPreferredOutputDevice(AudioDeviceInfo deviceSpec) {
        // Do some validation....
        if (deviceSpec != null && !deviceSpec.isSink()) {
            return false;
        }

        mPreferredDevice = deviceSpec;
        int routingDeviceId = mPreferredDevice != null ? deviceSpec.getId() : 0;

        return native_setOutputDevice(routingDeviceId);
    }

    /**
     * Returns the selected output specified by {@link #setPreferredOutputDevice}. Note that this
     * is not guarenteed to correspond to the actual device being used for playback.
     */
    public AudioDeviceInfo getPreferredOutputDevice() {
        return mPreferredDevice;
    }

    //---------------------------------------------------------
    // Interface definitions
    //--------------------
@@ -2027,6 +2060,8 @@ public class AudioTrack
    private native final int native_attachAuxEffect(int effectId);
    private native final int native_setAuxEffectSendLevel(float level);

    private native final boolean native_setOutputDevice(int deviceId);

    //---------------------------------------------------------
    // Utility methods
    //------------------