Loading media/java/android/media/MediaPlayer2Impl.java +29 −18 Original line number Diff line number Diff line Loading @@ -1212,6 +1212,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } else if (scheme != null) { // handle non-file sources nativeSetDataSource( srcId, Media2HTTPService.createHTTPService(path, cookies), path, keys, Loading @@ -1231,7 +1232,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } private native void nativeSetDataSource( Media2HTTPService httpService, String path, String[] keys, String[] values) long srcId, Media2HTTPService httpService, String path, String[] keys, String[] values) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException; /** Loading @@ -1245,10 +1246,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { */ private void setDataSourcePriv(long srcId, FileDescriptor fd, long offset, long length) throws IOException { _setDataSource(fd, offset, length); _setDataSource(srcId, fd, offset, length); } private native void _setDataSource(FileDescriptor fd, long offset, long length) private native void _setDataSource(long srcId, FileDescriptor fd, long offset, long length) throws IOException; /** Loading @@ -1256,10 +1257,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { * @throws IllegalArgumentException if dataSource is not a valid Media2DataSource */ private void setDataSourcePriv(long srcId, Media2DataSource dataSource) { _setDataSource(dataSource); _setDataSource(srcId, dataSource); } private native void _setDataSource(Media2DataSource dataSource); private native void _setDataSource(long srcId, Media2DataSource dataSource); /** * Prepares the player for playback, synchronously. Loading Loading @@ -3073,6 +3074,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { @Override public void handleMessage(Message msg) { handleMessage(msg, 0); } public void handleMessage(Message msg, long srcId) { if (mMediaPlayer.mNativeContext == 0) { Log.w(TAG, "mediaplayer2 went away with unhandled events"); return; Loading @@ -3095,7 +3100,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_PREPARED, 0)); mMediaPlayer, srcId, MEDIA_INFO_PREPARED, 0)); } } return; Loading Loading @@ -3133,7 +3138,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); mMediaPlayer, srcId, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); } } stayAwake(false); Loading Loading @@ -3163,7 +3168,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onBufferingUpdate( mMediaPlayer, 0, percent)); mMediaPlayer, srcId, percent)); } } return; Loading @@ -3172,7 +3177,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_COMPLETE_CALL_SEEK, 0)); mMediaPlayer, srcId, MEDIA_INFO_COMPLETE_CALL_SEEK, 0)); } } // fall through Loading @@ -3192,7 +3197,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onVideoSizeChanged( mMediaPlayer, 0, width, height)); mMediaPlayer, srcId, width, height)); } } return; Loading @@ -3202,9 +3207,9 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onError( mMediaPlayer, 0, what, extra)); mMediaPlayer, srcId, what, extra)); cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); mMediaPlayer, srcId, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); } } stayAwake(false); Loading Loading @@ -3247,7 +3252,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, what, extra)); mMediaPlayer, srcId, what, extra)); } } // No real default action so far. Loading @@ -3272,7 +3277,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onTimedText(mMediaPlayer, 0, text)); cb.first.execute(() -> cb.second.onTimedText(mMediaPlayer, srcId, text)); } } return; Loading Loading @@ -3303,7 +3308,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onTimedMetaDataAvailable( mMediaPlayer, 0, data)); mMediaPlayer, srcId, data)); } } return; Loading Loading @@ -3335,7 +3340,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { * code is safe from the object disappearing from underneath it. (This is * the cookie passed to native_setup().) */ private static void postEventFromNative(Object mediaplayer2_ref, private static void postEventFromNative(Object mediaplayer2_ref, long srcId, int what, int arg1, int arg2, Object obj) { final MediaPlayer2Impl mp = (MediaPlayer2Impl)((WeakReference)mediaplayer2_ref).get(); Loading Loading @@ -3388,7 +3393,13 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { if (mp.mEventHandler != null) { Message m = mp.mEventHandler.obtainMessage(what, arg1, arg2, obj); mp.mEventHandler.sendMessage(m); mp.mEventHandler.post(new Runnable() { @Override public void run() { mp.mEventHandler.handleMessage(m, srcId); } }); } } Loading Loading @@ -4490,7 +4501,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { // no need for log(N) search performance private MediaTimeProvider.OnMediaTimeListener mListeners[]; private long mTimes[]; private Handler mEventHandler; private EventHandler mEventHandler; private boolean mRefresh = false; private boolean mPausing = false; private boolean mSeeking = false; Loading media/jni/android_media_MediaPlayer2.cpp +23 −15 Original line number Diff line number Diff line Loading @@ -154,7 +154,8 @@ class JNIMediaPlayer2Listener: public MediaPlayer2Listener public: JNIMediaPlayer2Listener(JNIEnv* env, jobject thiz, jobject weak_thiz); ~JNIMediaPlayer2Listener(); virtual void notify(int msg, int ext1, int ext2, const Parcel *obj = NULL); virtual void notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj = NULL) override; private: JNIMediaPlayer2Listener(); jclass mClass; // Reference to MediaPlayer2 class Loading Loading @@ -187,7 +188,7 @@ JNIMediaPlayer2Listener::~JNIMediaPlayer2Listener() env->DeleteGlobalRef(mClass); } void JNIMediaPlayer2Listener::notify(int msg, int ext1, int ext2, const Parcel *obj) void JNIMediaPlayer2Listener::notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj) { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (obj && obj->dataSize() > 0) { Loading @@ -196,12 +197,12 @@ void JNIMediaPlayer2Listener::notify(int msg, int ext1, int ext2, const Parcel * Parcel* nativeParcel = parcelForJavaObject(env, jParcel); nativeParcel->setData(obj->data(), obj->dataSize()); env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, jParcel); srcId, msg, ext1, ext2, jParcel); env->DeleteLocalRef(jParcel); } } else { env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, NULL); srcId, msg, ext1, ext2, NULL); } if (env->ExceptionCheck()) { ALOGW("An exception occurred while notifying an event."); Loading Loading @@ -243,7 +244,11 @@ static void process_media_player_call( if (exception == NULL) { // Don't throw exception. Instead, send an event. if (opStatus != (status_t) OK) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); if (mp != 0) mp->notify(MEDIA2_ERROR, opStatus, 0); if (mp != 0) { int64_t srcId = 0; mp->getSrcId(&srcId); mp->notify(srcId, MEDIA2_ERROR, opStatus, 0); } } } else { // Throw exception! if ( opStatus == (status_t) INVALID_OPERATION ) { Loading @@ -268,7 +273,7 @@ static void process_media_player_call( static void android_media_MediaPlayer2_setDataSourceAndHeaders( JNIEnv *env, jobject thiz, jobject httpServiceObj, jstring path, JNIEnv *env, jobject thiz, jlong srcId, jobject httpServiceObj, jstring path, jobjectArray keys, jobjectArray values) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); Loading @@ -286,7 +291,7 @@ android_media_MediaPlayer2_setDataSourceAndHeaders( if (tmp == NULL) { // Out of memory return; } ALOGV("setDataSourceAndHeaders: path %s", tmp); ALOGV("setDataSourceAndHeaders: path %s, srcId %lld", tmp, (long long)srcId); if (strncmp(tmp, "content://", 10) == 0) { ALOGE("setDataSourceAndHeaders: content scheme is not supported in native code"); Loading @@ -296,6 +301,7 @@ android_media_MediaPlayer2_setDataSourceAndHeaders( } sp<DataSourceDesc> dsd = new DataSourceDesc(); dsd->mId = srcId; dsd->mType = DataSourceDesc::TYPE_URL; dsd->mUrl = tmp; Loading @@ -321,7 +327,7 @@ android_media_MediaPlayer2_setDataSourceAndHeaders( static void android_media_MediaPlayer2_setDataSourceFD( JNIEnv *env, jobject thiz, jobject fileDescriptor, jlong offset, jlong length) JNIEnv *env, jobject thiz, jlong srcId, jobject fileDescriptor, jlong offset, jlong length) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { Loading @@ -334,8 +340,8 @@ android_media_MediaPlayer2_setDataSourceFD( return; } int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); ALOGV("setDataSourceFD: fd=%d (%s), offset=%lld, length=%lld", fd, nameForFd(fd).c_str(), (long long)offset, (long long)length); ALOGV("setDataSourceFD: srcId=%lld, fd=%d (%s), offset=%lld, length=%lld", (long long)srcId, fd, nameForFd(fd).c_str(), (long long)offset, (long long)length); struct stat sb; int ret = fstat(fd, &sb); Loading Loading @@ -363,6 +369,7 @@ android_media_MediaPlayer2_setDataSourceFD( } sp<DataSourceDesc> dsd = new DataSourceDesc(); dsd->mId = srcId; dsd->mType = DataSourceDesc::TYPE_FD; dsd->mFD = fd; dsd->mFDOffset = offset; Loading @@ -373,7 +380,7 @@ android_media_MediaPlayer2_setDataSourceFD( static void android_media_MediaPlayer2_setDataSourceCallback( JNIEnv *env, jobject thiz, jobject dataSource) JNIEnv *env, jobject thiz, jlong srcId, jobject dataSource) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { Loading @@ -387,6 +394,7 @@ android_media_MediaPlayer2_setDataSourceCallback( } sp<DataSource> callbackDataSource = new JMedia2DataSource(env, dataSource); sp<DataSourceDesc> dsd = new DataSourceDesc(); dsd->mId = srcId; dsd->mType = DataSourceDesc::TYPE_CALLBACK; dsd->mCallbackSource = callbackDataSource; process_media_player_call(env, thiz, mp->setDataSource(dsd), Loading Loading @@ -1012,7 +1020,7 @@ android_media_MediaPlayer2_native_init(JNIEnv *env) } fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative", "(Ljava/lang/Object;IIILjava/lang/Object;)V"); "(Ljava/lang/Object;JIIILjava/lang/Object;)V"); if (fields.post_event == NULL) { return; } Loading Loading @@ -1382,13 +1390,13 @@ static void android_media_MediaPlayer2_enableDeviceCallback( static const JNINativeMethod gMethods[] = { { "nativeSetDataSource", "(Landroid/media/Media2HTTPService;Ljava/lang/String;[Ljava/lang/String;" "(JLandroid/media/Media2HTTPService;Ljava/lang/String;[Ljava/lang/String;" "[Ljava/lang/String;)V", (void *)android_media_MediaPlayer2_setDataSourceAndHeaders }, {"_setDataSource", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer2_setDataSourceFD}, {"_setDataSource", "(Landroid/media/Media2DataSource;)V",(void *)android_media_MediaPlayer2_setDataSourceCallback }, {"_setDataSource", "(JLjava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer2_setDataSourceFD}, {"_setDataSource", "(JLandroid/media/Media2DataSource;)V",(void *)android_media_MediaPlayer2_setDataSourceCallback }, {"_setVideoSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaPlayer2_setVideoSurface}, {"getBufferingParams", "()Landroid/media/BufferingParams;", (void *)android_media_MediaPlayer2_getBufferingParams}, {"setBufferingParams", "(Landroid/media/BufferingParams;)V", (void *)android_media_MediaPlayer2_setBufferingParams}, Loading Loading
media/java/android/media/MediaPlayer2Impl.java +29 −18 Original line number Diff line number Diff line Loading @@ -1212,6 +1212,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } else if (scheme != null) { // handle non-file sources nativeSetDataSource( srcId, Media2HTTPService.createHTTPService(path, cookies), path, keys, Loading @@ -1231,7 +1232,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { } private native void nativeSetDataSource( Media2HTTPService httpService, String path, String[] keys, String[] values) long srcId, Media2HTTPService httpService, String path, String[] keys, String[] values) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException; /** Loading @@ -1245,10 +1246,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { */ private void setDataSourcePriv(long srcId, FileDescriptor fd, long offset, long length) throws IOException { _setDataSource(fd, offset, length); _setDataSource(srcId, fd, offset, length); } private native void _setDataSource(FileDescriptor fd, long offset, long length) private native void _setDataSource(long srcId, FileDescriptor fd, long offset, long length) throws IOException; /** Loading @@ -1256,10 +1257,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { * @throws IllegalArgumentException if dataSource is not a valid Media2DataSource */ private void setDataSourcePriv(long srcId, Media2DataSource dataSource) { _setDataSource(dataSource); _setDataSource(srcId, dataSource); } private native void _setDataSource(Media2DataSource dataSource); private native void _setDataSource(long srcId, Media2DataSource dataSource); /** * Prepares the player for playback, synchronously. Loading Loading @@ -3073,6 +3074,10 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { @Override public void handleMessage(Message msg) { handleMessage(msg, 0); } public void handleMessage(Message msg, long srcId) { if (mMediaPlayer.mNativeContext == 0) { Log.w(TAG, "mediaplayer2 went away with unhandled events"); return; Loading @@ -3095,7 +3100,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_PREPARED, 0)); mMediaPlayer, srcId, MEDIA_INFO_PREPARED, 0)); } } return; Loading Loading @@ -3133,7 +3138,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); mMediaPlayer, srcId, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); } } stayAwake(false); Loading Loading @@ -3163,7 +3168,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onBufferingUpdate( mMediaPlayer, 0, percent)); mMediaPlayer, srcId, percent)); } } return; Loading @@ -3172,7 +3177,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_COMPLETE_CALL_SEEK, 0)); mMediaPlayer, srcId, MEDIA_INFO_COMPLETE_CALL_SEEK, 0)); } } // fall through Loading @@ -3192,7 +3197,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onVideoSizeChanged( mMediaPlayer, 0, width, height)); mMediaPlayer, srcId, width, height)); } } return; Loading @@ -3202,9 +3207,9 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onError( mMediaPlayer, 0, what, extra)); mMediaPlayer, srcId, what, extra)); cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); mMediaPlayer, srcId, MEDIA_INFO_PLAYBACK_COMPLETE, 0)); } } stayAwake(false); Loading Loading @@ -3247,7 +3252,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onInfo( mMediaPlayer, 0, what, extra)); mMediaPlayer, srcId, what, extra)); } } // No real default action so far. Loading @@ -3272,7 +3277,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onTimedText(mMediaPlayer, 0, text)); cb.first.execute(() -> cb.second.onTimedText(mMediaPlayer, srcId, text)); } } return; Loading Loading @@ -3303,7 +3308,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { synchronized (mEventCbLock) { for (Pair<Executor, EventCallback> cb : mEventCallbackRecords) { cb.first.execute(() -> cb.second.onTimedMetaDataAvailable( mMediaPlayer, 0, data)); mMediaPlayer, srcId, data)); } } return; Loading Loading @@ -3335,7 +3340,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { * code is safe from the object disappearing from underneath it. (This is * the cookie passed to native_setup().) */ private static void postEventFromNative(Object mediaplayer2_ref, private static void postEventFromNative(Object mediaplayer2_ref, long srcId, int what, int arg1, int arg2, Object obj) { final MediaPlayer2Impl mp = (MediaPlayer2Impl)((WeakReference)mediaplayer2_ref).get(); Loading Loading @@ -3388,7 +3393,13 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { if (mp.mEventHandler != null) { Message m = mp.mEventHandler.obtainMessage(what, arg1, arg2, obj); mp.mEventHandler.sendMessage(m); mp.mEventHandler.post(new Runnable() { @Override public void run() { mp.mEventHandler.handleMessage(m, srcId); } }); } } Loading Loading @@ -4490,7 +4501,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { // no need for log(N) search performance private MediaTimeProvider.OnMediaTimeListener mListeners[]; private long mTimes[]; private Handler mEventHandler; private EventHandler mEventHandler; private boolean mRefresh = false; private boolean mPausing = false; private boolean mSeeking = false; Loading
media/jni/android_media_MediaPlayer2.cpp +23 −15 Original line number Diff line number Diff line Loading @@ -154,7 +154,8 @@ class JNIMediaPlayer2Listener: public MediaPlayer2Listener public: JNIMediaPlayer2Listener(JNIEnv* env, jobject thiz, jobject weak_thiz); ~JNIMediaPlayer2Listener(); virtual void notify(int msg, int ext1, int ext2, const Parcel *obj = NULL); virtual void notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj = NULL) override; private: JNIMediaPlayer2Listener(); jclass mClass; // Reference to MediaPlayer2 class Loading Loading @@ -187,7 +188,7 @@ JNIMediaPlayer2Listener::~JNIMediaPlayer2Listener() env->DeleteGlobalRef(mClass); } void JNIMediaPlayer2Listener::notify(int msg, int ext1, int ext2, const Parcel *obj) void JNIMediaPlayer2Listener::notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj) { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (obj && obj->dataSize() > 0) { Loading @@ -196,12 +197,12 @@ void JNIMediaPlayer2Listener::notify(int msg, int ext1, int ext2, const Parcel * Parcel* nativeParcel = parcelForJavaObject(env, jParcel); nativeParcel->setData(obj->data(), obj->dataSize()); env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, jParcel); srcId, msg, ext1, ext2, jParcel); env->DeleteLocalRef(jParcel); } } else { env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, NULL); srcId, msg, ext1, ext2, NULL); } if (env->ExceptionCheck()) { ALOGW("An exception occurred while notifying an event."); Loading Loading @@ -243,7 +244,11 @@ static void process_media_player_call( if (exception == NULL) { // Don't throw exception. Instead, send an event. if (opStatus != (status_t) OK) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); if (mp != 0) mp->notify(MEDIA2_ERROR, opStatus, 0); if (mp != 0) { int64_t srcId = 0; mp->getSrcId(&srcId); mp->notify(srcId, MEDIA2_ERROR, opStatus, 0); } } } else { // Throw exception! if ( opStatus == (status_t) INVALID_OPERATION ) { Loading @@ -268,7 +273,7 @@ static void process_media_player_call( static void android_media_MediaPlayer2_setDataSourceAndHeaders( JNIEnv *env, jobject thiz, jobject httpServiceObj, jstring path, JNIEnv *env, jobject thiz, jlong srcId, jobject httpServiceObj, jstring path, jobjectArray keys, jobjectArray values) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); Loading @@ -286,7 +291,7 @@ android_media_MediaPlayer2_setDataSourceAndHeaders( if (tmp == NULL) { // Out of memory return; } ALOGV("setDataSourceAndHeaders: path %s", tmp); ALOGV("setDataSourceAndHeaders: path %s, srcId %lld", tmp, (long long)srcId); if (strncmp(tmp, "content://", 10) == 0) { ALOGE("setDataSourceAndHeaders: content scheme is not supported in native code"); Loading @@ -296,6 +301,7 @@ android_media_MediaPlayer2_setDataSourceAndHeaders( } sp<DataSourceDesc> dsd = new DataSourceDesc(); dsd->mId = srcId; dsd->mType = DataSourceDesc::TYPE_URL; dsd->mUrl = tmp; Loading @@ -321,7 +327,7 @@ android_media_MediaPlayer2_setDataSourceAndHeaders( static void android_media_MediaPlayer2_setDataSourceFD( JNIEnv *env, jobject thiz, jobject fileDescriptor, jlong offset, jlong length) JNIEnv *env, jobject thiz, jlong srcId, jobject fileDescriptor, jlong offset, jlong length) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { Loading @@ -334,8 +340,8 @@ android_media_MediaPlayer2_setDataSourceFD( return; } int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); ALOGV("setDataSourceFD: fd=%d (%s), offset=%lld, length=%lld", fd, nameForFd(fd).c_str(), (long long)offset, (long long)length); ALOGV("setDataSourceFD: srcId=%lld, fd=%d (%s), offset=%lld, length=%lld", (long long)srcId, fd, nameForFd(fd).c_str(), (long long)offset, (long long)length); struct stat sb; int ret = fstat(fd, &sb); Loading Loading @@ -363,6 +369,7 @@ android_media_MediaPlayer2_setDataSourceFD( } sp<DataSourceDesc> dsd = new DataSourceDesc(); dsd->mId = srcId; dsd->mType = DataSourceDesc::TYPE_FD; dsd->mFD = fd; dsd->mFDOffset = offset; Loading @@ -373,7 +380,7 @@ android_media_MediaPlayer2_setDataSourceFD( static void android_media_MediaPlayer2_setDataSourceCallback( JNIEnv *env, jobject thiz, jobject dataSource) JNIEnv *env, jobject thiz, jlong srcId, jobject dataSource) { sp<MediaPlayer2> mp = getMediaPlayer(env, thiz); if (mp == NULL ) { Loading @@ -387,6 +394,7 @@ android_media_MediaPlayer2_setDataSourceCallback( } sp<DataSource> callbackDataSource = new JMedia2DataSource(env, dataSource); sp<DataSourceDesc> dsd = new DataSourceDesc(); dsd->mId = srcId; dsd->mType = DataSourceDesc::TYPE_CALLBACK; dsd->mCallbackSource = callbackDataSource; process_media_player_call(env, thiz, mp->setDataSource(dsd), Loading Loading @@ -1012,7 +1020,7 @@ android_media_MediaPlayer2_native_init(JNIEnv *env) } fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative", "(Ljava/lang/Object;IIILjava/lang/Object;)V"); "(Ljava/lang/Object;JIIILjava/lang/Object;)V"); if (fields.post_event == NULL) { return; } Loading Loading @@ -1382,13 +1390,13 @@ static void android_media_MediaPlayer2_enableDeviceCallback( static const JNINativeMethod gMethods[] = { { "nativeSetDataSource", "(Landroid/media/Media2HTTPService;Ljava/lang/String;[Ljava/lang/String;" "(JLandroid/media/Media2HTTPService;Ljava/lang/String;[Ljava/lang/String;" "[Ljava/lang/String;)V", (void *)android_media_MediaPlayer2_setDataSourceAndHeaders }, {"_setDataSource", "(Ljava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer2_setDataSourceFD}, {"_setDataSource", "(Landroid/media/Media2DataSource;)V",(void *)android_media_MediaPlayer2_setDataSourceCallback }, {"_setDataSource", "(JLjava/io/FileDescriptor;JJ)V", (void *)android_media_MediaPlayer2_setDataSourceFD}, {"_setDataSource", "(JLandroid/media/Media2DataSource;)V",(void *)android_media_MediaPlayer2_setDataSourceCallback }, {"_setVideoSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaPlayer2_setVideoSurface}, {"getBufferingParams", "()Landroid/media/BufferingParams;", (void *)android_media_MediaPlayer2_getBufferingParams}, {"setBufferingParams", "(Landroid/media/BufferingParams;)V", (void *)android_media_MediaPlayer2_setBufferingParams}, Loading