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

Commit 88e1d86a authored by Paul McLean's avatar Paul McLean
Browse files

Adding explicit routing API to AudioTrack

Change-Id: Iee7e1ce79e3efd3f8aafd0a5899fe037d314e1be
parent 64e605a5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -14965,6 +14965,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();
@@ -14981,6 +14982,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
@@ -16177,6 +16177,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();
@@ -16193,6 +16194,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
    //------------------