summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/AndroidCameraManagerImpl.java20
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/CameraManager.java14
-rwxr-xr-xsrc/com/android/camera/PhotoModule.java69
-rw-r--r--[-rwxr-xr-x]src_wrapper/org/codeaurora/snapcam/wrapper/CameraWrapper.java36
4 files changed, 139 insertions, 0 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index e16d37e86..cad136cde 100755..100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -39,6 +39,8 @@ import android.os.Looper;
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;
import java.lang.reflect.Method;
@@ -93,6 +95,7 @@ class AndroidCameraManagerImpl implements CameraManager {
private static final int ENABLE_SHUTTER_SOUND = 501;
private static final int SET_DISPLAY_ORIENTATION = 502;
// Histogram
+ private static final int SET_HISTOGRAM_MODE = 601;
private static final int SEND_HISTOGRAM_DATA = 602;
//LONGSHOT
private static final int SET_LONGSHOT = 701;
@@ -387,6 +390,10 @@ class AndroidCameraManagerImpl implements CameraManager {
mParametersIsDirty = true;
return;
+ case SET_HISTOGRAM_MODE:
+ CameraWrapper.setHistogramMode(mCamera, (CameraDataCallback) msg.obj);
+ break;
+
case SEND_HISTOGRAM_DATA:
CameraWrapper.sendHistogramData(mCamera);
break;
@@ -395,6 +402,10 @@ class AndroidCameraManagerImpl implements CameraManager {
CameraWrapper.setLongshot(mCamera, (Boolean) msg.obj);
break;
+ case SET_AUTO_HDR_MODE:
+ CameraWrapper.setMetadataCb(mCamera, (CameraMetaDataCallback) msg.obj);
+ break;
+
default:
throw new RuntimeException("Invalid CameraProxy message=" + msg.what);
}
@@ -493,6 +504,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();
}
@@ -647,6 +663,10 @@ class AndroidCameraManagerImpl implements CameraManager {
}
@Override
+ public void setHistogramMode(CameraDataCallback cb) {
+ mCameraHandler.obtainMessage(SET_HISTOGRAM_MODE, cb).sendToTarget();
+ }
+ @Override
public void sendHistogramData() {
mCameraHandler.sendEmptyMessage(SEND_HISTOGRAM_DATA);
}
diff --git a/src/com/android/camera/CameraManager.java b/src/com/android/camera/CameraManager.java
index d3ef9293d..b93e7182b 100755..100644
--- a/src/com/android/camera/CameraManager.java
+++ b/src/com/android/camera/CameraManager.java
@@ -25,6 +25,8 @@ import android.hardware.Camera.Parameters;
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.
*
@@ -173,6 +175,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()
*
@@ -359,6 +367,12 @@ public interface CameraManager {
*/
public void enableShutterSound(boolean enable);
/**
+ * Set histogram Mode
+ *
+ * @param cb cameraDataCallback to use
+ */
+ public void setHistogramMode(CameraDataCallback cb);
+ /**
* Send the Histogram Data.
*
*/
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index e84c32872..672b973d0 100755
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -324,6 +324,8 @@ public class PhotoModule
: null;
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;
@@ -1142,6 +1144,69 @@ public class PhotoModule
}
}
}
+ private final class StatsCallback
+ implements android.hardware.Camera.CameraDataCallback {
+ @Override
+ public void onCameraData(int [] data, android.hardware.Camera camera) {
+ //if(!mPreviewing || !mHiston || !mFirstTimeInitialized){
+ if(!mHiston || !mFirstTimeInitialized){
+ return;
+ }
+ /*The first element in the array stores max hist value . Stats data begin from second value*/
+ synchronized(statsdata) {
+ System.arraycopy(data,0,statsdata,0,STATS_DATA);
+ }
+ mActivity.runOnUiThread(new Runnable() {
+ public void run() {
+ if(mGraphView != null)
+ mGraphView.PreviewChanged();
+ }
+ });
+ }
+ }
+
+ 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);
+ }
+ /* Checking if the meta data is for auto HDR */
+ if (metadata[0] == 3) {
+ 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 {
@@ -1641,6 +1706,7 @@ public class PhotoModule
if(mHiston) {
if (mSnapshotMode != CameraInfoWrapper.CAMERA_SUPPORT_MODE_ZSL) {
mHiston = false;
+ mCameraDevice.setHistogramMode(null);
}
mActivity.runOnUiThread(new Runnable() {
public void run() {
@@ -3513,6 +3579,7 @@ public class PhotoModule
}
});
mParameters.setSceneMode("asd");
+ mCameraDevice.setMetadataCb(mMetaDataCallback);
}
else {
mAutoHdrEnable = false;
@@ -3614,6 +3681,7 @@ public class PhotoModule
}
}
});
+ mCameraDevice.setHistogramMode(mStatsCallback);
mHiston = true;
} else {
mHiston = false;
@@ -3623,6 +3691,7 @@ public class PhotoModule
mGraphView.setVisibility(View.INVISIBLE);
}
});
+ mCameraDevice.setHistogramMode(null);
}
}
diff --git a/src_wrapper/org/codeaurora/snapcam/wrapper/CameraWrapper.java b/src_wrapper/org/codeaurora/snapcam/wrapper/CameraWrapper.java
index 8078a38b8..6739686e9 100755..100644
--- a/src_wrapper/org/codeaurora/snapcam/wrapper/CameraWrapper.java
+++ b/src_wrapper/org/codeaurora/snapcam/wrapper/CameraWrapper.java
@@ -46,9 +46,45 @@ import android.hardware.Camera.ShutterCallback;
import android.util.Log;
import android.view.SurfaceHolder;
+import android.hardware.Camera.CameraMetaDataCallback;
+import android.hardware.Camera.CameraDataCallback;
+
public class CameraWrapper extends Wrapper{
private static Method method_setMetadataCb = null;
+ public static final void setMetadataCb(Camera camera, CameraMetaDataCallback cb){
+ if ( DEBUG ){
+ Log.e(TAG, "" + Camera.class + " no setMetadataCb");
+ return;
+ }
+ try{
+ if ( method_setMetadataCb == null ){
+ method_setMetadataCb = Camera.class.getMethod("setMetadataCb",
+ android.hardware.Camera.CameraMetaDataCallback.class);
+ }
+ method_setMetadataCb.invoke(camera, cb);
+ }catch (Exception exception){
+ exception.printStackTrace();
+ }
+ }
+
+
+ private static Method method_setHistogramMode = null;
+ public static final void setHistogramMode(Camera camera, CameraDataCallback cb) {
+ if ( DEBUG ){
+ Log.e(TAG, "" + Camera.class + " no setHistogramMode");
+ return;
+ }
+ try{
+ if ( method_setHistogramMode == null ){
+ method_setHistogramMode = Camera.class.getMethod("setHistogramMode",
+ CameraDataCallback.class);
+ }
+ method_setHistogramMode.invoke(camera, cb);
+ }catch (Exception exception){
+ exception.printStackTrace();
+ }
+ }
private static Method method_sendHistogramData = null;
public static final void sendHistogramData(Camera camera){