diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java index bbd739941422c..54675d018038b 100644 --- a/media/java/android/media/MediaMuxer.java +++ b/media/java/android/media/MediaMuxer.java @@ -321,6 +321,21 @@ final public class MediaMuxer { @UnsupportedAppUsage private long mNativeObject; + private String convertMuxerStateCodeToString(int aState) { + switch (aState) { + case MUXER_STATE_UNINITIALIZED: + return "UNINITIALIZED"; + case MUXER_STATE_INITIALIZED: + return "INITIALIZED"; + case MUXER_STATE_STARTED: + return "STARTED"; + case MUXER_STATE_STOPPED: + return "STOPPED"; + default: + return "UNKNOWN"; + } + } + /** * Constructor. * Creates a media muxer that writes to the specified path. @@ -397,7 +412,7 @@ final public class MediaMuxer { nativeSetOrientationHint(mNativeObject, degrees); } else { throw new IllegalStateException("Can't set rotation degrees due" + - " to wrong state."); + " to wrong state(" + convertMuxerStateCodeToString(mState) + ")"); } } @@ -432,7 +447,8 @@ final public class MediaMuxer { if (mState == MUXER_STATE_INITIALIZED && mNativeObject != 0) { nativeSetLocation(mNativeObject, latitudex10000, longitudex10000); } else { - throw new IllegalStateException("Can't set location due to wrong state."); + throw new IllegalStateException("Can't set location due to wrong state(" + + convertMuxerStateCodeToString(mState) + ")"); } } @@ -451,7 +467,8 @@ final public class MediaMuxer { nativeStart(mNativeObject); mState = MUXER_STATE_STARTED; } else { - throw new IllegalStateException("Can't start due to wrong state."); + throw new IllegalStateException("Can't start due to wrong state(" + + convertMuxerStateCodeToString(mState) + ")"); } } @@ -462,10 +479,16 @@ final public class MediaMuxer { */ public void stop() { if (mState == MUXER_STATE_STARTED) { - nativeStop(mNativeObject); - mState = MUXER_STATE_STOPPED; + try { + nativeStop(mNativeObject); + } catch (Exception e) { + throw e; + } finally { + mState = MUXER_STATE_STOPPED; + } } else { - throw new IllegalStateException("Can't stop due to wrong state."); + throw new IllegalStateException("Can't stop due to wrong state(" + + convertMuxerStateCodeToString(mState) + ")"); } } diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp index 0c1e9a2ad7bd2..262ec76da26e5 100644 --- a/media/jni/android_media_MediaMuxer.cpp +++ b/media/jni/android_media_MediaMuxer.cpp @@ -26,15 +26,11 @@ #include #include -#include #include #include #include -#include #include -extern "C" int android_get_application_target_sdk_version(); - namespace android { struct fields_t { @@ -233,31 +229,11 @@ static void android_media_MediaMuxer_stop(JNIEnv *env, jclass /* clazz */, status_t err = muxer->stop(); - if (android_get_application_target_sdk_version() >= __ANDROID_API_R__) { - switch (err) { - case OK: - break; - case ERROR_IO: { - jniThrowException(env, "java/lang/UncheckedIOException", - "Muxer stopped unexpectedly"); - return; - } - case ERROR_MALFORMED: { - jniThrowException(env, "java/io/IOError", - "Failure of reading or writing operation"); - return; - } - default: { - jniThrowException(env, "java/lang/IllegalStateException", - "Failed to stop the muxer"); - return; - } - } - } else { - if (err != OK) { - jniThrowException(env, "java/lang/IllegalStateException", "Failed to stop the muxer"); - return; - } + if (err != OK) { + ALOGE("Error during stop:%d", err); + jniThrowException(env, "java/lang/IllegalStateException", + "Error during stop(), muxer would have stopped already"); + return; } }