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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user