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");
     }