summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/photo_module.xml6
-rw-r--r--res/values/qcomarrays.xml11
-rw-r--r--res/values/qcomstrings.xml10
-rw-r--r--res/xml/camera_preferences.xml6
-rw-r--r--src/com/android/camera/AndroidCameraManagerImpl.java12
-rw-r--r--src/com/android/camera/CameraManager.java7
-rw-r--r--src/com/android/camera/CameraSettings.java3
-rw-r--r--src/com/android/camera/PhotoMenu.java11
-rw-r--r--src/com/android/camera/PhotoModule.java121
-rw-r--r--src/com/android/camera/util/CameraUtil.java4
10 files changed, 183 insertions, 8 deletions
diff --git a/res/layout/photo_module.xml b/res/layout/photo_module.xml
index c59d74300..89bc1ff39 100644
--- a/res/layout/photo_module.xml
+++ b/res/layout/photo_module.xml
@@ -56,6 +56,12 @@
android:layout_height="200dip"
android:layout_marginTop="60dip"
android:layout_marginLeft="90dip" />
+ <com.android.camera.DrawAutoHDR
+ android:id="@+id/autohdr_view"
+ android:layout_width="200dip"
+ android:layout_height="200dip"
+ android:layout_marginTop="15dip"
+ android:layout_marginLeft="15dip" />
<TableLayout
android:id="@+id/relative_seek"
android:layout_width="match_parent"
diff --git a/res/values/qcomarrays.xml b/res/values/qcomarrays.xml
index c19bd673c..bd808fed3 100644
--- a/res/values/qcomarrays.xml
+++ b/res/values/qcomarrays.xml
@@ -590,5 +590,16 @@
<item>@string/setting_on_value</item>
</string-array>
+ <!-- AUTO HDR dialog box entries -->
+ <string-array name="pref_camera_auto_hdr_entries" translatable="false">
+ <item>@string/pref_camera_auto_hdr_entry_enable</item>
+ <item>@string/pref_camera_auto_hdr_entry_disable</item>
+ </string-array>
+
+ <string-array name="pref_camera_auto_hdr_entryvalues" translatable="false">
+ <item>@string/pref_camera_auto_hdr_value_enable</item>
+ <item>@string/pref_camera_auto_hdr_value_disable</item>
+ </string-array>
+
</resources>
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml
index ab5381451..b54fb1f91 100644
--- a/res/values/qcomstrings.xml
+++ b/res/values/qcomstrings.xml
@@ -666,5 +666,15 @@
<!-- Toast showing non-supported functionality for flash in AE bracket -->
<string name="flash_aebracket_message">Flash is not supported in AE-Bracket Mode</string>
+ <!-- Settings screen, setting title text for Auto HDR-->
+ <string name="pref_camera_auto_hdr_title">AUTO HDR</string>
+ <string name="pref_camera_auto_hdr_default" translatable="false">
+ disable</string>
+
+ <!-- Settings screen, Auto HDR location dialog choices -->
+ <string name="pref_camera_auto_hdr_entry_enable">Enable</string>
+ <string name="pref_camera_auto_hdr_entry_disable">Disable</string>
+ <string name="pref_camera_auto_hdr_value_enable">enable</string>
+ <string name="pref_camera_auto_hdr_value_disable">disable</string>
</resources>
diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml
index db56927a7..f1d16fda5 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -250,4 +250,10 @@
camera:entries="@array/pref_camera_longshot_entries"
camera:entryValues="@array/pref_camera_longshot_entryvalues" />
+ <ListPreference
+ camera:key="pref_camera_auto_hdr_key"
+ camera:defaultValue="@string/pref_camera_auto_hdr_default"
+ camera:title="@string/pref_camera_auto_hdr_title"
+ camera:entries="@array/pref_camera_auto_hdr_entries"
+ camera:entryValues="@array/pref_camera_auto_hdr_entryvalues" />
</PreferenceGroup>
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index f833cb279..75f127a68 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -40,6 +40,7 @@ import android.os.Message;
import android.util.Log;
import android.view.SurfaceHolder;
import android.hardware.Camera.CameraDataCallback;
+import android.hardware.Camera.CameraMetaDataCallback;
import com.android.camera.util.ApiHelper;
import android.os.ConditionVariable;
@@ -94,7 +95,7 @@ class AndroidCameraManagerImpl implements CameraManager {
private static final int SEND_HISTOGRAM_DATA = 602;
//LONGSHOT
private static final int SET_LONGSHOT = 701;
-
+ private static final int SET_AUTO_HDR_MODE = 801;
private CameraHandler mCameraHandler;
private android.hardware.Camera mCamera;
@@ -343,6 +344,10 @@ class AndroidCameraManagerImpl implements CameraManager {
mCamera.setLongshot((Boolean) msg.obj);
break;
+ case SET_AUTO_HDR_MODE:
+ mCamera.setMetadataCb((CameraMetaDataCallback) msg.obj);
+ break;
+
default:
throw new RuntimeException("Invalid CameraProxy message=" + msg.what);
}
@@ -435,6 +440,11 @@ class AndroidCameraManagerImpl implements CameraManager {
}
@Override
+ public void setMetadataCb(CameraMetaDataCallback cb){
+ mCameraHandler.obtainMessage(SET_AUTO_HDR_MODE, cb).sendToTarget();
+ }
+
+ @Override
public void setPreviewTexture(SurfaceTexture surfaceTexture) {
mCameraHandler.obtainMessage(SET_PREVIEW_TEXTURE_ASYNC, surfaceTexture).sendToTarget();
}
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java
index 8ad0d52d6..1856ec85c 100644
--- a/src/com/android/camera/CameraManager.java
+++ b/src/com/android/camera/CameraManager.java
@@ -26,6 +26,7 @@ import android.os.Build;
import android.os.Handler;
import android.view.SurfaceHolder;
import android.hardware.Camera.CameraDataCallback;
+import android.hardware.Camera.CameraMetaDataCallback;
/**
* An interface which provides possible camera device operations.
@@ -166,6 +167,12 @@ public interface CameraManager {
public void release();
/**
+ * Sets the metadata cb
+ * @cb Metadata callback object
+ */
+ public void setMetadataCb (CameraMetaDataCallback cb);
+
+ /**
* Reconnects to the camera device.
* @see android.hardware.Camera#reconnect()
*
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index c70ee9909..481677cc6 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -127,6 +127,8 @@ public class CameraSettings {
private static final String TRUE = "true";
private static final String FALSE = "false";
+ public static final String KEY_AUTO_HDR = "pref_camera_auto_hdr_key";
+
//for flip
public static final String KEY_QC_PREVIEW_FLIP = "preview-flip";
public static final String KEY_QC_VIDEO_FLIP = "video-flip";
@@ -351,6 +353,7 @@ public class CameraSettings {
ListPreference pictureFormat = group.findPreference(KEY_PICTURE_FORMAT);
ListPreference hfr = group.findPreference(KEY_VIDEO_HIGH_FRAME_RATE);
ListPreference longShot = group.findPreference(KEY_LONGSHOT);
+ ListPreference auto_hdr = group.findPreference(KEY_AUTO_HDR);
if (touchAfAec != null) {
filterUnsupportedOptions(group,
diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java
index a9526962b..c80a49835 100644
--- a/src/com/android/camera/PhotoMenu.java
+++ b/src/com/android/camera/PhotoMenu.java
@@ -104,7 +104,8 @@ public class PhotoMenu extends PieController
CameraSettings.KEY_TIMER,
CameraSettings.KEY_TIMER_SOUND_EFFECTS,
CameraSettings.KEY_CAMERA_SAVEPATH,
- CameraSettings.KEY_LONGSHOT
+ CameraSettings.KEY_LONGSHOT,
+ CameraSettings.KEY_AUTO_HDR
};
mOtherKeys2 = new String[] {
@@ -252,7 +253,10 @@ public class PhotoMenu extends PieController
String faceDetection = (pref != null) ? pref.getValue() : null;
pref = mPreferenceGroup.findPreference(CameraSettings.KEY_ZSL);
String zsl = (pref != null) ? pref.getValue() : null;
- if ((sceneMode != null) && !Parameters.SCENE_MODE_AUTO.equals(sceneMode)){
+ pref = mPreferenceGroup.findPreference (CameraSettings.KEY_AUTO_HDR);
+ String autohdr = (pref != null) ? pref.getValue() : null;
+ if (((sceneMode != null) && !Parameters.SCENE_MODE_AUTO.equals(sceneMode))
+ || ((autohdr != null) && autohdr.equals("enable"))) {
popup3.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE,false);
popup2.setPreferenceEnabled(CameraSettings.KEY_AUTOEXPOSURE,false);
popup2.setPreferenceEnabled(CameraSettings.KEY_TOUCH_AF_AEC,false);
@@ -264,6 +268,9 @@ public class PhotoMenu extends PieController
popup3.setPreferenceEnabled(CameraSettings.KEY_WHITE_BALANCE,false);
popup3.setPreferenceEnabled(CameraSettings.KEY_EXPOSURE,false);
}
+ if ((autohdr != null) && autohdr.equals("enable")) {
+ popup1.setPreferenceEnabled(CameraSettings.KEY_SCENE_MODE,false);
+ }
if ((zsl != null) && Parameters.ZSL_ON.equals(zsl)) {
popup3.setPreferenceEnabled(CameraSettings.KEY_FOCUS_MODE,false);
}
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index a6f8fb239..7803bad04 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -112,7 +112,7 @@ public class PhotoModule
private int mBurstSnapNum = 1;
private int mReceivedSnapNum = 0;
public boolean mFaceDetectionEnabled = false;
-
+ private DrawAutoHDR mDrawAutoHDR;
/*Histogram variables*/
private GraphView mGraphView;
private static final int STATS_DATA = 257;
@@ -158,6 +158,7 @@ public class PhotoModule
private PhotoUI mUI;
+ public boolean mAutoHdrEnable;
// The activity is going to switch to the specified camera id. This is
// needed because texture copy is done in GL thread. -1 means camera is not
// switching.
@@ -278,7 +279,7 @@ public class PhotoModule
private final CameraErrorCallback mErrorCallback = new CameraErrorCallback();
private final StatsCallback mStatsCallback = new StatsCallback();
-
+ private final MetaDataCallback mMetaDataCallback = new MetaDataCallback();
private long mFocusStartTime;
private long mShutterCallbackTime;
private long mPostViewPictureCallbackTime;
@@ -712,11 +713,13 @@ public class PhotoModule
}
mNamedImages = new NamedImages();
- mGraphView = (GraphView)mRootView.findViewById(R.id.graph_view);
- if(mGraphView == null){
- Log.e(TAG, "mGraphView is null");
+ mGraphView = (GraphView)mRootView.findViewById(R.id.graph_view);
+ mDrawAutoHDR = (DrawAutoHDR )mRootView.findViewById(R.id.autohdr_view);
+ if (mGraphView == null || mDrawAutoHDR == null){
+ Log.e(TAG, "mGraphView or mDrawAutoHDR is null");
} else{
mGraphView.setPhotoModuleObject(this);
+ mDrawAutoHDR.setPhotoModuleObject(this);
}
mFirstTimeInitialized = true;
@@ -874,6 +877,47 @@ public class PhotoModule
});
}
}
+
+ private final class MetaDataCallback
+ implements android.hardware.Camera.CameraMetaDataCallback{
+ @Override
+ public void onCameraMetaData (byte[] data, android.hardware.Camera camera) {
+ int metadata[] = new int[3];
+ if (data.length <= 12) {
+ for (int i =0;i<3;i++) {
+ metadata[i] = byteToInt( (byte []) data, i*4);
+ }
+ if (metadata[2] == 1) {
+ mAutoHdrEnable = true;
+ mActivity.runOnUiThread(new Runnable() {
+ public void run() {
+ if (mDrawAutoHDR != null)
+ mDrawAutoHDR.AutoHDR();
+ }
+ });
+ }
+ else {
+ mAutoHdrEnable = false;
+ mActivity.runOnUiThread(new Runnable() {
+ public void run() {
+ if (mDrawAutoHDR != null)
+ mDrawAutoHDR.AutoHDR();
+ }
+ });
+ }
+ }
+ }
+
+ private int byteToInt (byte[] b, int offset) {
+ int value = 0;
+ for (int i = 0; i < 4; i++) {
+ int shift = (4 - 1 - i) * 8;
+ value += (b[(3-i) + offset] & 0x000000FF) << shift;
+ }
+ return value;
+ }
+ }
+
private final class PostViewPictureCallback
implements CameraPictureCallback {
@Override
@@ -2528,6 +2572,32 @@ public class PhotoModule
String zsl = mPreferences.getString(CameraSettings.KEY_ZSL,
mActivity.getString(R.string.pref_camera_zsl_default));
+ String auto_hdr = mPreferences.getString(CameraSettings.KEY_AUTO_HDR,
+ mActivity.getString(R.string.pref_camera_hdr_default));
+ if (CameraUtil.isAutoHDRSupported(mParameters)) {
+ mParameters.setAutoHDRMode(auto_hdr);
+ if (auto_hdr.equals("enable")) {
+ mActivity.runOnUiThread(new Runnable() {
+ public void run() {
+ if (mDrawAutoHDR != null) {
+ mDrawAutoHDR.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+ mParameters.setSceneMode("asd");
+ mCameraDevice.setMetadataCb(mMetaDataCallback);
+ }
+ else {
+ mAutoHdrEnable = false;
+ mActivity.runOnUiThread( new Runnable() {
+ public void run () {
+ if (mDrawAutoHDR != null) {
+ mDrawAutoHDR.setVisibility (View.INVISIBLE);
+ }
+ }
+ });
+ }
+ }
mParameters.setZSLMode(zsl);
if(zsl.equals("on")) {
//Switch on ZSL Camera mode
@@ -3411,3 +3481,44 @@ class GraphView extends View {
mPhotoModule = photoModule;
}
}
+
+class DrawAutoHDR extends View{
+
+ private static final String TAG = "AutoHdrView";
+ private PhotoModule mPhotoModule;
+
+ public DrawAutoHDR (Context context, AttributeSet attrs) {
+ super(context,attrs);
+ }
+
+ @Override
+ protected void onDraw (Canvas canvas) {
+ if (mPhotoModule == null)
+ return;
+ if (mPhotoModule.mAutoHdrEnable) {
+ Paint AutoHDRPaint = new Paint();
+ AutoHDRPaint.setColor(Color.WHITE);
+ AutoHDRPaint.setAlpha (0);
+ canvas.drawPaint(AutoHDRPaint);
+ AutoHDRPaint.setStyle(Paint.Style.STROKE);
+ AutoHDRPaint.setColor(Color.MAGENTA);
+ AutoHDRPaint.setStrokeWidth(1);
+ AutoHDRPaint.setTextSize(16);
+ AutoHDRPaint.setAlpha (255);
+ canvas.drawText("HDR On",200,100,AutoHDRPaint);
+ }
+ else {
+ super.onDraw(canvas);
+ return;
+ }
+ }
+
+ public void AutoHDR () {
+ invalidate();
+ }
+
+ public void setPhotoModuleObject (PhotoModule photoModule) {
+ mPhotoModule = photoModule;
+ }
+
+}
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index 68211d648..d90b52552 100644
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -108,6 +108,7 @@ public class CameraUtil {
private static final String AUTO_EXPOSURE_LOCK_SUPPORTED = "auto-exposure-lock-supported";
private static final String AUTO_WHITE_BALANCE_LOCK_SUPPORTED = "auto-whitebalance-lock-supported";
private static final String VIDEO_SNAPSHOT_SUPPORTED = "video-snapshot-supported";
+ private static final String AUTO_HDR_SUPPORTED = "auto-hdr-supported";
public static final String SCENE_MODE_HDR = "hdr";
public static final String TRUE = "true";
public static final String FALSE = "false";
@@ -127,6 +128,9 @@ public class CameraUtil {
return TRUE.equals(params.get(AUTO_EXPOSURE_LOCK_SUPPORTED));
}
+ public static boolean isAutoHDRSupported(Parameters params) {
+ return TRUE.equals(params.get(AUTO_HDR_SUPPORTED));
+ }
public static boolean isAutoWhiteBalanceLockSupported(Parameters params) {
return TRUE.equals(params.get(AUTO_WHITE_BALANCE_LOCK_SUPPORTED));
}