summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/drawable/flash_auto.pngbin0 -> 15865 bytes
-rw-r--r--res/values/camera2arrays.xml3
-rw-r--r--res/values/qcomstrings.xml2
-rw-r--r--res/xml/capture_preferences.xml14
-rw-r--r--src/com/android/camera/CaptureModule.java65
-rw-r--r--src/com/android/camera/CaptureUI.java12
-rw-r--r--src/com/android/camera/SettingsManager.java1
-rw-r--r--src/com/android/camera/ui/FlashToggleButton.java36
8 files changed, 94 insertions, 39 deletions
diff --git a/res/drawable/flash_auto.png b/res/drawable/flash_auto.png
new file mode 100644
index 000000000..0661ea61d
--- /dev/null
+++ b/res/drawable/flash_auto.png
Binary files differ
diff --git a/res/values/camera2arrays.xml b/res/values/camera2arrays.xml
index 3108cf8a3..107ae5bb5 100644
--- a/res/values/camera2arrays.xml
+++ b/res/values/camera2arrays.xml
@@ -321,16 +321,19 @@
<!-- Camera Preferences flash mode dialog box entries -->
<string-array name="pref_camera2_flashmode_entries" translatable="false">
<item>@string/pref_camera_flashmode_entry_off</item>
+ <item>@string/pref_camera_flashmode_entry_auto</item>
<item>@string/pref_camera_flashmode_entry_on</item>
</string-array>
<string-array name="pref_camera2_flashmode_labels" translatable="false">
<item>@string/pref_camera_flashmode_label_off</item>
+ <item>@string/pref_camera_flashmode_label_auto</item>
<item>@string/pref_camera_flashmode_label_on</item>
</string-array>
<string-array name="pref_camera2_flashmode_entryvalues" translatable="false">
<item>@string/setting_off_value</item>
+ <item>@string/pref_camera2_flashmode_value_auto</item>
<item>@string/setting_on_value</item>
</string-array>
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml
index b6e6afdce..b7d30bca7 100644
--- a/res/values/qcomstrings.xml
+++ b/res/values/qcomstrings.xml
@@ -999,7 +999,7 @@
<string name="pref_camera2_scenemode_default" translatable="false">0</string>
<string name="pref_camera2_whitebalance_default" translatable="false">1</string>
<string name="pref_camera2_coloreffect_default" translatable="false">0</string>
- <string name="pref_camera2_flashmode_default" translatable="false">@string/setting_off_value</string>
+ <string name="pref_camera2_flashmode_value_auto" translatable="false">auto</string>
<string name="pref_camera2_makeup_title" translatable="true">Makeup</string>
diff --git a/res/xml/capture_preferences.xml b/res/xml/capture_preferences.xml
index 64633c362..93b55bde1 100644
--- a/res/xml/capture_preferences.xml
+++ b/res/xml/capture_preferences.xml
@@ -31,13 +31,10 @@
xmlns:camera="http://schemas.android.com/apk/res/org.codeaurora.snapcam"
camera:title="@string/pref_camera_settings_category">
<IconListPreference
- camera:defaultValue="@string/pref_camera2_flashmode_default"
+ camera:defaultValue="@string/pref_camera2_flashmode_value_auto"
camera:entries="@array/pref_camera2_flashmode_entries"
camera:entryValues="@array/pref_camera2_flashmode_entryvalues"
- camera:icons="@array/pref_camera2_flashmode_icons"
camera:key="pref_camera2_flashmode_key"
- camera:labelList="@array/pref_camera2_flashmode_labels"
- camera:largeIcons="@array/pref_camera2_flashmode_largeicons"
camera:singleIcon="@drawable/ic_settings_flash"
camera:title="@string/pref_camera_flashmode_title"/>
@@ -234,6 +231,15 @@
camera:key="pref_camera2_noise_reduction_key"
camera:title="@string/pref_camera_noise_reduction_title"/>
+ <IconListPreference
+ camera:defaultValue="@string/pref_camera_video_flashmode_default"
+ camera:entries="@array/pref_camera2_video_flashmode_entries"
+ camera:entryValues="@array/pref_camera2_video_flashmode_entryvalues"
+ camera:icons="@array/video_flashmode_icons"
+ camera:key="pref_camera2_video_flashmode_key"
+ camera:singleIcon="@drawable/ic_settings_flash"
+ camera:title="@string/pref_camera_flashmode_title" />
+
<ListPreference
camera:defaultValue="@string/pref_camera_video_rotation_default"
camera:entries="@array/pref_camera2_video_rotation_entries"
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 14789f128..c83abede2 100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -285,6 +285,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private boolean mHighSpeedCapture = false;
private boolean mHighSpeedCaptureSlowMode = false; //HFR
private int mHighSpeedCaptureRate;
+ private CaptureRequest.Builder mVideoRequestBuilder;
private static final int SELFIE_FLASH_DURATION = 680;
@@ -2401,8 +2402,7 @@ public class CaptureModule implements CameraModule, PhotoController,
try {
setUpMediaRecorder(cameraId);
createVideoSnapshotImageReader();
- final CaptureRequest.Builder mPreviewBuilder = mCameraDevice[cameraId]
- .createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
+ mVideoRequestBuilder = mCameraDevice[cameraId].createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
List<Surface> surfaces = new ArrayList<>();
Surface surface = getPreviewSurfaceForSession(cameraId);
@@ -2416,10 +2416,10 @@ public class CaptureModule implements CameraModule, PhotoController,
}
mFrameProcessor.setOutputSurface(surface);
mFrameProcessor.setVideoOutputSurface(mMediaRecorder.getSurface());
- addPreviewSurface(mPreviewBuilder, surfaces, cameraId);
+ addPreviewSurface(mVideoRequestBuilder, surfaces, cameraId);
if (!mHighSpeedCapture) surfaces.add(mVideoSnapshotImageReader.getSurface());
- else mPreviewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, mHighSpeedFPSRange);
+ else mVideoRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, mHighSpeedFPSRange);
if (!mHighSpeedCapture) {
mCameraDevice[cameraId].createCaptureSession(surfaces, new CameraCaptureSession
@@ -2430,8 +2430,8 @@ public class CaptureModule implements CameraModule, PhotoController,
Log.d(TAG, "StartRecordingVideo session onConfigured");
mCurrentSession = cameraCaptureSession;
try {
- setUpVideoCaptureRequestBuilder(mPreviewBuilder);
- mCurrentSession.setRepeatingRequest(mPreviewBuilder.build(), null, mCameraHandler);
+ setUpVideoCaptureRequestBuilder(mVideoRequestBuilder);
+ mCurrentSession.setRepeatingRequest(mVideoRequestBuilder.build(), null, mCameraHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
@@ -2440,7 +2440,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mUI.resetPauseButton();
mRecordingTotalTime = 0L;
mRecordingStartTime = SystemClock.uptimeMillis();
- mUI.showRecordingUI(true);
+ mUI.showRecordingUI(true, false);
updateRecordingTime();
}
@@ -2460,7 +2460,7 @@ public class CaptureModule implements CameraModule, PhotoController,
(CameraConstrainedHighSpeedCaptureSession) mCurrentSession;
try {
List list = session
- .createHighSpeedRequestList(mPreviewBuilder.build());
+ .createHighSpeedRequestList(mVideoRequestBuilder.build());
session.setRepeatingBurst(list, null, mCameraHandler);
} catch (CameraAccessException e) {
Log.e(TAG, "Failed to start high speed video recording "
@@ -2480,7 +2480,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mUI.resetPauseButton();
mRecordingTotalTime = 0L;
mRecordingStartTime = SystemClock.uptimeMillis();
- mUI.showRecordingUI(true);
+ mUI.showRecordingUI(true, true);
updateRecordingTime();
}
@@ -2531,10 +2531,20 @@ public class CaptureModule implements CameraModule, PhotoController,
applyVideoFlash(builder);
}
+ private void updateVideoFlash() {
+ if (!mIsRecordingVideo || mHighSpeedCapture) return;
+ applyVideoFlash(mVideoRequestBuilder);
+ try {
+ mCurrentSession.setRepeatingRequest(mVideoRequestBuilder.build(), null, mCameraHandler);
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+ }
+
private void applyVideoFlash(CaptureRequest.Builder builder) {
- String value = mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE);
+ String value = mSettingsManager.getValue(SettingsManager.KEY_VIDEO_FLASH_MODE);
if (value == null) return;
- boolean flashOn = value.equals("on");
+ boolean flashOn = value.equals("torch");
if (flashOn) {
builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
@@ -2664,7 +2674,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mMediaRecorder.stop();
mMediaRecorder.reset();
saveVideo();
- mUI.showRecordingUI(false);
+ mUI.showRecordingUI(false, false);
mIsRecordingVideo = false;
if(mFrameProcessor != null) {
@@ -2981,7 +2991,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private boolean isFlashOff(int id) {
if (!mSettingsManager.isFlashSupported(id)) return true;
- return mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE).equals("1");
+ return mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE).equals("off");
}
private void initializePreviewConfiguration(int id) {
@@ -3127,24 +3137,26 @@ public class CaptureModule implements CameraModule, PhotoController,
}
private void applyFlash(CaptureRequest.Builder request, String value) {
- boolean flashOn = value.equals("on");
String redeye = mSettingsManager.getValue(SettingsManager.KEY_REDEYE_REDUCTION);
- boolean redeyeOn = redeye != null && redeye.equals("on");
- if (redeyeOn) {
+ if (redeye != null && redeye.equals("on")) {
request.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE);
} else {
- if (flashOn) {
- request.set(CaptureRequest.CONTROL_AE_MODE,
- CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
- request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
- } else {
- request.set(CaptureRequest.CONTROL_AE_MODE,
- CaptureRequest.CONTROL_AE_MODE_ON);
- request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
+ switch (value) {
+ case "on":
+ request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
+ request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
+ break;
+ case "auto":
+ request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
+ request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);
+ break;
+ case "off":
+ request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
+ request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
+ break;
}
-
}
}
@@ -3358,6 +3370,9 @@ public class CaptureModule implements CameraModule, PhotoController,
case SettingsManager.KEY_LONGSHOT:
if (count == 0) restart();
return;
+ case SettingsManager.KEY_VIDEO_FLASH_MODE:
+ updateVideoFlash();
+ return;
case SettingsManager.KEY_FLASH_MODE:
if (count == 0) restart(); //Restart is due to ZSL mode change
return;
diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java
index 3531f06ff..ba57f5770 100644
--- a/src/com/android/camera/CaptureUI.java
+++ b/src/com/android/camera/CaptureUI.java
@@ -485,7 +485,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
}
public void initFlashButton() {
- mFlashButton.init();
+ mFlashButton.init(false);
}
public void initSceneModeButton() {
@@ -524,14 +524,20 @@ public class CaptureUI implements FocusOverlayManager.FocusUI,
}
}
- public void showRecordingUI(boolean recording) {
- mFlashButton.setVisibility(recording ? View.GONE : View.VISIBLE);
+ public void showRecordingUI(boolean recording, boolean highspeed) {
if (recording) {
+ if (highspeed) {
+ mFlashButton.setVisibility(View.GONE);
+ } else {
+ mFlashButton.init(true);
+ }
mVideoButton.setImageResource(R.drawable.video_stop);
mRecordingTimeView.setText("");
((ViewGroup)mRootView).addView(mRecordingTimeRect);
mMuteButton.setVisibility(View.VISIBLE);
} else {
+ mFlashButton.setVisibility(View.VISIBLE);
+ mFlashButton.init(false);
mVideoButton.setImageResource(R.drawable.video_capture);
((ViewGroup)mRootView).removeView(mRecordingTimeRect);
mMuteButton.setVisibility(View.INVISIBLE);
diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java
index 9d8069b4e..e6ced7439 100644
--- a/src/com/android/camera/SettingsManager.java
+++ b/src/com/android/camera/SettingsManager.java
@@ -113,6 +113,7 @@ public class SettingsManager implements ListMenu.SettingsListener {
public static final String KEY_AUDIO_ENCODER = "pref_camera2_audioencoder_key";
public static final String KEY_DIS = "pref_camera2_dis_key";
public static final String KEY_NOISE_REDUCTION = "pref_camera2_noise_reduction_key";
+ public static final String KEY_VIDEO_FLASH_MODE = "pref_camera2_video_flashmode_key";
public static final String KEY_VIDEO_ROTATION = "pref_camera2_video_rotation_key";
public static final String KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL =
"pref_camera2_video_time_lapse_frame_interval_key";
diff --git a/src/com/android/camera/ui/FlashToggleButton.java b/src/com/android/camera/ui/FlashToggleButton.java
index d429996f9..2dd37cbbc 100644
--- a/src/com/android/camera/ui/FlashToggleButton.java
+++ b/src/com/android/camera/ui/FlashToggleButton.java
@@ -41,8 +41,10 @@ import org.codeaurora.snapcam.R;
public class FlashToggleButton extends RotateImageView {
private SettingsManager mSettingsManager;
- private int[] iconResId = {R.drawable.flash_off, R.drawable.flash};
+ private int[] cameraFlashIcon = {R.drawable.flash_off, R.drawable.flash_auto, R.drawable.flash};
+ private int[] videoFlashIcon = {R.drawable.flash_off, R.drawable.flash};
private int mIndex;
+ private boolean mIsVideoFlash;
public FlashToggleButton(Context context) {
super(context);
@@ -52,9 +54,16 @@ public class FlashToggleButton extends RotateImageView {
super(context, attrs);
}
- public void init() {
+ public void init(boolean videoFlash) {
+ mIsVideoFlash = videoFlash;
+ String key;
+ if (mIsVideoFlash) {
+ key = SettingsManager.KEY_VIDEO_FLASH_MODE;
+ } else {
+ key = SettingsManager.KEY_FLASH_MODE;
+ }
mSettingsManager = SettingsManager.getInstance();
- mIndex = mSettingsManager.getValueIndex(SettingsManager.KEY_FLASH_MODE);
+ mIndex = mSettingsManager.getValueIndex(key);
if (mIndex == -1) {
setVisibility(GONE);
return;
@@ -66,14 +75,29 @@ public class FlashToggleButton extends RotateImageView {
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- mIndex = (mIndex + 1) % 2;
- mSettingsManager.setValueIndex(SettingsManager.KEY_FLASH_MODE, mIndex);
+ int[] icons;
+ String key;
+ if (mIsVideoFlash) {
+ icons = videoFlashIcon;
+ key = SettingsManager.KEY_VIDEO_FLASH_MODE;
+ } else {
+ icons = cameraFlashIcon;
+ key = SettingsManager.KEY_FLASH_MODE;
+ }
+ mIndex = (mIndex + 1) % icons.length;
+ mSettingsManager.setValueIndex(key, mIndex);
update();
}
});
}
private void update() {
- setImageResource(iconResId[mIndex]);
+ int[] icons;
+ if (mIsVideoFlash) {
+ icons = videoFlashIcon;
+ } else {
+ icons = cameraFlashIcon;
+ }
+ setImageResource(icons[mIndex]);
}
}