OSDN Git Service

Merge "Check for null camera within proxy" into ub-camera-haleakala
authorAlan Newberger <alann@google.com>
Sat, 17 Jan 2015 02:14:00 +0000 (02:14 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Sat, 17 Jan 2015 02:14:00 +0000 (02:14 +0000)
src/com/android/camera/VideoModule.java
src/com/android/camera/debug/DebugCameraProxy.java [deleted file]

index 4709755..bbd0e90 100644 (file)
@@ -27,6 +27,7 @@ import android.content.IntentFilter;
 import android.graphics.Bitmap;
 import android.graphics.Point;
 import android.graphics.SurfaceTexture;
+import android.hardware.Camera;
 import android.location.Location;
 import android.media.AudioManager;
 import android.media.CamcorderProfile;
@@ -1089,9 +1090,9 @@ public class VideoModule extends CameraModule
         Log.i(TAG, "initializeRecorder: " + Thread.currentThread());
         // If the mCameraDevice is null, then this activity is going to finish
         if (mCameraDevice == null) {
+            Log.w(TAG, "null camera proxy, not recording");
             return;
         }
-
         Intent intent = mActivity.getIntent();
         Bundle myExtras = intent.getExtras();
 
@@ -1115,7 +1116,19 @@ public class VideoModule extends CameraModule
         mMediaRecorder = new MediaRecorder();
         // Unlock the camera object before passing it to media recorder.
         mCameraDevice.unlock();
-        mMediaRecorder.setCamera(mCameraDevice.getCamera());
+        // We rely here on the fact that the unlock call above is synchronous
+        // and blocks until it occurs in the handler thread. Thereby ensuring
+        // that we are up to date with handler requests, and if this proxy had
+        // ever been released by a prior command, it would be null.
+        Camera camera = mCameraDevice.getCamera();
+        // If the camera device is null, the camera proxy is stale and recording
+        // should be ignored.
+        if (camera == null) {
+            Log.w(TAG, "null camera within proxy, not recording");
+            return;
+        }
+
+        mMediaRecorder.setCamera(camera);
         mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
         mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
         mMediaRecorder.setProfile(mProfile);
diff --git a/src/com/android/camera/debug/DebugCameraProxy.java b/src/com/android/camera/debug/DebugCameraProxy.java
deleted file mode 100644 (file)
index 05e8229..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera.debug;
-
-import android.graphics.SurfaceTexture;
-import android.hardware.Camera;
-import android.os.Handler;
-import android.view.SurfaceHolder;
-
-import com.android.ex.camera2.portability.CameraAgent;
-import com.android.ex.camera2.portability.CameraCapabilities;
-import com.android.ex.camera2.portability.CameraDeviceInfo;
-import com.android.ex.camera2.portability.CameraSettings;
-import com.android.ex.camera2.portability.CameraStateHolder;
-import com.android.ex.camera2.portability.DispatchThread;
-
-/**
- * A {@link com.android.ex.camera2.portability.CameraAgent.CameraProxy} which wraps the
- * other and adds logs for all operations.
- */
-public class DebugCameraProxy extends CameraAgent.CameraProxy {
-    private final Log.Tag mTag;
-    private final CameraAgent.CameraProxy mProxy;
-
-    /**
-     * Constructor.
-     *
-     * @param tag The tag to be used for logs.
-     * @param proxy The camera proxy to be wrapped.
-     */
-    public DebugCameraProxy(Log.Tag tag, CameraAgent.CameraProxy proxy) {
-        mTag = tag;
-        mProxy = proxy;
-    }
-
-    @Override
-    public Camera getCamera() {
-        log("getCamera");
-        return mProxy.getCamera();
-    }
-
-    @Override
-    public int getCameraId() {
-        log("getCameraId: " + mProxy.getCameraId());
-        return mProxy.getCameraId();
-    }
-
-    @Override
-    public CameraDeviceInfo.Characteristics getCharacteristics() {
-        log("getCharacteristics");
-        return mProxy.getCharacteristics();
-    }
-
-    @Override
-    public CameraAgent getAgent() {
-        log("getAgent");
-        return mProxy.getAgent();
-    }
-
-    @Override
-    public CameraCapabilities getCapabilities() {
-        log("getCapabilities");
-        return mProxy.getCapabilities();
-    }
-
-    @Override
-    public void reconnect(Handler handler, CameraAgent.CameraOpenCallback cb) {
-        log("reconnect");
-        mProxy.reconnect(handler, cb);
-    }
-
-    @Override
-    public void unlock() {
-        log("unlock");
-        mProxy.unlock();
-    }
-
-    @Override
-    public void lock() {
-        log("lock");
-        mProxy.lock();
-    }
-
-    @Override
-    public void setPreviewTexture(SurfaceTexture surfaceTexture) {
-        log("setPreviewTexture");
-        mProxy.setPreviewTexture(surfaceTexture);
-    }
-
-    @Override
-    public void setPreviewTextureSync(SurfaceTexture surfaceTexture) {
-        log("setPreviewTextureSync");
-        mProxy.setPreviewTextureSync(surfaceTexture);
-    }
-
-    @Override
-    public void setPreviewDisplay(SurfaceHolder surfaceHolder) {
-        log("setPreviewDisplay");
-        mProxy.setPreviewDisplay(surfaceHolder);
-    }
-
-    @Override
-    public void startPreview() {
-        log("startPreview");
-        mProxy.startPreview();
-    }
-
-    @Override
-    public void startPreviewWithCallback(Handler h, CameraAgent.CameraStartPreviewCallback cb) {
-        log("startPreviewWithCallback");
-        mProxy.startPreviewWithCallback(h, cb);
-    }
-
-    @Override
-    public void stopPreview() {
-        log("stopPreview");
-        mProxy.stopPreview();
-    }
-
-    @Override
-    public void setPreviewDataCallback(Handler handler,
-            CameraAgent.CameraPreviewDataCallback cb) {
-        log("setPreviewDataCallback");
-        mProxy.setPreviewDataCallback(handler, cb);
-    }
-
-    @Override
-    public void setOneShotPreviewCallback(Handler handler,
-            CameraAgent.CameraPreviewDataCallback cb) {
-        log("setOneShotPreviewCallback");
-        mProxy.setOneShotPreviewCallback(handler, cb);
-    }
-
-    @Override
-    public void setPreviewDataCallbackWithBuffer(Handler handler,
-            CameraAgent.CameraPreviewDataCallback cb) {
-        log("setPreviewDataCallbackWithBuffer");
-        mProxy.setPreviewDataCallbackWithBuffer(handler, cb);
-    }
-
-    @Override
-    public void addCallbackBuffer(byte[] callbackBuffer) {
-        log("addCallbackBuffer");
-        mProxy.addCallbackBuffer(callbackBuffer);
-    }
-
-    @Override
-    public void autoFocus(Handler handler, CameraAgent.CameraAFCallback cb) {
-        log("autoFocus");
-        mProxy.autoFocus(handler, cb);
-    }
-
-    @Override
-    public void cancelAutoFocus() {
-        log("cancelAutoFocus");
-        mProxy.cancelAutoFocus();
-    }
-
-    @Override
-    public void setAutoFocusMoveCallback(Handler handler, CameraAgent.CameraAFMoveCallback cb) {
-        log("setAutoFocusMoveCallback");
-        mProxy.setAutoFocusMoveCallback(handler, cb);
-    }
-
-    @Override
-    public void takePicture(Handler handler, CameraAgent.CameraShutterCallback shutter,
-            CameraAgent.CameraPictureCallback raw, CameraAgent.CameraPictureCallback postview,
-            CameraAgent.CameraPictureCallback jpeg) {
-        log("takePicture");
-        mProxy.takePicture(handler, shutter, raw, postview, jpeg);
-    }
-
-    @Override
-    public void setDisplayOrientation(int degrees) {
-        log("setDisplayOrientation:" + degrees);
-        mProxy.setDisplayOrientation(degrees);
-    }
-
-    @Override
-    public void setZoomChangeListener(Camera.OnZoomChangeListener listener) {
-        log("setZoomChangeListener");
-        mProxy.setZoomChangeListener(listener);
-    }
-
-    @Override
-    public void setFaceDetectionCallback(Handler handler,
-            CameraAgent.CameraFaceDetectionCallback callback) {
-        log("setFaceDetectionCallback");
-        mProxy.setFaceDetectionCallback(handler, callback);
-    }
-
-    @Override
-    public void startFaceDetection() {
-        log("startFaceDetection");
-        mProxy.startFaceDetection();
-    }
-
-    @Override
-    public void stopFaceDetection() {
-        log("stopFaceDetection");
-        mProxy.stopFaceDetection();
-    }
-
-    @Override
-    public void setParameters(Camera.Parameters params) {
-        log("setParameters");
-        mProxy.setParameters(params);
-    }
-
-    @Override
-    public Camera.Parameters getParameters() {
-        log("getParameters");
-        return mProxy.getParameters();
-    }
-
-    @Override
-    public CameraSettings getSettings() {
-        log("getSettings");
-        return mProxy.getSettings();
-    }
-
-    @Override
-    public boolean applySettings(final CameraSettings settings) {
-        log("applySettings");
-        return mProxy.applySettings(settings);
-    }
-
-    @Override
-    public void refreshSettings() {
-        log("refreshParameters");
-        mProxy.refreshSettings();
-    }
-
-    @Override
-    public void enableShutterSound(boolean enable) {
-        log("enableShutterSound:" + enable);
-        mProxy.enableShutterSound(enable);
-    }
-
-    @Override
-    public String dumpDeviceSettings() {
-        log("dumpDeviceSettings");
-        return mProxy.dumpDeviceSettings();
-    }
-
-    @Override
-    public Handler getCameraHandler() {
-        return mProxy.getCameraHandler();
-    }
-
-    @Override
-    public DispatchThread getDispatchThread() {
-        return mProxy.getDispatchThread();
-    }
-
-    @Override
-    public CameraStateHolder getCameraState() {
-        return mProxy.getCameraState();
-    }
-
-    private void log(String msg) {
-        Log.v(mTag, msg);
-    }
-}