从camera预览图进入gallery后,删除所有照片自动返回camera时相机错误退出

从camera预览图进入gallery后,删除所有照片自动返回camera时相机异常退出
小弟在研究android源码时,从camera左下角拍照预览图进入gallery后,删除所有照片自动返回camera时相机会异常退出。
log如下:
E/AndroidRuntime( 6365): java.lang.RuntimeException: java.io.IOException: setPreviewTexture failed

E/AndroidRuntime( 6365):  at com.android.camera.AndroidCameraManagerImpl$CameraHandler.handleMessage(AndroidCameraManagerImpl.java:252)

E/AndroidRuntime( 6365):  at android.os.Handler.dispatchMessage(Handler.java:102)

E/AndroidRuntime( 6365):  at android.os.Looper.loop(Looper.java:135)

E/AndroidRuntime( 6365):  at android.os.HandlerThread.run(HandlerThread.java:61)

E/AndroidRuntime( 6365): Caused by: java.io.IOException: setPreviewTexture failed

E/AndroidRuntime( 6365):  at android.hardware.Camera.setPreviewSurface(Native Method)

E/AndroidRuntime( 6365):  at android.hardware.Camera.setPreviewDisplay(Camera.java:654)

E/AndroidRuntime( 6365):  at com.android.camera.AndroidCameraManagerImpl$CameraHandler.handleMessage(AndroidCameraManagerImpl.java:250)

E/AndroidRuntime( 6365):  ... 3 more
跟踪log走到jni如下位置,
static void android_hardware_Camera_setPreviewSurface(JNIEnv *env, jobject thiz, jobject jSurface)
{
    ALOGV("setPreviewSurface");
    sp<Camera> camera = get_native_camera(env, thiz, NULL);
    if (camera == 0) return;

    sp<IGraphicBufferProducer> gbp;
    sp<Surface> surface;
    if (jSurface) {
        surface = android_view_Surface_getSurface(env, jSurface);
        if (surface != NULL) {
            gbp = surface->getIGraphicBufferProducer();
        }
    }

    if (camera->setPreviewTarget(gbp) != NO_ERROR) {
        jniThrowException(env, "java/io/IOException", "setPreviewTexture failed");
    }
}

static void android_hardware_Camera_setPreviewTexture(JNIEnv *env,
        jobject thiz, jobject jSurfaceTexture)
{
    ALOGV("setPreviewTexture");
    sp<Camera> camera = get_native_camera(env, thiz, NULL);
    if (camera == 0) return;

    sp<IGraphicBufferProducer> producer = NULL;
    if (jSurfaceTexture != NULL) {
        producer = SurfaceTexture_getProducer(env, jSurfaceTexture);
        if (producer == NULL) {
            jniThrowException(env, "java/lang/IllegalArgumentException",
                    "SurfaceTexture already released in setPreviewTexture");
            return;
        }

    }

    if (camera->setPreviewTarget(producer) != NO_ERROR) {
        jniThrowException(env, "java/io/IOException",
                "setPreviewTexture failed");
    }
}
后面就不是很懂了,请教各位是否有遇到过相关问题,可否指导一下,十分感谢!
------解决思路----------------------
camera->setPreviewTarget(producer) 主要分析此函数有啥问题