summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/android/camera/CaptureModule.java46
-rwxr-xr-xsrc/com/android/camera/SettingsActivity.java6
-rwxr-xr-xsrc/com/android/camera/SettingsManager.java62
-rw-r--r--src/com/android/camera/imageprocessor/PostProcessor.java7
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;