diff options
author | Marco Nelissen <marcone@google.com> | 2012-02-28 16:07:44 -0800 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2012-03-13 13:13:14 -0700 |
commit | 84b832054552e00257bb04997143ca33d6d100be (patch) | |
tree | cf04f15f15da2d9ddbd2112b2b89542f6270b4ce /media/jni | |
parent | f19d5f0271a9e0cdf3a79c6ccab5aa151b0b3239 (diff) | |
download | frameworks_base-84b832054552e00257bb04997143ca33d6d100be.zip frameworks_base-84b832054552e00257bb04997143ca33d6d100be.tar.gz frameworks_base-84b832054552e00257bb04997143ca33d6d100be.tar.bz2 |
Gapless playback, step 1.
Currently able to play Ogg Vorbis, PCM WAV and other lossless files seamlessly
by reusing the initial AudioTrack for subsequent players.
Change-Id: Ie7cf6b9076bdf4f9211574456d192c02c04fecc7
Diffstat (limited to 'media/jni')
-rw-r--r-- | media/jni/android_media_MediaPlayer.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index f572f71..745e253 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -795,6 +795,33 @@ android_media_MediaPlayer_getParameter(JNIEnv *env, jobject thiz, jint key, jobj process_media_player_call(env, thiz, mp->getParameter(key, reply), NULL, NULL ); } +static void +android_media_MediaPlayer_setNextMediaPlayer(JNIEnv *env, jobject thiz, jobject java_player) +{ + ALOGV("setNextMediaPlayer"); + sp<MediaPlayer> thisplayer = getMediaPlayer(env, thiz); + if (thisplayer == NULL) { + jniThrowException(env, "java/lang/IllegalStateException", "This player not initialized"); + return; + } + sp<MediaPlayer> nextplayer = (java_player == NULL) ? NULL : getMediaPlayer(env, java_player); + if (nextplayer == NULL && java_player != NULL) { + jniThrowException(env, "java/lang/IllegalStateException", "That player not initialized"); + return; + } + + if (nextplayer == thisplayer) { + jniThrowException(env, "java/lang/IllegalArgumentException", "Next player can't be self"); + return; + } + // tie the two players together + process_media_player_call( + env, thiz, thisplayer->setNextMediaPlayer(nextplayer), + "java/lang/IllegalArgumentException", + "setNextMediaPlayer failed." ); + ; +} + // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { @@ -840,6 +867,7 @@ static JNINativeMethod gMethods[] = { {"setParameter", "(ILandroid/os/Parcel;)Z", (void *)android_media_MediaPlayer_setParameter}, {"getParameter", "(ILandroid/os/Parcel;)V", (void *)android_media_MediaPlayer_getParameter}, {"native_setRetransmitEndpoint", "(Ljava/lang/String;I)I", (void *)android_media_MediaPlayer_setRetransmitEndpoint}, + {"setNextMediaPlayer", "(Landroid/media/MediaPlayer;)V", (void *)android_media_MediaPlayer_setNextMediaPlayer}, }; static const char* const kClassPathName = "android/media/MediaPlayer"; |