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
This commit is contained in:
@@ -318,6 +318,15 @@ android_media_MediaRecorder_prepare(JNIEnv *env, jobject thiz)
|
|||||||
jobject surface = env->GetObjectField(thiz, fields.surface);
|
jobject surface = env->GetObjectField(thiz, fields.surface);
|
||||||
if (surface != NULL) {
|
if (surface != NULL) {
|
||||||
const sp<Surface> native_surface = get_surface(env, surface);
|
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());
|
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.")) {
|
if (process_media_recorder_call(env, mr->setPreviewSurface(native_surface), "java/lang/RuntimeException", "setPreviewSurface failed.")) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user