diff options
author | Byunghun Jeon <bjeon@codeaurora.org> | 2016-03-09 15:14:18 -0800 |
---|---|---|
committer | Jay Wang <jaywang@codeaurora.org> | 2016-03-30 15:55:09 -0700 |
commit | 0095c4455f5bba6352abe0476948ef99b42a0c96 (patch) | |
tree | 87da124df3c0099c9235f90d0c2715c2a3a13f01 /src/com/android/camera/CaptureModule.java | |
parent | 8a8ece1ceffc17cde4044cef1f1c399050d3092c (diff) | |
download | android_packages_apps_Snap-0095c4455f5bba6352abe0476948ef99b42a0c96.tar.gz android_packages_apps_Snap-0095c4455f5bba6352abe0476948ef99b42a0c96.tar.bz2 android_packages_apps_Snap-0095c4455f5bba6352abe0476948ef99b42a0c96.zip |
SnapdragonCamera: Camera2 add zoom support
Add zoom support to Camera2
CRs-Fixed: 989750
Change-Id: Id6b558ff5215f04ca7c201b1d1807521d615c353
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rw-r--r-- | src/com/android/camera/CaptureModule.java | 74 |
1 files changed, 65 insertions, 9 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 699f66121..7362a6582 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -63,6 +63,7 @@ import com.android.camera.util.CameraUtil; import org.codeaurora.snapcam.R; import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; @@ -133,6 +134,9 @@ public class CaptureModule implements CameraModule, PhotoController, private CameraActivity mActivity; private PreferenceGroup mPreferenceGroup; private ComboPreferences mPreferences; + private CameraCharacteristics[] mCharacteristics = new CameraCharacteristics[MAX_NUM_CAM]; + private List<Integer> mCharacteristicsIndex; + private float mZoomValue = 1f; private LocationManager mLocationManager; /** @@ -346,7 +350,8 @@ public class CaptureModule implements CameraModule, PhotoController, mActivity.runOnUiThread(new Runnable() { @Override public void run() { - mUI.onCameraOpened(mPreferenceGroup, prefListener); + mUI.onCameraOpened(mCharacteristics, mCharacteristicsIndex, + mPreferenceGroup, prefListener); } }); } @@ -596,6 +601,7 @@ public class CaptureModule implements CameraModule, PhotoController, builder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO); builder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START); applyWhiteBalance(builder); + applyZoom(builder, id); mState[id] = STATE_WAITING_LOCK; mCaptureSession[id].capture(builder.build(), mCaptureCallback, mCameraHandler); } catch (CameraAccessException e) { @@ -622,7 +628,7 @@ public class CaptureModule implements CameraModule, PhotoController, captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO); captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest .CONTROL_AF_TRIGGER_IDLE); - applyCaptureSettings(captureBuilder); + applyCaptureSettings(captureBuilder, id); // Orientation int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); @@ -670,6 +676,7 @@ public class CaptureModule implements CameraModule, PhotoController, // Applying flash only to capture does not work. Need to apply flash here. applyFlash(builder); applyWhiteBalance(builder); + applyZoom(builder, id); mState[id] = STATE_WAITING_PRECAPTURE; mCaptureSession[id].capture(builder.build(), mCaptureCallback, mCameraHandler); } catch (CameraAccessException e) { @@ -684,8 +691,7 @@ public class CaptureModule implements CameraModule, PhotoController, * @param height The height of available size for camera preview */ private void setUpCameraOutputs() { - Activity activity = mActivity; - CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); + CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE); try { String[] cameraIdList = manager.getCameraIdList(); @@ -693,7 +699,8 @@ public class CaptureModule implements CameraModule, PhotoController, String cameraId = cameraIdList[i]; CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); - + mCharacteristics[i] = characteristics; + mCharacteristicsIndex.add(i); StreamConfigurationMap map = characteristics.get( CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); if (map == null) { @@ -737,6 +744,7 @@ public class CaptureModule implements CameraModule, PhotoController, CaptureRequest.CONTROL_AF_TRIGGER_CANCEL); //Todo: Create applyCommonSettings function for settings applied everytime applyWhiteBalance(builder); + applyZoom(builder, id); mCaptureSession[id].capture(builder.build(), mCaptureCallback, mCameraHandler); mState[id] = STATE_PREVIEW; mCaptureSession[id].setRepeatingRequest(mPreviewRequestBuilder[id].build(), @@ -848,7 +856,7 @@ public class CaptureModule implements CameraModule, PhotoController, @Override public void onPreviewFocusChanged(boolean previewFocused) { - + mUI.onPreviewFocusChanged(previewFocused); } @Override @@ -874,6 +882,7 @@ public class CaptureModule implements CameraModule, PhotoController, @Override public void onResumeAfterSuper() { Log.d(TAG, "onResume " + MODE); + mCharacteristicsIndex = new ArrayList<>(); setUpCameraOutputs(); readInitialValues(); startBackgroundThread(); @@ -922,7 +931,7 @@ public class CaptureModule implements CameraModule, PhotoController, @Override public boolean onBackPressed() { - return false; + return mUI.onBackPressed(); } @Override @@ -941,13 +950,31 @@ public class CaptureModule implements CameraModule, PhotoController, } @Override + public void onZoomChanged(float requestedZoom) { + mZoomValue = requestedZoom; + + switch (MODE) { + case DUAL_MODE: + applyZoomAndUpdate(BAYER_ID); + applyZoomAndUpdate(MONO_ID); + break; + case BAYER_MODE: + applyZoomAndUpdate(BAYER_ID); + break; + case MONO_MODE: + applyZoomAndUpdate(MONO_ID); + break; + } + } + + @Override public boolean isImageCaptureIntent() { return false; } @Override public boolean isCameraIdle() { - return false; + return true; } @Override @@ -1144,6 +1171,7 @@ public class CaptureModule implements CameraModule, PhotoController, mPreviewRequestBuilder[id].set(CaptureRequest.FLASH_MODE, CaptureRequest .FLASH_MODE_OFF); applyWhiteBalance(mPreviewRequestBuilder[id]); + applyZoom(mPreviewRequestBuilder[id], id); } private void readInitialValues() { @@ -1156,10 +1184,28 @@ public class CaptureModule implements CameraModule, PhotoController, } } - private void applyCaptureSettings(CaptureRequest.Builder request) { + public Rect cropRegionForZoom(int id) { + Rect activeRegion = mCharacteristics[id].get(CameraCharacteristics + .SENSOR_INFO_ACTIVE_ARRAY_SIZE); + Rect cropRegion = new Rect(); + + int xCenter = activeRegion.width() / 2; + int yCenter = activeRegion.height() / 2; + int xDelta = (int) (activeRegion.width() / (2 * mZoomValue)); + int yDelta = (int) (activeRegion.height() / (2 * mZoomValue)); + cropRegion.set(xCenter - xDelta, yCenter - yDelta, xCenter + xDelta, yCenter + yDelta); + return cropRegion; + } + + private void applyZoom(CaptureRequest.Builder request, int id) { + request.set(CaptureRequest.SCALER_CROP_REGION, cropRegionForZoom(id)); + } + + private void applyCaptureSettings(CaptureRequest.Builder request, int id) { applyFlash(request); applyWhiteBalance(request); applyJpegQuality(request); + applyZoom(request, id); } private void applyPreference(int cameraId, ListPreference pref) { @@ -1187,6 +1233,16 @@ public class CaptureModule implements CameraModule, PhotoController, } } + private void applyZoomAndUpdate(int id) { + applyZoom(mPreviewRequestBuilder[id], id); + try { + mCaptureSession[id].setRepeatingRequest(mPreviewRequestBuilder[id] + .build(), mCaptureCallback, mCameraHandler); + } catch (CameraAccessException e) { + e.printStackTrace(); + } + } + private void storeSetting(String key, String value) { mSettings.put(key, value); } |