|
|
@ -286,14 +286,21 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void setLocation(Location location) { |
|
|
|
void setLocation(Location location) { |
|
|
|
Location oldLocation = mLocation; |
|
|
|
try { |
|
|
|
mLocation = location; |
|
|
|
Location oldLocation = mLocation; |
|
|
|
if (isCameraAvailable()) { |
|
|
|
mLocation = location; |
|
|
|
synchronized (mLock) { |
|
|
|
if (isCameraAvailable()) { |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
synchronized (mLock) { |
|
|
|
if (mergeLocation(params, oldLocation)) mCamera.setParameters(params); |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
if (mergeLocation(params, oldLocation)) mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set the location.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private boolean mergeLocation(Camera.Parameters params, Location oldLocation) { |
|
|
|
private boolean mergeLocation(Camera.Parameters params, Location oldLocation) { |
|
|
@ -324,14 +331,22 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void setWhiteBalance(WhiteBalance whiteBalance) { |
|
|
|
void setWhiteBalance(WhiteBalance whiteBalance) { |
|
|
|
WhiteBalance old = mWhiteBalance; |
|
|
|
try { |
|
|
|
mWhiteBalance = whiteBalance; |
|
|
|
WhiteBalance old = mWhiteBalance; |
|
|
|
if (isCameraAvailable()) { |
|
|
|
mWhiteBalance = whiteBalance; |
|
|
|
synchronized (mLock) { |
|
|
|
if (isCameraAvailable()) { |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
synchronized (mLock) { |
|
|
|
if (mergeWhiteBalance(params, old)) mCamera.setParameters(params); |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
if (mergeWhiteBalance(params, old)) mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
// TODO handle, !mergeWhiteBalance, too?
|
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set the white balance.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private boolean mergeWhiteBalance(Camera.Parameters params, WhiteBalance oldWhiteBalance) { |
|
|
|
private boolean mergeWhiteBalance(Camera.Parameters params, WhiteBalance oldWhiteBalance) { |
|
|
@ -345,14 +360,22 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void setHdr(Hdr hdr) { |
|
|
|
void setHdr(Hdr hdr) { |
|
|
|
Hdr old = mHdr; |
|
|
|
try { |
|
|
|
mHdr = hdr; |
|
|
|
Hdr old = mHdr; |
|
|
|
if (isCameraAvailable()) { |
|
|
|
mHdr = hdr; |
|
|
|
synchronized (mLock) { |
|
|
|
if (isCameraAvailable()) { |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
synchronized (mLock) { |
|
|
|
if (mergeHdr(params, old)) mCamera.setParameters(params); |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
if (mergeHdr(params, old)) mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
// TODO handle, !mergeHdr, too?
|
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set hdr.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private boolean mergeHdr(Camera.Parameters params, Hdr oldHdr) { |
|
|
|
private boolean mergeHdr(Camera.Parameters params, Hdr oldHdr) { |
|
|
@ -377,14 +400,22 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void setFlash(Flash flash) { |
|
|
|
void setFlash(Flash flash) { |
|
|
|
Flash old = mFlash; |
|
|
|
try { |
|
|
|
mFlash = flash; |
|
|
|
Flash old = mFlash; |
|
|
|
if (isCameraAvailable()) { |
|
|
|
mFlash = flash; |
|
|
|
synchronized (mLock) { |
|
|
|
if (isCameraAvailable()) { |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
synchronized (mLock) { |
|
|
|
if (mergeFlash(params, old)) mCamera.setParameters(params); |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
if (mergeFlash(params, old)) mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
// TODO handle, !mergeFlash, too?
|
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set flash.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -427,31 +458,37 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
void setVideoQuality(VideoQuality videoQuality) { |
|
|
|
void setVideoQuality(VideoQuality videoQuality) { |
|
|
|
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
|
|
|
|
|
|
|
|
CameraException cameraException = new CameraConfigurationFailedException("Can't change video quality while recording a video."); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mVideoQuality = videoQuality; |
|
|
|
try { |
|
|
|
if (isCameraAvailable() && mSessionType == SessionType.VIDEO) { |
|
|
|
if (mIsCapturingVideo) { |
|
|
|
// Change capture size to a size that fits the video aspect ratio.
|
|
|
|
// TODO: actually any call to getParameters() could fail while recording a video.
|
|
|
|
Size oldSize = mCaptureSize; |
|
|
|
// See. https://stackoverflow.com/questions/14941625/correct-handling-of-exception-getparameters-failed-empty-parameters
|
|
|
|
mCaptureSize = computeCaptureSize(); |
|
|
|
throw new IllegalStateException("Can't change video quality while recording a video."); |
|
|
|
if (!mCaptureSize.equals(oldSize)) { |
|
|
|
} |
|
|
|
// New video quality triggers a new aspect ratio.
|
|
|
|
|
|
|
|
// Go on and see if preview size should change also.
|
|
|
|
mVideoQuality = videoQuality; |
|
|
|
synchronized (mLock) { |
|
|
|
if (isCameraAvailable() && mSessionType == SessionType.VIDEO) { |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
// Change capture size to a size that fits the video aspect ratio.
|
|
|
|
params.setPictureSize(mCaptureSize.getWidth(), mCaptureSize.getHeight()); |
|
|
|
Size oldSize = mCaptureSize; |
|
|
|
mCamera.setParameters(params); |
|
|
|
mCaptureSize = computeCaptureSize(); |
|
|
|
|
|
|
|
if (!mCaptureSize.equals(oldSize)) { |
|
|
|
|
|
|
|
// New video quality triggers a new aspect ratio.
|
|
|
|
|
|
|
|
// Go on and see if preview size should change also.
|
|
|
|
|
|
|
|
synchronized (mLock) { |
|
|
|
|
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
|
|
|
params.setPictureSize(mCaptureSize.getWidth(), mCaptureSize.getHeight()); |
|
|
|
|
|
|
|
mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
onSurfaceChanged(); |
|
|
|
} |
|
|
|
} |
|
|
|
onSurfaceChanged(); |
|
|
|
LOG.i("setVideoQuality:", "captureSize:", mCaptureSize); |
|
|
|
|
|
|
|
LOG.i("setVideoQuality:", "previewSize:", mPreviewSize); |
|
|
|
} |
|
|
|
} |
|
|
|
LOG.i("setVideoQuality:", "captureSize:", mCaptureSize); |
|
|
|
} |
|
|
|
LOG.i("setVideoQuality:", "previewSize:", mPreviewSize); |
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set video quality.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -782,32 +819,50 @@ class Camera1 extends CameraController { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
boolean setZoom(float zoom) { |
|
|
|
boolean setZoom(float zoom) { |
|
|
|
if (!isCameraAvailable()) return false; |
|
|
|
try { |
|
|
|
if (!mOptions.isZoomSupported()) return false; |
|
|
|
if (!isCameraAvailable()) return false; |
|
|
|
synchronized (mLock) { |
|
|
|
if (!mOptions.isZoomSupported()) return false; |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
synchronized (mLock) { |
|
|
|
float max = params.getMaxZoom(); |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
params.setZoom((int) (zoom * max)); |
|
|
|
float max = params.getMaxZoom(); |
|
|
|
mCamera.setParameters(params); |
|
|
|
params.setZoom((int) (zoom * max)); |
|
|
|
|
|
|
|
mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set zoom.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
boolean setExposureCorrection(float EVvalue) { |
|
|
|
boolean setExposureCorrection(float EVvalue) { |
|
|
|
if (!isCameraAvailable()) return false; |
|
|
|
try { |
|
|
|
if (!mOptions.isExposureCorrectionSupported()) return false; |
|
|
|
if (!isCameraAvailable()) return false; |
|
|
|
float max = mOptions.getExposureCorrectionMaxValue(); |
|
|
|
if (!mOptions.isExposureCorrectionSupported()) return false; |
|
|
|
float min = mOptions.getExposureCorrectionMinValue(); |
|
|
|
float max = mOptions.getExposureCorrectionMaxValue(); |
|
|
|
EVvalue = EVvalue < min ? min : EVvalue > max ? max : EVvalue; // cap
|
|
|
|
float min = mOptions.getExposureCorrectionMinValue(); |
|
|
|
synchronized (mLock) { |
|
|
|
EVvalue = EVvalue < min ? min : EVvalue > max ? max : EVvalue; // cap
|
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
synchronized (mLock) { |
|
|
|
int indexValue = (int) (EVvalue / params.getExposureCompensationStep()); |
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
params.setExposureCompensation(indexValue); |
|
|
|
int indexValue = (int) (EVvalue / params.getExposureCompensationStep()); |
|
|
|
mCamera.setParameters(params); |
|
|
|
params.setExposureCompensation(indexValue); |
|
|
|
|
|
|
|
mCamera.setParameters(params); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
catch (Exception e) { |
|
|
|
|
|
|
|
CameraException cameraException = |
|
|
|
|
|
|
|
new CameraConfigurationFailedException("Failed to set exposure correction.", e); |
|
|
|
|
|
|
|
mCameraCallbacks.onError(cameraException); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// -----------------
|
|
|
|
// -----------------
|
|
|
|