summaryrefslogtreecommitdiffstats
path: root/media/jni
diff options
context:
space:
mode:
authorChien-Yu Chen <cychen@google.com>2015-07-07 22:16:08 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-07-07 22:16:10 +0000
commit69421363c6a81a788b963d2f4cb5fdeaa8bd4200 (patch)
treec8d0cf2f82e0a07730a5966fda33474a2d059176 /media/jni
parent7a64e9769f8fe5a400320de9ebd025b0b7af045d (diff)
parente0ee63046ad062040aafc977585fb461a2acf666 (diff)
downloadframeworks_base-69421363c6a81a788b963d2f4cb5fdeaa8bd4200.zip
frameworks_base-69421363c6a81a788b963d2f4cb5fdeaa8bd4200.tar.gz
frameworks_base-69421363c6a81a788b963d2f4cb5fdeaa8bd4200.tar.bz2
Merge "ImageWriter: Exception when Surface is abandoned" into mnc-dev
Diffstat (limited to 'media/jni')
-rw-r--r--media/jni/android_media_ImageWriter.cpp44
1 files changed, 38 insertions, 6 deletions
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp
index ba7634c..f92a8ef 100644
--- a/media/jni/android_media_ImageWriter.cpp
+++ b/media/jni/android_media_ImageWriter.cpp
@@ -338,9 +338,16 @@ static void ImageWriter_dequeueImage(JNIEnv* env, jobject thiz, jlong nativeCtx,
int fenceFd = -1;
status_t res = anw->dequeueBuffer(anw.get(), &anb, &fenceFd);
if (res != OK) {
- // TODO: handle different error cases here.
ALOGE("%s: Dequeue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res);
- jniThrowRuntimeException(env, "dequeue buffer failed");
+ switch (res) {
+ case NO_INIT:
+ jniThrowException(env, "java/lang/IllegalStateException",
+ "Surface has been abandoned");
+ break;
+ default:
+ // TODO: handle other error cases here.
+ jniThrowRuntimeException(env, "dequeue buffer failed");
+ }
return;
}
// New GraphicBuffer object doesn't own the handle, thus the native buffer
@@ -468,7 +475,16 @@ static void ImageWriter_queueImage(JNIEnv* env, jobject thiz, jlong nativeCtx, j
// Finally, queue input buffer
res = anw->queueBuffer(anw.get(), buffer, fenceFd);
if (res != OK) {
- jniThrowRuntimeException(env, "Queue input buffer failed");
+ ALOGE("%s: Queue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res);
+ switch (res) {
+ case NO_INIT:
+ jniThrowException(env, "java/lang/IllegalStateException",
+ "Surface has been abandoned");
+ break;
+ default:
+ // TODO: handle other error cases here.
+ jniThrowRuntimeException(env, "Queue input buffer failed");
+ }
return;
}
@@ -514,9 +530,16 @@ static jint ImageWriter_attachAndQueueImage(JNIEnv* env, jobject thiz, jlong nat
// Step 1. Attach Image
res = surface->attachBuffer(opaqueBuffer->mGraphicBuffer.get());
if (res != OK) {
- // TODO: handle different error case separately.
ALOGE("Attach image failed: %s (%d)", strerror(-res), res);
- jniThrowRuntimeException(env, "nativeAttachImage failed!!!");
+ switch (res) {
+ case NO_INIT:
+ jniThrowException(env, "java/lang/IllegalStateException",
+ "Surface has been abandoned");
+ break;
+ default:
+ // TODO: handle other error cases here.
+ jniThrowRuntimeException(env, "nativeAttachImage failed!!!");
+ }
return res;
}
sp < ANativeWindow > anw = surface;
@@ -545,7 +568,16 @@ static jint ImageWriter_attachAndQueueImage(JNIEnv* env, jobject thiz, jlong nat
res = anw->queueBuffer(anw.get(), opaqueBuffer->mGraphicBuffer.get(), /*fenceFd*/
-1);
if (res != OK) {
- jniThrowRuntimeException(env, "Queue input buffer failed");
+ ALOGE("%s: Queue buffer failed: %s (%d)", __FUNCTION__, strerror(-res), res);
+ switch (res) {
+ case NO_INIT:
+ jniThrowException(env, "java/lang/IllegalStateException",
+ "Surface has been abandoned");
+ break;
+ default:
+ // TODO: handle other error cases here.
+ jniThrowRuntimeException(env, "Queue input buffer failed");
+ }
return res;
}