OSDN Git Service

Throw exception if startPreview or setPreviewDisplay fails.
authorWu-cheng Li <wuchengli@google.com>
Wed, 10 Jun 2009 06:44:43 +0000 (14:44 +0800)
committerWu-cheng Li <wuchengli@google.com>
Thu, 11 Jun 2009 04:22:54 +0000 (12:22 +0800)
src/com/android/camera/Camera.java
src/com/android/camera/VideoCamera.java

index b81e70f..7ad2c03 100644 (file)
@@ -1131,9 +1131,8 @@ public class Camera extends Activity implements View.OnClickListener,
         try {
             mFocusToneGenerator = new ToneGenerator(
                     AudioManager.STREAM_SYSTEM, FOCUS_BEEP_VOLUME);
-        } catch (RuntimeException e) {
-            Log.w(TAG, "Exception caught while creating local tone generator: "
-                    + e);
+        } catch (Throwable ex) {
+            Log.w(TAG, "Exception caught while creating tone generator: ", ex);
             mFocusToneGenerator = null;
         }
     }
@@ -1514,11 +1513,9 @@ public class Camera extends Activity implements View.OnClickListener,
         // this blanks the screen if the surface changed, no-op otherwise
         try {
             mCameraDevice.setPreviewDisplay(mSurfaceHolder);
-        } catch (IOException exception) {
-            CameraHolder.instance().release();
-            mCameraDevice = null;
-            // TODO: add more exception handling logic here
-            return;
+        } catch (Throwable ex) {
+            closeCamera();
+            throw new RuntimeException("setPreviewDisplay failed", ex);
         }
 
         setCameraParameter();
@@ -1531,10 +1528,9 @@ public class Camera extends Activity implements View.OnClickListener,
 
         try {
             mCameraDevice.startPreview();
-        } catch (Throwable e) {
-            // TODO: change Throwable to IOException once
-            //      android.hardware.Camera.startPreview properly declares
-            //      that it throws IOException.
+        } catch (Throwable ex) {
+            closeCamera();
+            throw new RuntimeException("startPreview failed", ex);
         }
         mPreviewing = true;
 
index 943ea6d..67a4d9d 100644 (file)
@@ -477,15 +477,14 @@ public class VideoCamera extends Activity implements View.OnClickListener,
     }
 
     // Precondition: mSurfaceHolder != null
-    // Returns true if starting preview succeeds.
-    private boolean startPreview() {
+    private void startPreview() {
         findViewById(R.id.review_indicator).setVisibility(View.INVISIBLE);
         findViewById(R.id.video_indicator).setVisibility(View.VISIBLE);
 
         Log.v(TAG, "startPreview");
         if (mPreviewing) {
             // After recording a video, preview is not stopped. So just return.
-            return true;
+            return;
         }
 
         if (mCameraDevice == null) {
@@ -497,27 +496,19 @@ public class VideoCamera extends Activity implements View.OnClickListener,
         setCameraParameters();
         try {
             mCameraDevice.setPreviewDisplay(mSurfaceHolder);
-        } catch (IOException ex) {
-            CameraHolder.instance().release();
-            mCameraDevice = null;
-            Log.e(TAG, "failed to set preview display");
-            return false;
+        } catch (Throwable ex) {
+            closeCamera();
+            throw new RuntimeException("setPreviewDisplay failed", ex);
         }
 
         try {
             mCameraDevice.startPreview();
             mPreviewing = true;
         } catch (Throwable ex) {
-            // TODO: change Throwable to IOException once
-            //      android.hardware.Camera.startPreview properly declares
-            //      that it throws IOException.
-            CameraHolder.instance().release();
-            mCameraDevice = null;
-            Log.e(TAG, "failed to start preview");
-            return false;
+            closeCamera();
+            throw new RuntimeException("startPreview failed", ex);
         }
         mCameraDevice.unlock();
-        return true;
     }
 
     private void closeCamera() {