|
|
@ -27,24 +27,31 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
private static final String TAG = Camera1.class.getSimpleName(); |
|
|
|
private static final String TAG = Camera1.class.getSimpleName(); |
|
|
|
|
|
|
|
|
|
|
|
private static final int DELAY_MILLIS_BEFORE_RESETTING_FOCUS = 3000; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private int mCameraId; |
|
|
|
private int mCameraId; |
|
|
|
private Camera mCamera; |
|
|
|
private Camera mCamera; |
|
|
|
private ExtraProperties mExtraProperties; |
|
|
|
|
|
|
|
private CameraOptions mOptions; |
|
|
|
|
|
|
|
private Size mPreviewSize; |
|
|
|
|
|
|
|
private Size mCaptureSize; |
|
|
|
|
|
|
|
private MediaRecorder mMediaRecorder; |
|
|
|
private MediaRecorder mMediaRecorder; |
|
|
|
private File mVideoFile; |
|
|
|
private File mVideoFile; |
|
|
|
|
|
|
|
|
|
|
|
private int mDisplayOffset; |
|
|
|
|
|
|
|
private int mDeviceOrientation; |
|
|
|
|
|
|
|
private int mSensorOffset; |
|
|
|
private int mSensorOffset; |
|
|
|
|
|
|
|
|
|
|
|
private Location mLocation; |
|
|
|
private Location mLocation; |
|
|
|
|
|
|
|
|
|
|
|
private Handler mFocusHandler = new Handler(); |
|
|
|
private final int mPostFocusResetDelay = 3000; |
|
|
|
|
|
|
|
private Runnable mPostFocusResetRunnable = new Runnable() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void run() { |
|
|
|
|
|
|
|
if (!isCameraOpened()) return; |
|
|
|
|
|
|
|
mCamera.cancelAutoFocus(); |
|
|
|
|
|
|
|
synchronized (mLock) { |
|
|
|
|
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
params.setFocusAreas(null); |
|
|
|
|
|
|
|
params.setMeteringAreas(null); |
|
|
|
|
|
|
|
applyDefaultFocus(params); // Revert to internal focus.
|
|
|
|
|
|
|
|
mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
private Mapper mMapper = new Mapper.Mapper1(); |
|
|
|
private Mapper mMapper = new Mapper.Mapper1(); |
|
|
|
private boolean mIsSetup = false; |
|
|
|
private boolean mIsSetup = false; |
|
|
|
private boolean mIsCapturingImage = false; |
|
|
|
private boolean mIsCapturingImage = false; |
|
|
@ -160,7 +167,7 @@ class Camera1 extends CameraController { |
|
|
|
@WorkerThread |
|
|
|
@WorkerThread |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void onStop() { |
|
|
|
void onStop() { |
|
|
|
mFocusHandler.removeCallbacksAndMessages(null); |
|
|
|
mHandler.get().removeCallbacks(mPostFocusResetRunnable); |
|
|
|
if (isCameraOpened()) { |
|
|
|
if (isCameraOpened()) { |
|
|
|
if (mIsCapturingVideo) endVideo(); |
|
|
|
if (mIsCapturingVideo) endVideo(); |
|
|
|
mCamera.stopPreview(); |
|
|
|
mCamera.stopPreview(); |
|
|
@ -189,17 +196,6 @@ class Camera1 extends CameraController { |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
void onDisplayOffset(int displayOrientation) { |
|
|
|
|
|
|
|
// I doubt this will ever change.
|
|
|
|
|
|
|
|
this.mDisplayOffset = displayOrientation; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
void onDeviceOrientation(int deviceOrientation) { |
|
|
|
|
|
|
|
this.mDeviceOrientation = deviceOrientation; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void setSessionType(SessionType sessionType) { |
|
|
|
void setSessionType(SessionType sessionType) { |
|
|
@ -394,7 +390,7 @@ class Camera1 extends CameraController { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onPictureTaken(byte[] data, final Camera camera) { |
|
|
|
public void onPictureTaken(byte[] data, final Camera camera) { |
|
|
|
mIsCapturingImage = false; |
|
|
|
mIsCapturingImage = false; |
|
|
|
post(new Runnable() { |
|
|
|
mHandler.post(new Runnable() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void run() { |
|
|
|
public void run() { |
|
|
|
// This is needed, read somewhere in the docs.
|
|
|
|
// This is needed, read somewhere in the docs.
|
|
|
@ -451,16 +447,6 @@ class Camera1 extends CameraController { |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
Size getCaptureSize() { |
|
|
|
|
|
|
|
return mCaptureSize; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
Size getPreviewSize() { |
|
|
|
|
|
|
|
return mPreviewSize; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
boolean shouldFlipSizes() { |
|
|
|
boolean shouldFlipSizes() { |
|
|
|
return mSensorOffset % 180 != 0; |
|
|
|
return mSensorOffset % 180 != 0; |
|
|
@ -471,17 +457,6 @@ class Camera1 extends CameraController { |
|
|
|
return mCamera != null; |
|
|
|
return mCamera != null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
ExtraProperties getExtraProperties() { |
|
|
|
|
|
|
|
return mExtraProperties; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Nullable |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
CameraOptions getCameraOptions() { |
|
|
|
|
|
|
|
return mOptions; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Internal:
|
|
|
|
// Internal:
|
|
|
|
|
|
|
|
|
|
|
@ -723,7 +698,8 @@ class Camera1 extends CameraController { |
|
|
|
public void onAutoFocus(boolean success, Camera camera) { |
|
|
|
public void onAutoFocus(boolean success, Camera camera) { |
|
|
|
// TODO lock auto exposure and white balance for a while
|
|
|
|
// TODO lock auto exposure and white balance for a while
|
|
|
|
mCameraCallbacks.dispatchOnFocusEnd(gesture, success, p); |
|
|
|
mCameraCallbacks.dispatchOnFocusEnd(gesture, success, p); |
|
|
|
postResetFocus(); |
|
|
|
mHandler.get().removeCallbacks(mPostFocusResetRunnable); |
|
|
|
|
|
|
|
mHandler.get().postDelayed(mPostFocusResetRunnable, mPostFocusResetDelay); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
@ -731,25 +707,6 @@ class Camera1 extends CameraController { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void postResetFocus() { |
|
|
|
|
|
|
|
mFocusHandler.removeCallbacksAndMessages(null); |
|
|
|
|
|
|
|
mFocusHandler.postDelayed(new Runnable() { |
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void run() { |
|
|
|
|
|
|
|
if (!isCameraOpened()) return; |
|
|
|
|
|
|
|
mCamera.cancelAutoFocus(); |
|
|
|
|
|
|
|
synchronized (mLock) { |
|
|
|
|
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
params.setFocusAreas(null); |
|
|
|
|
|
|
|
params.setMeteringAreas(null); |
|
|
|
|
|
|
|
applyDefaultFocus(params); // Revert to internal focus.
|
|
|
|
|
|
|
|
mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, DELAY_MILLIS_BEFORE_RESETTING_FOCUS); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<Camera.Area> computeMeteringAreas(double viewClickX, double viewClickY) { |
|
|
|
private List<Camera.Area> computeMeteringAreas(double viewClickX, double viewClickY) { |
|
|
|
// Event came in view coordinates. We must rotate to sensor coordinates.
|
|
|
|
// Event came in view coordinates. We must rotate to sensor coordinates.
|
|
|
|
// First, rescale to the -1000 ... 1000 range.
|
|
|
|
// First, rescale to the -1000 ... 1000 range.
|
|
|
|