From 8f6566e427e0091e95974768596e29220c2f181b Mon Sep 17 00:00:00 2001 From: Jack Yoo Date: Wed, 7 Sep 2016 10:30:43 -0700 Subject: SnapdrgaonCamera: Putting TrackingFocus jni hook Adding tracking focus jni library loading part and touch event Change-Id: Ic570a09a0d93eb4b81e52334ba4a1bee2b67cb12 CRs-Fixed: 1067848 --- src/com/android/camera/CaptureModule.java | 2 ++ src/com/android/camera/CaptureUI.java | 39 ++++++++++++++-------- src/com/android/camera/PhotoUI.java | 2 +- src/com/android/camera/PreviewGestures.java | 13 +++++++- src/com/android/camera/VideoUI.java | 2 +- .../filter/TrackingFocusFrameListener.java | 28 ++++++++++------ .../android/camera/ui/TrackingFocusRenderer.java | 8 ++++- 7 files changed, 66 insertions(+), 28 deletions(-) (limited to 'src/com') diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 8b1e24723..d56824ac8 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -2400,6 +2400,7 @@ public class CaptureModule implements CameraModule, PhotoController, mUI.hideSurfaceView(); mUI.showSurfaceView(); } + mUI.resetTrackingFocus(); try { setUpMediaRecorder(cameraId); @@ -2681,6 +2682,7 @@ public class CaptureModule implements CameraModule, PhotoController, createSession(cameraId); } mUI.showUIafterRecording(); + mUI.resetTrackingFocus(); } private void closePreviewSession() { diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index 8f35c7a2d..9ac152218 100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -241,16 +241,6 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, initSwitchCamera(); initFlashButton(); - mTrackingFocusRenderer = new TrackingFocusRenderer(mActivity, mModule, this); - mRenderOverlay.addRenderer(mTrackingFocusRenderer); - String trackingFocus = mSettingsManager.getValue(SettingsManager.KEY_TRACKINGFOCUS); - if(trackingFocus != null && trackingFocus.equalsIgnoreCase("on")) { - mTrackingFocusRenderer.setVisible(true); - } else { - mTrackingFocusRenderer.setVisible(false); - } - - mRecordingTimeView = (TextView) mRootView.findViewById(R.id.recording_time); mRecordingTimeRect = (RotateLayout) mRootView.findViewById(R.id.recording_time_rect); mTimeLapseLabel = mRootView.findViewById(R.id.time_lapse_label); @@ -302,9 +292,20 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, mRenderOverlay.addRenderer(mZoomRenderer); } + if(mTrackingFocusRenderer == null) { + mTrackingFocusRenderer = new TrackingFocusRenderer(mActivity, mModule, this); + mRenderOverlay.addRenderer(mTrackingFocusRenderer); + } + String trackingFocus = mSettingsManager.getValue(SettingsManager.KEY_TRACKINGFOCUS); + if(trackingFocus != null && trackingFocus.equalsIgnoreCase("on")) { + mTrackingFocusRenderer.setVisible(true); + } else { + mTrackingFocusRenderer.setVisible(false); + } + if (mGestures == null) { // this will handle gesture disambiguation and dispatching - mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer); + mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer, mTrackingFocusRenderer); mRenderOverlay.setGestures(mGestures); } @@ -325,9 +326,14 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, initSceneModeButton(); initFilterModeButton(); initFlashButton(); - if (mTrackingFocusRenderer != null) { + String trackingFocus = mSettingsManager.getValue(SettingsManager.KEY_TRACKINGFOCUS); + if(trackingFocus != null && trackingFocus.equalsIgnoreCase("on")) { + mTrackingFocusRenderer.setVisible(false); mTrackingFocusRenderer.setVisible(true); + } else { + mTrackingFocusRenderer.setVisible(false); } + if (mSurfaceViewMono != null) { if (mSettingsManager != null && mSettingsManager.getValue(SettingsManager.KEY_MONO_PREVIEW) != null && mSettingsManager.getValue(SettingsManager.KEY_MONO_PREVIEW).equalsIgnoreCase("on")) { @@ -470,6 +476,14 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, } } + public void resetTrackingFocus() { + String trackingFocus = mSettingsManager.getValue(SettingsManager.KEY_TRACKINGFOCUS); + if(trackingFocus != null && trackingFocus.equalsIgnoreCase("on")) { + mTrackingFocusRenderer.setVisible(false); + mTrackingFocusRenderer.setVisible(true); + } + } + public void hideUIwhileRecording() { mCameraControls.setWillNotDraw(true); mFrontBackSwitcher.setVisibility(View.INVISIBLE); @@ -746,7 +760,6 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, } public void onOrientationChanged() { - } /** diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 14c55101c..250bfa603 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -524,7 +524,7 @@ public class PhotoUI implements PieListener, if (mGestures == null) { // this will handle gesture disambiguation and dispatching - mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer); + mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer, null); mRenderOverlay.setGestures(mGestures); } mGestures.setPhotoMenu(mMenu); diff --git a/src/com/android/camera/PreviewGestures.java b/src/com/android/camera/PreviewGestures.java index 5f95ebffd..6a1de4a08 100644 --- a/src/com/android/camera/PreviewGestures.java +++ b/src/com/android/camera/PreviewGestures.java @@ -23,6 +23,7 @@ import android.view.View; import com.android.camera.ui.PieRenderer; import com.android.camera.ui.RenderOverlay; +import com.android.camera.ui.TrackingFocusRenderer; import com.android.camera.ui.ZoomRenderer; /* PreviewGestures disambiguates touch events received on RenderOverlay @@ -45,6 +46,7 @@ public class PreviewGestures private SingleTapListener mTapListener; private RenderOverlay mOverlay; private PieRenderer mPie; + private TrackingFocusRenderer mTrackingFocus; private ZoomRenderer mZoom; private MotionEvent mDown; private MotionEvent mCurrent; @@ -123,9 +125,10 @@ public class PreviewGestures } public PreviewGestures(CameraActivity ctx, SingleTapListener tapListener, - ZoomRenderer zoom, PieRenderer pie) { + ZoomRenderer zoom, PieRenderer pie, TrackingFocusRenderer trackingfocus) { mTapListener = tapListener; mPie = pie; + mTrackingFocus = trackingfocus; mZoom = zoom; mMode = MODE_NONE; mScale = new ScaleGestureDetector(ctx, this); @@ -201,6 +204,10 @@ public class PreviewGestures return sendToPie(m); } + if (mTrackingFocus != null && mTrackingFocus.isVisible()) { + return sendToTrackingFocus(m); + } + if (mCaptureUI != null) { if (mCaptureUI.isPreviewMenuBeingShown()) { waitUntilNextDown = true; @@ -278,6 +285,10 @@ public class PreviewGestures return mOverlay.directDispatchTouch(m, mPie); } + private boolean sendToTrackingFocus(MotionEvent m) { + return mOverlay.directDispatchTouch(m, mTrackingFocus); + } + // OnScaleGestureListener implementation @Override public boolean onScale(ScaleGestureDetector detector) { diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index 6ee532dbf..c68d895ea 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -670,7 +670,7 @@ public class VideoUI implements PieRenderer.PieListener, } mRenderOverlay.addRenderer(mZoomRenderer); if (mGestures == null) { - mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer); + mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer, null); mRenderOverlay.setGestures(mGestures); } mGestures.setVideoMenu(mVideoMenu); diff --git a/src/com/android/camera/imageprocessor/filter/TrackingFocusFrameListener.java b/src/com/android/camera/imageprocessor/filter/TrackingFocusFrameListener.java index 8d9a7fc1a..de7fdfff7 100644 --- a/src/com/android/camera/imageprocessor/filter/TrackingFocusFrameListener.java +++ b/src/com/android/camera/imageprocessor/filter/TrackingFocusFrameListener.java @@ -58,9 +58,9 @@ public class TrackingFocusFrameListener implements ImageFilter { private static String TAG = "TrackingFocusFrameListener"; private static boolean mIsSupported = false; private Rect imageRect; - public static final int PENDING_REGISTRATION = -1; + public static final long PENDING_REGISTRATION = -1; public static final int MAX_NUM_TRACKED_OBJECTS = 3; - private int mTrackedId = PENDING_REGISTRATION; + private long mTrackedId = PENDING_REGISTRATION; private boolean mIsInitialzed = false; private TrackingFocusRenderer mTrackingFocusRender; byte[] yvuBytes = null; @@ -185,7 +185,7 @@ public class TrackingFocusFrameListener implements ImageFilter { return nGetMaxRoiDimension(); } - public int registerObject(byte[] imageDataNV21, Rect rect) + public long registerObject(byte[] imageDataNV21, Rect rect) { if (imageDataNV21 == null || imageDataNV21.length < getMinFrameSize()) { throw new IllegalArgumentException("imageDataNV21 null or too small to encode frame"); @@ -195,7 +195,7 @@ public class TrackingFocusFrameListener implements ImageFilter { } else if (!mIsInitialzed) { throw new IllegalArgumentException("already released"); } - int id = nRegisterObjectByRect(imageDataNV21, rect.left, rect.top, rect.right, rect.bottom); + long id = nRegisterObjectByRect(imageDataNV21, rect.left, rect.top, rect.right, rect.bottom); if(id == 0) { id = PENDING_REGISTRATION; } @@ -203,7 +203,7 @@ public class TrackingFocusFrameListener implements ImageFilter { return mTrackedId; } - public int registerObject(byte[] imageDataNV21, Point point, boolean firstTime) + public long registerObject(byte[] imageDataNV21, Point point, boolean firstTime) { if (imageDataNV21 == null || imageDataNV21.length < getMinFrameSize()) { throw new IllegalArgumentException("imageDataNV21 null or too small to encode frame" @@ -213,7 +213,7 @@ public class TrackingFocusFrameListener implements ImageFilter { } else if (!mIsInitialzed) { throw new IllegalArgumentException("already released"); } - int id = nRegisterObjectByPoint(imageDataNV21, point.x, point.y, firstTime); + long id = nRegisterObjectByPoint(imageDataNV21, point.x, point.y, firstTime); if(id == 0) { id = PENDING_REGISTRATION; } @@ -221,7 +221,7 @@ public class TrackingFocusFrameListener implements ImageFilter { return mTrackedId; } - public void unregisterObject(int id) + public void unregisterObject(long id) { if (id == PENDING_REGISTRATION) { Log.e(TAG, "There's a pending object"); @@ -282,12 +282,18 @@ public class TrackingFocusFrameListener implements ImageFilter { private native void nRelease(); private native int nGetMinRoiDimension(); private native int nGetMaxRoiDimension(); - private native int nRegisterObjectByRect(byte[] imageDataNV21, int left, int top, int right, int bottom); - private native int nRegisterObjectByPoint(byte[] imageDataNV21, int x, int y, boolean firstTime); - private native void nUnregisterObject(int id); + private native long nRegisterObjectByRect(byte[] imageDataNV21, int left, int top, int right, int bottom); + private native long nRegisterObjectByPoint(byte[] imageDataNV21, int x, int y, boolean firstTime); + private native void nUnregisterObject(long id); private native int[] nTrackObjects(byte[] imageDataNV21); static { - mIsSupported = false; + try { + System.loadLibrary("jni_trackingfocus"); + mIsSupported = true; + }catch(UnsatisfiedLinkError e) { + Log.d(TAG, e.toString()); + mIsSupported = false; + } } } diff --git a/src/com/android/camera/ui/TrackingFocusRenderer.java b/src/com/android/camera/ui/TrackingFocusRenderer.java index 3738137c2..f79ebdb8f 100644 --- a/src/com/android/camera/ui/TrackingFocusRenderer.java +++ b/src/com/android/camera/ui/TrackingFocusRenderer.java @@ -108,6 +108,9 @@ public class TrackingFocusRenderer extends OverlayRenderer implements FocusIndic @Override public boolean onTouchEvent(MotionEvent event) { + if(mSurfaceDim == null) { + return true; + } switch(event.getActionMasked()) { case MotionEvent.ACTION_DOWN: break; @@ -273,11 +276,14 @@ public class TrackingFocusRenderer extends OverlayRenderer implements FocusIndic } if(Math.abs(mOldX - mNewX) >= MIN_DIFF_CORDS || Math.abs(mOldY - mNewY) >= MIN_DIFF_CORDS || Math.abs(mOldWidth - mNewWidth) >= MIN_DIFF_SIZE || Math.abs(mOldHeight - mNewHeight) >= MIN_DIFF_SIZE) { - mModule.onSingleTapUp(null, mNewX, mNewY); + try { + mModule.onSingleTapUp(null, mNewX, mNewY); mOldX = mNewX; mOldY = mNewY; mOldWidth = mNewWidth; mOldHeight = mNewHeight; + } catch(Exception e) { + } } } } -- cgit v1.2.3