use of android.hardware.Camera.Size in project android_packages_apps_Camera by CyanogenMod.
the class Util method newSurfaceLayer.
public static SurfaceTexture newSurfaceLayer(int mCameraDisplayOrientation, Parameters mParameters, CameraActivity mActivity) {
CameraScreenNail screenNail = (CameraScreenNail) mActivity.mCameraScreenNail;
if (mSurfaceTexture == null || mSwitchCamera) {
mSwitchCamera = false;
Size size = mParameters.getPreviewSize();
if (mCameraDisplayOrientation % 180 == 0) {
screenNail.setSize(size.width, size.height);
} else {
screenNail.setSize(size.height, size.width);
}
screenNail.enableAspectRatioClamping();
mActivity.notifyScreenNailChanged();
screenNail.acquireSurfaceTexture();
mSurfaceTexture = screenNail.getSurfaceTexture();
}
return (SurfaceTexture) mSurfaceTexture;
}
use of android.hardware.Camera.Size in project android_packages_apps_Camera by CyanogenMod.
the class PhotoModule method updateCameraParametersPreference.
private void updateCameraParametersPreference() {
setAutoExposureLockIfSupported();
setAutoWhiteBalanceLockIfSupported();
setFocusAreasIfSupported();
setMeteringAreasIfSupported();
// Set picture size.
String pictureSize = mPreferences.getString(CameraSettings.KEY_PICTURE_SIZE, null);
if (pictureSize == null) {
CameraSettings.initialCameraPictureSize(mActivity, mParameters);
} else {
Size oldSize = mParameters.getPictureSize();
List<Size> supported = mParameters.getSupportedPictureSizes();
CameraSettings.setCameraPictureSize(pictureSize, supported, mParameters);
Size size = mParameters.getPictureSize();
if (oldSize != null && size != null) {
if (!size.equals(oldSize) && mCameraState != PREVIEW_STOPPED) {
Log.d(TAG, "Picture size changed. Restart preview");
mAspectRatioChanged = true;
stopPreview();
}
}
}
Size size = mParameters.getPictureSize();
// Set a preview size that is closest to the viewfinder height and has
// the right aspect ratio.
List<Size> sizes = mParameters.getSupportedPreviewSizes();
Size optimalSize = Util.getOptimalPreviewSize(mActivity, sizes, (double) size.width / size.height);
Size original = mParameters.getPreviewSize();
if (!original.equals(optimalSize)) {
mParameters.setPreviewSize(optimalSize.width, optimalSize.height);
// Zoom related settings will be changed for different preview
// sizes, so set and read the parameters to get latest values
mCameraDevice.setParameters(mParameters);
mParameters = mCameraDevice.getParameters();
}
Log.v(TAG, "Preview size is " + optimalSize.width + "x" + optimalSize.height);
// Since changing scene mode may change supported values, set scene mode
// first. HDR is a scene mode. To promote it in UI, it is stored in a
// separate preference.
String hdr = mPreferences.getString(CameraSettings.KEY_CAMERA_HDR, mActivity.getString(R.string.pref_camera_hdr_default));
if (mActivity.getString(R.string.setting_on_value).equals(hdr)) {
if (Util.isCameraHdrSupported(mParameters) && !Util.useSoftwareHDR())
mSceneMode = Util.SCENE_MODE_HDR;
else {
mSceneMode = Parameters.SCENE_MODE_AUTO;
Util.setDoSoftwareHDRShot(true);
}
} else {
if (Util.useSoftwareHDR()) {
Util.setDoSoftwareHDRShot(false);
}
mSceneMode = mPreferences.getString(CameraSettings.KEY_SCENE_MODE, mActivity.getString(R.string.pref_camera_scenemode_default));
}
if (Util.isSupported(mSceneMode, mParameters.getSupportedSceneModes())) {
if (!mParameters.getSceneMode().equals(mSceneMode)) {
mParameters.setSceneMode(mSceneMode);
// Setting scene mode will change the settings of flash mode,
// white balance, and focus mode. Here we read back the
// parameters, so we can know those settings.
mCameraDevice.setParameters(mParameters);
mParameters = mCameraDevice.getParameters();
}
} else {
mSceneMode = mParameters.getSceneMode();
if (mSceneMode == null) {
mSceneMode = Parameters.SCENE_MODE_AUTO;
}
}
if (Util.enableZSL()) {
if (Util.sendMagicSamsungZSLCommand()) {
mCameraDevice.sendMagicSamsungZSLCommand();
}
// Switch on ZSL mode
mParameters.set("camera-mode", "1");
} else {
//mParameters.setCameraMode(0);
}
// Set JPEG quality.
int jpegQuality = Integer.parseInt(mPreferences.getString(CameraSettings.KEY_JPEG, mActivity.getString(R.string.pref_camera_jpeg_default)));
mParameters.setJpegQuality(jpegQuality);
// For the following settings, we need to check if the settings are
// still supported by latest driver, if not, ignore the settings.
// Set ISO speed.
String isoMode = mPreferences.getString(CameraSettings.KEY_ISO_MODE, mActivity.getString(R.string.pref_camera_iso_default));
if (Util.isSupported(isoMode, mParameters.getSupportedIsoValues()))
mParameters.setISOValue(isoMode);
// Color effect
String colorEffect = mPreferences.getString(CameraSettings.KEY_COLOR_EFFECT, mActivity.getString(R.string.pref_camera_coloreffect_default));
if (Util.isSupported(colorEffect, mParameters.getSupportedColorEffects())) {
mParameters.setColorEffect(colorEffect);
}
// Set shutter speed
String shutterSpeed = mPreferences.getString(CameraSettings.KEY_SHUTTER_SPEED, mActivity.getString(R.string.pref_shutter_speed_default));
mParameters.set("shutter-speed", shutterSpeed);
// Set exposure compensation
if (!mHDRShotInProgress) {
int value = CameraSettings.readExposure(mPreferences);
int max = mParameters.getMaxExposureCompensation();
int min = mParameters.getMinExposureCompensation();
if (value >= min && value <= max) {
mParameters.setExposureCompensation(value);
} else {
Log.w(TAG, "invalid exposure range: " + value);
}
}
if (Parameters.SCENE_MODE_AUTO.equals(mSceneMode)) {
// Set flash mode.
String flashMode = mPreferences.getString(CameraSettings.KEY_FLASH_MODE, mActivity.getString(R.string.pref_camera_flashmode_default));
List<String> supportedFlash = mParameters.getSupportedFlashModes();
if (Util.isSupported(flashMode, supportedFlash)) {
mParameters.setFlashMode(flashMode);
} else {
flashMode = mParameters.getFlashMode();
if (flashMode == null) {
flashMode = mActivity.getString(R.string.pref_camera_flashmode_no_flash);
}
}
// Set white balance parameter.
String whiteBalance = mPreferences.getString(CameraSettings.KEY_WHITE_BALANCE, mActivity.getString(R.string.pref_camera_whitebalance_default));
if (Util.isSupported(whiteBalance, mParameters.getSupportedWhiteBalance())) {
mParameters.setWhiteBalance(whiteBalance);
} else {
whiteBalance = mParameters.getWhiteBalance();
if (whiteBalance == null) {
whiteBalance = Parameters.WHITE_BALANCE_AUTO;
}
}
// Set focus mode.
mFocusManager.overrideFocusMode(null);
mParameters.setFocusMode(mFocusManager.getFocusMode());
// Set focus time.
mFocusManager.setFocusTime(Integer.valueOf(mPreferences.getString(CameraSettings.KEY_FOCUS_TIME, mActivity.getString(R.string.pref_camera_focustime_default))));
} else {
mFocusManager.overrideFocusMode(mParameters.getFocusMode());
}
if (mContinousFocusSupported && ApiHelper.HAS_AUTO_FOCUS_MOVE_CALLBACK) {
updateAutoFocusMoveCallback();
}
}
use of android.hardware.Camera.Size in project android_packages_apps_Camera by CyanogenMod.
the class VideoModule method getDesiredPreviewSize.
@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
private void getDesiredPreviewSize() {
mParameters = mActivity.mCameraDevice.getParameters();
if (ApiHelper.HAS_GET_SUPPORTED_VIDEO_SIZE) {
if (mParameters.getSupportedVideoSizes() == null || (!mActivity.getResources().getBoolean(R.bool.usePreferredPreviewSizeForEffects) && effectsActive()) || Util.useProfileVideoSize()) {
mDesiredPreviewWidth = mProfile.videoFrameWidth;
mDesiredPreviewHeight = mProfile.videoFrameHeight;
} else {
// Driver supports separates outputs for preview and video.
List<Size> sizes = mParameters.getSupportedPreviewSizes();
Size preferred = mParameters.getPreferredPreviewSizeForVideo();
if (mActivity.getResources().getBoolean(R.bool.ignorePreferredPreviewSizeForVideo) || preferred == null) {
preferred = sizes.get(0);
}
int product = preferred.width * preferred.height;
Iterator<Size> it = sizes.iterator();
// Remove the preview sizes that are not preferred.
while (it.hasNext()) {
Size size = it.next();
if (size.width * size.height > product) {
it.remove();
}
}
Size optimalSize = Util.getOptimalPreviewSize(mActivity, sizes, (double) mProfile.videoFrameWidth / mProfile.videoFrameHeight);
mDesiredPreviewWidth = optimalSize.width;
mDesiredPreviewHeight = optimalSize.height;
}
} else {
mDesiredPreviewWidth = mProfile.videoFrameWidth;
mDesiredPreviewHeight = mProfile.videoFrameHeight;
}
Log.v(TAG, "mDesiredPreviewWidth=" + mDesiredPreviewWidth + ". mDesiredPreviewHeight=" + mDesiredPreviewHeight);
}
use of android.hardware.Camera.Size in project android_packages_apps_Camera by CyanogenMod.
the class VideoModule method checkQualityAndStartPreview.
// Verifies that the current preview view size is correct before starting
// preview. If not, resets the surface texture and resizes the view.
private void checkQualityAndStartPreview() {
readVideoPreferences();
showTimeLapseUI(mCaptureTimeLapse);
Size size = mParameters.getPreviewSize();
if (size.width != mDesiredPreviewWidth || size.height != mDesiredPreviewHeight) {
resizeForPreviewAspectRatio();
}
// Start up preview again
startPreview();
}
use of android.hardware.Camera.Size in project android_packages_apps_Camera by CyanogenMod.
the class VideoModule method setCameraParameters.
@SuppressWarnings("deprecation")
private void setCameraParameters() {
mParameters.setPreviewSize(mDesiredPreviewWidth, mDesiredPreviewHeight);
mParameters.setPreviewFrameRate(mProfile.videoFrameRate);
// Set video mode
CameraSettings.setVideoMode(mParameters, true);
// Set video size before recording starts
CameraSettings.setEarlyVideoSize(mParameters, mProfile);
// Set flash mode.
String flashMode;
if (mActivity.mShowCameraAppView) {
flashMode = mPreferences.getString(CameraSettings.KEY_VIDEOCAMERA_FLASH_MODE, mActivity.getString(R.string.pref_camera_video_flashmode_default));
} else {
flashMode = Parameters.FLASH_MODE_OFF;
}
List<String> supportedFlash = mParameters.getSupportedFlashModes();
if (isSupported(flashMode, supportedFlash)) {
mParameters.setFlashMode(flashMode);
} else {
flashMode = mParameters.getFlashMode();
if (flashMode == null) {
flashMode = mActivity.getString(R.string.pref_camera_flashmode_no_flash);
}
}
// Set white balance parameter.
String whiteBalance = mPreferences.getString(CameraSettings.KEY_WHITE_BALANCE, mActivity.getString(R.string.pref_camera_whitebalance_default));
if (isSupported(whiteBalance, mParameters.getSupportedWhiteBalance())) {
mParameters.setWhiteBalance(whiteBalance);
} else {
whiteBalance = mParameters.getWhiteBalance();
if (whiteBalance == null) {
whiteBalance = Parameters.WHITE_BALANCE_AUTO;
}
}
// Set zoom.
if (mParameters.isZoomSupported()) {
mParameters.setZoom(mZoomValue);
}
// Set continuous autofocus.
List<String> supportedFocus = mParameters.getSupportedFocusModes();
if (isSupported(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO, supportedFocus)) {
mParameters.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
mParameters.set(Util.RECORDING_HINT, Util.TRUE);
// Enable video stabilization. Convenience methods not available in API
// level <= 14
String vstabSupported = mParameters.get("video-stabilization-supported");
if ("true".equals(vstabSupported)) {
mParameters.set("video-stabilization", "true");
}
// Set picture size.
// The logic here is different from the logic in still-mode camera.
// There we determine the preview size based on the picture size, but
// here we determine the picture size based on the preview size.
List<Size> supported = mParameters.getSupportedPictureSizes();
Size optimalSize = Util.getOptimalVideoSnapshotPictureSize(supported, (double) mDesiredPreviewWidth / mDesiredPreviewHeight);
Size original = mParameters.getPictureSize();
if (!original.equals(optimalSize)) {
mParameters.setPictureSize(optimalSize.width, optimalSize.height);
}
Log.v(TAG, "Video snapshot size is " + optimalSize.width + "x" + optimalSize.height);
// Set JPEG quality.
int jpegQuality = Integer.parseInt(mPreferences.getString(CameraSettings.KEY_VIDEOCAMERA_JPEG, mActivity.getString(R.string.pref_camera_jpeg_default)));
mParameters.setJpegQuality(jpegQuality);
// Color effect
String colorEffect = mPreferences.getString(CameraSettings.KEY_VIDEOCAMERA_COLOR_EFFECT, mActivity.getString(R.string.pref_camera_coloreffect_default));
if (Util.isSupported(colorEffect, mParameters.getSupportedColorEffects())) {
mParameters.setColorEffect(colorEffect);
}
// Set exposure compensation
int value = CameraSettings.readExposure(mPreferences);
int max = mParameters.getMaxExposureCompensation();
int min = mParameters.getMinExposureCompensation();
if (value >= min && value <= max) {
mParameters.setExposureCompensation(value);
} else {
Log.w(TAG, "invalid exposure range: " + value);
}
// HDR
if (Util.isVideoHdrSupported(mParameters)) {
String videohdr = mPreferences.getString(CameraSettings.KEY_VIDEO_HDR, mActivity.getString(R.string.pref_video_hdr_default));
mParameters.set(mActivity.getString(R.string.videoHdrParam), videohdr);
}
CameraSettings.dumpParameters(mParameters);
mActivity.mCameraDevice.setParameters(mParameters);
// Keep preview size up to date.
mParameters = mActivity.mCameraDevice.getParameters();
updateCameraScreenNailSize(mDesiredPreviewWidth, mDesiredPreviewHeight);
}
Aggregations