summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gopalakrishnan Nallasamy <gokrishnan@google.com> 2019-12-09 20:54:42 -0800
committer Gopalakrishnan Nallasamy <gokrishnan@google.com> 2019-12-19 21:58:12 -0800
commit1ec633dbcb4271de7e2bc9068f5640559c3cbbcc (patch)
tree3a88b743d3b717d6fedf45c6f115c680ec70d04d
parent0d52f4202ca7ec1f06fcd5b0b3661130aae29332 (diff)
MediaMuxerJNI:Throw relevant exception on error
MediaMuxerJNI throws more relevant Exception when native MediaMuxer reports ERROR_IO or ERROR_MALFORMED. Bug: 135685864 Test: 1) atest android.media.cts.MediaMuxerTest 2) Filled up sdcard memory on phone and tried to compose large file using MediaMuxer. Writing was stopped when ::write failed because sdcard memory ran out and corresponding exception thrown in test app.( Pre-allocation was disabled). 3) Same as step 2 with pre-allocation enabled, expected error was reported and corresponding exception was thrown. Change-Id: I07d2872585b5d0a328512c3a6eb5d73b8e4540b3
-rw-r--r--media/jni/android_media_MediaMuxer.cpp33
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;
+ }
}
}