SurfaceTexture: Fully refactored from BufferQueue
Cleaning up camera and media interactions as part of SurfaceTexture refactoring
Change-Id: Iea2b10ff80b5f01f83ed0902c725df1d3b4c541a
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 599211e..0c66b86 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -545,12 +545,22 @@
sp<Camera> camera = get_native_camera(env, thiz, NULL);
if (camera == 0) return;
- sp<SurfaceTexture> surfaceTexture = NULL;
+ sp<BufferQueue> bufferQueue = NULL;
if (jSurfaceTexture != NULL) {
- surfaceTexture = reinterpret_cast<SurfaceTexture*>(env->GetIntField(
+ sp<SurfaceTexture> surfaceTexture = reinterpret_cast<SurfaceTexture*>(env->GetIntField(
jSurfaceTexture, fields.surfaceTexture));
+ if (surfaceTexture != NULL) {
+ bufferQueue = surfaceTexture->getBufferQueue();
+ }
+ else {
+ jniThrowException(env, "java/lang/IllegalArgumentException",
+ "SurfaceTexture already released in setPreviewTexture");
+ return;
+ }
+
}
- if (camera->setPreviewTexture(surfaceTexture) != NO_ERROR) {
+
+ if (camera->setPreviewTexture(bufferQueue) != NO_ERROR) {
jniThrowException(env, "java/io/IOException",
"setPreviewTexture failed");
}