MediaCodec: add reset() + documentation fixes
Bug: 12034929
Change-Id: I38f89a2e4c41e0ceb3fdae4522b9c04f6c43a4f1
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index b7294b8..04ff098 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -197,6 +197,10 @@
return mCodec->flush();
}
+status_t JMediaCodec::reset() {
+ return mCodec->reset();
+}
+
status_t JMediaCodec::queueInputBuffer(
size_t index,
size_t offset, size_t size, int64_t timeUs, uint32_t flags,
@@ -854,6 +858,26 @@
throwExceptionAsNecessary(env, err);
}
+static void android_media_MediaCodec_reset(JNIEnv *env, jobject thiz) {
+ ALOGV("android_media_MediaCodec_reset");
+
+ sp<JMediaCodec> codec = getMediaCodec(env, thiz);
+
+ if (codec == NULL) {
+ // should never be here
+ jniThrowException(env, "java/lang/IllegalStateException", NULL);
+ return;
+ }
+
+ status_t err = codec->reset();
+ if (err != OK) {
+ // treat all errors as fatal for now, though resource not available
+ // errors could be treated as transient.
+ err = 0x80000000;
+ }
+ throwExceptionAsNecessary(env, err);
+}
+
static void android_media_MediaCodec_flush(JNIEnv *env, jobject thiz) {
ALOGV("android_media_MediaCodec_flush");
@@ -1398,6 +1422,8 @@
static JNINativeMethod gMethods[] = {
{ "native_release", "()V", (void *)android_media_MediaCodec_release },
+ { "native_reset", "()V", (void *)android_media_MediaCodec_reset },
+
{ "native_setCallback",
"(Landroid/media/MediaCodec$Callback;)V",
(void *)android_media_MediaCodec_native_setCallback },
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index 2e650e3..dbccb0f 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -56,6 +56,7 @@
status_t start();
status_t stop();
+ status_t reset();
status_t flush();