diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/com/android/camera/CaptureModule.java | 46 | ||||
-rwxr-xr-x | src/com/android/camera/SettingsActivity.java | 6 | ||||
-rwxr-xr-x | src/com/android/camera/SettingsManager.java | 62 | ||||
-rw-r--r-- | src/com/android/camera/imageprocessor/PostProcessor.java | 7 |
4 files changed, 112 insertions, 9 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 7d70a569a..a3502a381 100755 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -235,7 +235,10 @@ public class CaptureModule implements CameraModule, PhotoController, new CaptureResult.Key<>("org.codeaurora.qcamera3.histogram.stats", int[].class); public static CameraCharacteristics.Key<Integer> isHdrScene = new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.stats.is_hdr_scene", Integer.class); - + public static CameraCharacteristics.Key<Byte> IS_SUPPORT_QCFA_SENSOR = + new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.quadra_cfa.is_qcfa_sensor", Byte.class); + public static CameraCharacteristics.Key<int[]> QCFA_SUPPORT_DIMENSION = + new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.quadra_cfa.qcfa_dimension", int[].class); public static CameraCharacteristics.Key<Byte> bsgcAvailable = new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.stats.bsgc_available", Byte.class); public static CaptureResult.Key<byte[]> blinkDetected = @@ -282,6 +285,7 @@ public class CaptureModule implements CameraModule, PhotoController, private boolean mIsLinked = false; private long mCaptureStartTime; private boolean mPaused = true; + private boolean mIsSupportedQcfa = false; private Semaphore mSurfaceReadyLock = new Semaphore(1); private boolean mSurfaceReady = true; private boolean[] mCameraOpened = new boolean[MAX_NUM_CAM]; @@ -1512,7 +1516,9 @@ public class CaptureModule implements CameraModule, PhotoController, } applySettingsForJpegInformation(captureBuilder, id); - addPreviewSurface(captureBuilder, null, id); + if (!mIsSupportedQcfa) { + addPreviewSurface(captureBuilder, null, id); + } VendorTagUtil.setCdsMode(captureBuilder, 2);// CDS 0-OFF, 1-ON, 2-AUTO applySettingsForCapture(captureBuilder, id); @@ -1525,7 +1531,9 @@ public class CaptureModule implements CameraModule, PhotoController, if (mSaveRaw) { captureBuilder.addTarget(mRawImageReader[id].getSurface()); } - mCaptureSession[id].stopRepeating(); + if (!mIsSupportedQcfa) { + mCaptureSession[id].stopRepeating(); + } if (mLongshotActive) { captureStillPictureForLongshot(captureBuilder, id); } else { @@ -1798,13 +1806,21 @@ public class CaptureModule implements CameraModule, PhotoController, } mImageReader[i].setOnImageAvailableListener(mPostProcessor.getImageHandler(), mImageAvailableHandler); mPostProcessor.onImageReaderReady(mImageReader[i], mSupportedMaxPictureSize, mPictureSize); - } else { + } else if (i == getMainCameraId()) { mImageReader[i] = ImageReader.newInstance(mPictureSize.getWidth(), mPictureSize.getHeight(), imageFormat, PersistUtil.getLongshotShotLimit()); ImageAvailableListener listener = new ImageAvailableListener(i) { @Override public void onImageAvailable(ImageReader reader) { + if (mIsSupportedQcfa) { + mHandler.post(new Runnable() { + @Override + public void run() { + mUI.enableShutter(true); + } + }); + } Log.d(TAG, "image available for cam: " + mCamId); Image image = reader.acquireNextImage(); @@ -1937,7 +1953,9 @@ public class CaptureModule implements CameraModule, PhotoController, @Override public void run() { mUI.stopSelfieFlash(); - mUI.enableShutter(true); + if (!mIsSupportedQcfa) { + mUI.enableShutter(true); + } mUI.enableVideo(true); } }); @@ -2398,6 +2416,16 @@ public class CaptureModule implements CameraModule, PhotoController, private void openProcessors() { String scene = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE); + mIsSupportedQcfa = mSettingsManager.getQcfaPrefEnabled() && + mSettingsManager.getIsSupportedQcfa(getMainCameraId()); + // add the judgement condition for special qcfa + if (mIsSupportedQcfa) { + Size qcfaSize = mSettingsManager.getQcfaSupportSize(); + if (mPictureSize.getWidth() <= qcfaSize.getWidth() / 2 && + mPictureSize.getHeight() <= qcfaSize.getHeight() / 2) { + mIsSupportedQcfa = false; + } + } boolean isFlashOn = false; boolean isMakeupOn = false; boolean isSelfieMirrorOn = false; @@ -2419,9 +2447,13 @@ public class CaptureModule implements CameraModule, PhotoController, if (scene != null) { int mode = Integer.parseInt(scene); Log.d(TAG, "Chosen postproc filter id : " + getPostProcFilterId(mode)); - mPostProcessor.onOpen(getPostProcFilterId(mode), isFlashOn, isTrackingFocusSettingOn(), isMakeupOn, isSelfieMirrorOn, mSaveRaw); + mPostProcessor.onOpen(getPostProcFilterId(mode), isFlashOn, + isTrackingFocusSettingOn(), isMakeupOn, isSelfieMirrorOn, + mSaveRaw, mIsSupportedQcfa); } else { - mPostProcessor.onOpen(PostProcessor.FILTER_NONE, isFlashOn, isTrackingFocusSettingOn(), isMakeupOn, isSelfieMirrorOn, mSaveRaw); + mPostProcessor.onOpen(PostProcessor.FILTER_NONE, isFlashOn, + isTrackingFocusSettingOn(), isMakeupOn, isSelfieMirrorOn, + mSaveRaw, mIsSupportedQcfa); } } if(mFrameProcessor != null) { diff --git a/src/com/android/camera/SettingsActivity.java b/src/com/android/camera/SettingsActivity.java index b7ef43332..6531cc81d 100755 --- a/src/com/android/camera/SettingsActivity.java +++ b/src/com/android/camera/SettingsActivity.java @@ -112,9 +112,15 @@ public class SettingsActivity extends PreferenceActivity { if (pref != null) { pref.setEnabled(enabled); } + if ( pref.getKey().equals(SettingsManager.KEY_MANUAL_EXPOSURE) ) { UpdateManualExposureSettings(); } + + if ( pref.getKey().equals(SettingsManager.KEY_QCFA) ) { + mSettingsManager.updateQcfaPictureSize(); + updatePreference(SettingsManager.KEY_PICTURE_SIZE); + } } } }; diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index 826662ee6..cc0555f1e 100755 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -77,6 +77,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import java.lang.StringBuilder; public class SettingsManager implements ListMenu.SettingsListener { public static final int RESOURCE_TYPE_THUMBNAIL = 0; @@ -153,6 +154,7 @@ public class SettingsManager implements ListMenu.SettingsListener { public static final String KEY_MANUAL_EXPOSURE = "pref_camera2_manual_exp_key"; public static final String KEY_MANUAL_ISO_VALUE = "pref_camera2_manual_iso_key"; public static final String KEY_MANUAL_EXPOSURE_VALUE = "pref_camera2_manual_exposure_key"; + public static final String KEY_QCFA = "pref_camera2_qcfa_key"; public static final HashMap<String, Integer> KEY_ISO_INDEX = new HashMap<String, Integer>(); public static final String KEY_BSGC_DETECTION = "pref_camera2_bsgc_key"; @@ -283,6 +285,18 @@ public class SettingsManager implements ListMenu.SettingsListener { notifyListeners(changed); } + public void updateQcfaPictureSize() { + ListPreference picturePref = mPreferenceGroup.findPreference(KEY_PICTURE_SIZE); + if (picturePref != null) { + picturePref.setEntries(mContext.getResources().getStringArray( + R.array.pref_camera2_picturesize_entries)); + picturePref.setEntryValues(mContext.getResources().getStringArray( + R.array.pref_camera2_picturesize_entryvalues)); + filterUnsupportedOptions(picturePref, getSupportedPictureSize( + getCurrentCameraId())); + } + } + public void init() { Log.d(TAG, "SettingsManager init"); int cameraId = getInitialCameraId(mPreferences); @@ -639,6 +653,7 @@ public class SettingsManager implements ListMenu.SettingsListener { ListPreference histogram = mPreferenceGroup.findPreference(KEY_HISTOGRAM); ListPreference hdr = mPreferenceGroup.findPreference(KEY_HDR); ListPreference zoom = mPreferenceGroup.findPreference(KEY_ZOOM); + ListPreference qcfa = mPreferenceGroup.findPreference(KEY_QCFA); ListPreference bsgc = mPreferenceGroup.findPreference(KEY_BSGC_DETECTION); if (whiteBalance != null) { @@ -1185,6 +1200,11 @@ public class SettingsManager implements ListMenu.SettingsListener { CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); Size[] sizes = map.getOutputSizes(ImageFormat.JPEG); List<String> res = new ArrayList<>(); + + if (getQcfaPrefEnabled() && getIsSupportedQcfa(cameraId)) { + res.add(getSupportedQcfaDimension(cameraId)); + } + if (sizes != null) { for (int i = 0; i < sizes.length; i++) { res.add(sizes[i].toString()); @@ -1474,6 +1494,48 @@ public class SettingsManager implements ListMenu.SettingsListener { return modes; } + public boolean getQcfaPrefEnabled() { + String qcfa = getValue(KEY_QCFA); + if(qcfa != null && qcfa.equals("enable")) { + return true; + } + return false; + } + + public boolean getIsSupportedQcfa (int cameraId) { + byte isSupportQcfa = 0; + try { + isSupportQcfa = mCharacteristics.get(cameraId).get( + CaptureModule.IS_SUPPORT_QCFA_SENSOR); + }catch(Exception e) { + } + return isSupportQcfa == 1 ? true : false; + } + + public String getSupportedQcfaDimension(int cameraId) { + int[] qcfaDimension = mCharacteristics.get(cameraId).get( + CaptureModule.QCFA_SUPPORT_DIMENSION); + if (qcfaDimension == null) { + return ""; + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < qcfaDimension.length; i ++) { + sb.append(qcfaDimension[i]); + if (i == 0) { + sb.append("x"); + } + } + return sb.toString(); + } + + public Size getQcfaSupportSize() { + String qcfaSize = getSupportedQcfaDimension(mCameraId); + if (qcfaSize != null) { + return parseSize(getSupportedQcfaDimension(mCameraId)); + } + return new Size(0, 0); + } + public List<String> getSupportedSaturationLevelAvailableModes(int cameraId) { int[] saturationLevelAvailableModes = {0,1,2,3,4,5,6,7,8,9,10}; List<String> modes = new ArrayList<>(); diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java index d70743be9..4f77b90e4 100644 --- a/src/com/android/camera/imageprocessor/PostProcessor.java +++ b/src/com/android/camera/imageprocessor/PostProcessor.java @@ -674,7 +674,9 @@ public class PostProcessor{ return false; } - public void onOpen(int postFilterId, boolean isFlashModeOn, boolean isTrackingFocusOn, boolean isMakeupOn, boolean isSelfieMirrorOn, boolean isSaveRaw) { + public void onOpen(int postFilterId, boolean isFlashModeOn, boolean isTrackingFocusOn, + boolean isMakeupOn, boolean isSelfieMirrorOn, boolean isSaveRaw, + boolean isSupportedQcfa) { mImageHandlerTask = new ImageHandlerTask(); mSaveRaw = isSaveRaw; if(setFilter(postFilterId) || isFlashModeOn || isTrackingFocusOn || isMakeupOn || isSelfieMirrorOn @@ -685,7 +687,8 @@ public class PostProcessor{ || SettingsManager.getInstance().isCamera2HDRSupport() || "18".equals(SettingsManager.getInstance().getValue( SettingsManager.KEY_SCENE_MODE)) - || mController.getCameraMode() == CaptureModule.DUAL_MODE) { + || mController.getCameraMode() == CaptureModule.DUAL_MODE + || isSupportedQcfa) { mUseZSL = false; } else { mUseZSL = true; |