Fix some bugs

pull/37/head
Mattia Iavarone 8 years ago
parent fbd381c40f
commit 0424f2e2b1
  1. 1
      cameraview/src/androidTest/AndroidManifest.xml
  2. 14
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraControllerIntegrationTest.java
  3. 19
      cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java
  4. 2
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java

@ -3,6 +3,7 @@
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application> <application>
<activity <activity

@ -94,7 +94,7 @@ public class CameraControllerIntegrationTest extends BaseTest {
//region test open/close //region test open/close
@Test @Test
public void testOpenClose() { public void testOpenClose() throws Exception {
assertFalse(controller.isCameraAvailable()); assertFalse(controller.isCameraAvailable());
camera.start(); camera.start();
@ -248,14 +248,14 @@ public class CameraControllerIntegrationTest extends BaseTest {
public void testSetHdr() { public void testSetHdr() {
camera.start(); camera.start();
CameraOptions options = waitForOpen(true); CameraOptions options = waitForOpen(true);
WhiteBalance[] values = WhiteBalance.values(); Hdr[] values = Hdr.values();
WhiteBalance oldValue = camera.getWhiteBalance(); Hdr oldValue = camera.getHdr();
for (WhiteBalance value : values) { for (Hdr value : values) {
camera.setWhiteBalance(value); camera.setHdr(value);
if (options.supports(value)) { if (options.supports(value)) {
assertEquals(camera.getWhiteBalance(), value); assertEquals(camera.getHdr(), value);
} else { } else {
assertEquals(camera.getWhiteBalance(), oldValue); assertEquals(camera.getHdr(), oldValue);
} }
} }
} }

@ -67,8 +67,15 @@ class Camera1 extends CameraController {
@Override @Override
public void onSurfaceAvailable() { public void onSurfaceAvailable() {
LOG.i("onSurfaceAvailable, size is", mPreview.getSurfaceSize()); LOG.i("onSurfaceAvailable, size is", mPreview.getSurfaceSize());
if (shouldSetup()) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (shouldSetup()) setup(); if (shouldSetup()) setup();
} }
});
}
}
/** /**
* Preview surface did change its size. Compute a new preview size. * Preview surface did change its size. Compute a new preview size.
@ -340,6 +347,8 @@ class Camera1 extends CameraController {
@Override @Override
void setVideoQuality(VideoQuality videoQuality) { void setVideoQuality(VideoQuality videoQuality) {
if (mIsCapturingVideo) { if (mIsCapturingVideo) {
// TODO: actually any call to getParameters() could fail while recording a video.
// See. https://stackoverflow.com/questions/14941625/correct-handling-of-exception-getparameters-failed-empty-parameters
throw new IllegalStateException("Can't change video quality while recording a video."); throw new IllegalStateException("Can't change video quality while recording a video.");
} }
@ -545,21 +554,21 @@ class Camera1 extends CameraController {
mVideoFile = videoFile; mVideoFile = videoFile;
if (mIsCapturingVideo) return false; if (mIsCapturingVideo) return false;
if (!isCameraAvailable()) return false; if (!isCameraAvailable()) return false;
Camera.Parameters params = mCamera.getParameters();
params.setVideoStabilization(false);
if (mSessionType == SessionType.VIDEO) { if (mSessionType == SessionType.VIDEO) {
mIsCapturingVideo = true; mIsCapturingVideo = true;
initMediaRecorder(); initMediaRecorder();
try { try {
mMediaRecorder.prepare(); mMediaRecorder.prepare();
mMediaRecorder.start();
return true;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); Exception m = e; // FileNotFoundException: Read only file system.
LOG.e("Error while starting MediaRecorder.", e);
mVideoFile = null; mVideoFile = null;
mCamera.lock();
endVideo(); endVideo();
return false; return false;
} }
mMediaRecorder.start();
return true;
} else { } else {
throw new IllegalStateException("Can't record video while session type is picture"); throw new IllegalStateException("Can't record video while session type is picture");
} }

@ -1106,7 +1106,7 @@ public class CameraView extends FrameLayout {
*/ */
public void startCapturingVideo(File file) { public void startCapturingVideo(File file) {
if (file == null) { if (file == null) {
file = new File(getContext().getExternalFilesDir(null), "video.mp4"); file = new File(getContext().getFilesDir(), "video.mp4");
} }
if (mCameraController.startVideo(file)) { if (mCameraController.startVideo(file)) {
mUiHandler.post(new Runnable() { mUiHandler.post(new Runnable() {

Loading…
Cancel
Save