diff options
| author | James Dong <jdong@google.com> | 2010-08-12 13:16:56 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-12 13:16:56 -0700 |
| commit | b408f5490b8591a2799d6b1db91e29e4b203d2bf (patch) | |
| tree | ebf1fdbc9f61340820effdd8144fcc52340fb091 | |
| parent | 3bf8c3427f4c728bb88e5e266b85c96e3e727203 (diff) | |
| parent | d790c6485a388a3e8045dbd18b903b20a7dcf0d9 (diff) | |
| download | frameworks_base-b408f5490b8591a2799d6b1db91e29e4b203d2bf.zip frameworks_base-b408f5490b8591a2799d6b1db91e29e4b203d2bf.tar.gz frameworks_base-b408f5490b8591a2799d6b1db91e29e4b203d2bf.tar.bz2 | |
am d790c648: Add lost preview surface detection in the JNI layer Throws an IOException if this happens rather than crashes
Merge commit 'd790c6485a388a3e8045dbd18b903b20a7dcf0d9' into gingerbread-plus-aosp
* commit 'd790c6485a388a3e8045dbd18b903b20a7dcf0d9':
Add lost preview surface detection in the JNI layer
| -rw-r--r-- | media/jni/android_media_MediaRecorder.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp index c113ffe..f69b8ad 100644 --- a/media/jni/android_media_MediaRecorder.cpp +++ b/media/jni/android_media_MediaRecorder.cpp @@ -318,6 +318,15 @@ android_media_MediaRecorder_prepare(JNIEnv *env, jobject thiz) jobject surface = env->GetObjectField(thiz, fields.surface); if (surface != NULL) { const sp<Surface> native_surface = get_surface(env, surface); + + // The application may misbehave and + // the preview surface becomes unavailable + if (native_surface.get() == 0) { + LOGE("Application lost the surface"); + jniThrowException(env, "java/io/IOException", "invalid preview surface"); + return; + } + LOGI("prepare: surface=%p (identity=%d)", native_surface.get(), native_surface->getIdentity()); if (process_media_recorder_call(env, mr->setPreviewSurface(native_surface), "java/lang/RuntimeException", "setPreviewSurface failed.")) { return; |
