diff options
| -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; +        }      }  }  |