diff options
| author | 2019-12-20 19:54:29 +0000 | |
|---|---|---|
| committer | 2019-12-20 19:54:29 +0000 | |
| commit | a102c75e44a05579a333472cd6c9320946bf9fcc (patch) | |
| tree | 180fb13f4e150327ace8b5251678f0f8194b3c30 | |
| parent | 6f28d5e616dff12a63bf6e9d303016aa630282ff (diff) | |
| parent | 1ec633dbcb4271de7e2bc9068f5640559c3cbbcc (diff) | |
Merge "MediaMuxerJNI:Throw relevant exception on error"
| -rw-r--r-- | media/jni/android_media_MediaMuxer.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp index f0aa4c3f1ab6..0c1e9a2ad7bd 100644 --- a/media/jni/android_media_MediaMuxer.cpp +++ b/media/jni/android_media_MediaMuxer.cpp @@ -26,11 +26,15 @@ #include <unistd.h> #include <fcntl.h> +#include <android/api-level.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> +#include <media/stagefright/MediaErrors.h> #include <media/stagefright/MediaMuxer.h> +extern "C" int android_get_application_target_sdk_version(); + namespace android { struct fields_t { @@ -229,10 +233,31 @@ static void android_media_MediaMuxer_stop(JNIEnv *env, jclass /* clazz */, status_t err = muxer->stop(); - if (err != OK) { - jniThrowException(env, "java/lang/IllegalStateException", - "Failed to stop the muxer"); - return; + 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; + } } } |