summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2015-06-01 21:55:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-01 21:56:35 +0000
commiteb8a51f359e4e1f4187eb14fa5e584979d26768b (patch)
tree915b1f8346ade5a48895d1e0f42183df391ea04c
parentbdd500ecd4ceea7d4e4a06ece08c9b9fd5d8aec5 (diff)
parent07830aa6ba4804880df3cb39f8932aa6b3906a8a (diff)
downloadframeworks_base-eb8a51f359e4e1f4187eb14fa5e584979d26768b.zip
frameworks_base-eb8a51f359e4e1f4187eb14fa5e584979d26768b.tar.gz
frameworks_base-eb8a51f359e4e1f4187eb14fa5e584979d26768b.tar.bz2
Merge "MediaPlayer: trigger onError instead of exception on stale native notifications" into mnc-dev
-rw-r--r--media/java/android/media/MediaPlayer.java48
-rw-r--r--media/jni/android_media_MediaPlayer.cpp2
2 files changed, 18 insertions, 32 deletions
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 668f80a..13714d3 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -77,7 +77,6 @@ import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.Vector;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.lang.ref.WeakReference;
/**
@@ -624,9 +623,6 @@ public class MediaPlayer implements SubtitleController.Listener
private int mUsage = -1;
private boolean mBypassInterruptionPolicy;
- // use AtomicBoolean instead of boolean so we can use the same member both as a flag and a lock.
- private AtomicBoolean mPreparing = new AtomicBoolean();
-
/**
* Default constructor. Consider using one of the create() methods for
* synchronously instantiating a MediaPlayer from a Uri or resource.
@@ -1166,10 +1162,6 @@ public class MediaPlayer implements SubtitleController.Listener
* @throws IllegalStateException if it is called in an invalid state
*/
public void prepare() throws IOException, IllegalStateException {
- // The synchronous version of prepare also recieves a MEDIA_PREPARED message.
- synchronized (mPreparing) {
- mPreparing.set(true);
- }
_prepare();
scanInternalSubtitleTracks();
}
@@ -1186,14 +1178,7 @@ public class MediaPlayer implements SubtitleController.Listener
*
* @throws IllegalStateException if it is called in an invalid state
*/
- public void prepareAsync() throws IllegalStateException {
- synchronized (mPreparing) {
- mPreparing.set(true);
- }
- _prepareAsync();
- }
-
- private native void _prepareAsync() throws IllegalStateException;
+ public native void prepareAsync() throws IllegalStateException;
/**
* Starts or resumes playback. If playback had previously been paused,
@@ -1244,9 +1229,6 @@ public class MediaPlayer implements SubtitleController.Listener
* initialized.
*/
public void stop() throws IllegalStateException {
- synchronized (mPreparing) {
- mPreparing.set(false);
- }
stayAwake(false);
_stop();
}
@@ -1676,9 +1658,6 @@ public class MediaPlayer implements SubtitleController.Listener
* at the same time.
*/
public void release() {
- synchronized (mPreparing) {
- mPreparing.set(false);
- }
stayAwake(false);
updateSurfaceScreenOn();
mOnPreparedListener = null;
@@ -1705,9 +1684,6 @@ public class MediaPlayer implements SubtitleController.Listener
* data source and calling prepare().
*/
public void reset() {
- synchronized (mPreparing) {
- mPreparing.set(false);
- }
mSelectedSubtitleTrackIndex = -1;
synchronized(mOpenSubtitleSources) {
for (final InputStream is: mOpenSubtitleSources) {
@@ -2828,11 +2804,15 @@ public class MediaPlayer implements SubtitleController.Listener
}
switch(msg.what) {
case MEDIA_PREPARED:
- synchronized (mPreparing) {
- if (mPreparing.get()) {
- scanInternalSubtitleTracks();
- mPreparing.set(false);
- }
+ try {
+ scanInternalSubtitleTracks();
+ } catch (RuntimeException e) {
+ // send error message instead of crashing;
+ // send error message instead of inlining a call to onError
+ // to avoid code duplication.
+ Message msg2 = obtainMessage(
+ MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, MEDIA_ERROR_UNSUPPORTED, null);
+ sendMessage(msg2);
}
if (mOnPreparedListener != null)
mOnPreparedListener.onPrepared(mMediaPlayer);
@@ -2908,7 +2888,13 @@ public class MediaPlayer implements SubtitleController.Listener
Log.i(TAG, "Info (" + msg.arg1 + "," + msg.arg2 + ")");
break;
case MEDIA_INFO_METADATA_UPDATE:
- scanInternalSubtitleTracks();
+ try {
+ scanInternalSubtitleTracks();
+ } catch (RuntimeException e) {
+ Message msg2 = obtainMessage(
+ MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, MEDIA_ERROR_UNSUPPORTED, null);
+ sendMessage(msg2);
+ }
// fall through
case MEDIA_INFO_EXTERNAL_METADATA_UPDATE:
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 9c67278..d8041f4 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -1045,7 +1045,7 @@ static JNINativeMethod gMethods[] = {
{"_setDataSource", "(Landroid/media/MediaDataSource;)V",(void *)android_media_MediaPlayer_setDataSourceCallback },
{"_setVideoSurface", "(Landroid/view/Surface;)V", (void *)android_media_MediaPlayer_setVideoSurface},
{"_prepare", "()V", (void *)android_media_MediaPlayer_prepare},
- {"_prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync},
+ {"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync},
{"_start", "()V", (void *)android_media_MediaPlayer_start},
{"_stop", "()V", (void *)android_media_MediaPlayer_stop},
{"getVideoWidth", "()I", (void *)android_media_MediaPlayer_getVideoWidth},