diff options
Diffstat (limited to 'media/jni')
| -rw-r--r-- | media/jni/Android.mk | 2 | ||||
| -rw-r--r-- | media/jni/android_media_MediaPlayer.cpp | 26 | ||||
| -rw-r--r-- | media/jni/soundpool/Android.mk | 1 |
3 files changed, 29 insertions, 0 deletions
diff --git a/media/jni/Android.mk b/media/jni/Android.mk index 8ee0cbd..f19649b 100644 --- a/media/jni/Android.mk +++ b/media/jni/Android.mk @@ -18,6 +18,7 @@ LOCAL_SHARED_LIBRARIES := \ libnativehelper \ libcutils \ libutils \ + libbinder \ libmedia \ libsgl \ libui @@ -26,6 +27,7 @@ LOCAL_STATIC_LIBRARIES := LOCAL_C_INCLUDES += \ external/tremor/Tremor \ + frameworks/base/core/jni \ $(PV_INCLUDES) \ $(JNI_H_INCLUDE) \ $(call include-path-for, corecg graphics) diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp index 6317fe2..2c08c16 100644 --- a/media/jni/android_media_MediaPlayer.cpp +++ b/media/jni/android_media_MediaPlayer.cpp @@ -20,6 +20,7 @@ #include "utils/Log.h" #include <media/mediaplayer.h> +#include <media/MediaPlayerInterface.h> #include <stdio.h> #include <assert.h> #include <limits.h> @@ -30,6 +31,8 @@ #include "JNIHelp.h" #include "android_runtime/AndroidRuntime.h" #include "utils/Errors.h" // for status_t +#include "android_util_Binder.h" +#include <binder/Parcel.h> // ---------------------------------------------------------------------------- @@ -442,6 +445,28 @@ android_media_MediaPlayer_getFrameAt(JNIEnv *env, jobject thiz, jint msec) return NULL; } + +// Sends the request and reply parcels to the media player via the +// binder interface. +static jint +android_media_MediaPlayer_invoke(JNIEnv *env, jobject thiz, + jobject java_request, jobject java_reply) +{ + sp<MediaPlayer> media_player = getMediaPlayer(env, thiz); + if (media_player == NULL ) { + jniThrowException(env, "java/lang/IllegalStateException", NULL); + } + + + Parcel *request = parcelForJavaObject(env, java_request); + Parcel *reply = parcelForJavaObject(env, java_reply); + + const status_t status = media_player->invoke(*request, reply); + // Don't use process_media_player_call which use the async loop to + // report errors, instead returns the status. + return status; +} + static void android_media_MediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this) { @@ -503,6 +528,7 @@ static JNINativeMethod gMethods[] = { {"isLooping", "()Z", (void *)android_media_MediaPlayer_isLooping}, {"setVolume", "(FF)V", (void *)android_media_MediaPlayer_setVolume}, {"getFrameAt", "(I)Landroid/graphics/Bitmap;", (void *)android_media_MediaPlayer_getFrameAt}, + {"native_invoke", "(Landroid/os/Parcel;Landroid/os/Parcel;)I",(void *)android_media_MediaPlayer_invoke}, {"native_setup", "(Ljava/lang/Object;)V", (void *)android_media_MediaPlayer_native_setup}, {"native_finalize", "()V", (void *)android_media_MediaPlayer_native_finalize}, }; diff --git a/media/jni/soundpool/Android.mk b/media/jni/soundpool/Android.mk index 374ddeb..9ff2e24 100644 --- a/media/jni/soundpool/Android.mk +++ b/media/jni/soundpool/Android.mk @@ -9,6 +9,7 @@ LOCAL_SRC_FILES:= \ LOCAL_SHARED_LIBRARIES := \ libcutils \ libutils \ + libbinder \ libandroid_runtime \ libnativehelper \ libmedia |
