From 52281abecab1500fcdefe7d9b8eb2975f6892e5c Mon Sep 17 00:00:00 2001 From: user189 Date: Wed, 24 Feb 2021 21:42:54 +0530 Subject: [PATCH] camera preview flicker during camera switching when switching between camera then sometimes camera preview started flickering, this flicker is basically few frames from camera 1 and few frames from camera 2 was rendered Solution : properly close the current camera and freshly start new camera Tracked-On: OAM-96186 Signed-off-by: shiva kumara R --- .../intel/multicamera/FullScreenActivity.java | 145 ++++++------------ .../com/intel/multicamera/MultiCamera.java | 2 +- .../multicamera/SingleCameraActivity.java | 16 +- 3 files changed, 56 insertions(+), 107 deletions(-) diff --git a/camera/MultiCameraApplication/java/com/intel/multicamera/FullScreenActivity.java b/camera/MultiCameraApplication/java/com/intel/multicamera/FullScreenActivity.java index 7216c5e..fc67ee5 100644 --- a/camera/MultiCameraApplication/java/com/intel/multicamera/FullScreenActivity.java +++ b/camera/MultiCameraApplication/java/com/intel/multicamera/FullScreenActivity.java @@ -70,8 +70,7 @@ public class FullScreenActivity extends AppCompatActivity { MultiCamera mCameraInst; private TextView mRecordingTimeView; private boolean mIsRecordingVideo; - private CameraBase mCameraBack; - private CameraBase mCameraFront; + private CameraBase mCamera; private RoundedThumbnailView mRoundedThumbnailView; private BroadcastReceiver mUsbReceiver; @@ -102,8 +101,7 @@ protected void onCreate(Bundle savedInstanceState) { mRoundedThumbnailView = findViewById(R.id.rounded_thumbnail_view); checkPermissions(); - - openBackCamera(); + OpenCamera(); try { final IntentFilter filter = new IntentFilter(); filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); @@ -174,14 +172,23 @@ public void onClick(View v) { mLastClickTime = SystemClock.elapsedRealtime(); MultiCamera ic_camera = MultiCamera.getInstance(); if (ic_camera.getWhichCamera() == 0) { - openFrontCamera(); + mCameraInst.setOpenCameraId(1); ic_camera.setWhichCamera(1); Log.i(TAG,"Opened front camera"); + closeCamera(); + unregisterReceiver(mUsbReceiver); + startActivity(new Intent(getApplicationContext(), FullScreenActivity.class)); + finishAffinity(); } else { - openBackCamera(); + mCameraInst.setOpenCameraId(0); ic_camera.setWhichCamera(0); + Log.i(TAG,"Opened back camera"); + closeCamera(); + unregisterReceiver(mUsbReceiver); + startActivity(new Intent(getApplicationContext(), FullScreenActivity.class)); + finishAffinity(); } } @@ -231,12 +238,7 @@ public void onClick(View v) { mCameraPicture.setVisibility(View.VISIBLE); mCameraSwitch.setVisibility(View.VISIBLE); mCameraSplit.setVisibility(View.VISIBLE); - if (ic_camera.getWhichCamera() == 1) { - mCameraFront.createCameraPreview(); - } - else { - mCameraBack.createCameraPreview(); - } + mCamera.createCameraPreview(); } }); @@ -260,14 +262,10 @@ public void onClick(View v) { return; } mLastClickTime = SystemClock.elapsedRealtime(); - if (MultiCamera.getInstance().getWhichCamera() == 1) { - if (mCameraFront != null) - mCameraFront.takePicture(); - } - else { - if (mCameraBack != null) - mCameraBack.takePicture(); - } + + if (mCamera != null) + mCamera.takePicture(); + } }); @@ -282,16 +280,11 @@ public void onClick(View view) { try { if (mIsRecordingVideo) { mIsRecordingVideo = false; - if (mCameraInst.getWhichCamera() == 0) { - mCameraBack.getmRecord().stopRecordingVideo(); - mCameraBack.getmRecord().showRecordingUI(false); - mCameraBack.getmPhoto().showVideoThumbnail(); - } - else { - mCameraFront.getmRecord().stopRecordingVideo(); - mCameraFront.getmRecord().showRecordingUI(false); - mCameraFront.getmPhoto().showVideoThumbnail(); - } + + mCamera.getmRecord().stopRecordingVideo(); + mCamera.getmRecord().showRecordingUI(false); + mCamera.getmPhoto().showVideoThumbnail(); + if (numOfCameras > 1) { mCameraSwitch.setVisibility(View.VISIBLE); @@ -303,14 +296,10 @@ public void onClick(View view) { mSettings.setVisibility(View.VISIBLE); } else { mIsRecordingVideo =true; - if (mCameraInst.getWhichCamera() == 0) { - mCameraBack.getmRecord().startRecordingVideo(); - mCameraBack.getmRecord().showRecordingUI(true); - } - else { - mCameraFront.getmRecord().startRecordingVideo(); - mCameraFront.getmRecord().showRecordingUI(true); - } + + mCamera.getmRecord().startRecordingVideo(); + mCamera.getmRecord().showRecordingUI(true); + mSettings.setVisibility(View.GONE); mCameraSwitch.setVisibility(View.GONE); mCameraPicture.setVisibility(View.GONE); @@ -324,7 +313,7 @@ public void onClick(View view) { }); } - public void openBackCamera() { + public void OpenCamera() { closeCamera(); GetCameraCnt(); @@ -340,47 +329,14 @@ public void openBackCamera() { updateStorageSpace(null); - OpenOnlyBackCamera(); + Open_Camera(); } - public void openFrontCamera() { - closeCamera(); - - GetCameraCnt(); - updateStorageSpace(null); - - OpenOnlyFrontCamera(); - } - - private void OpenOnlyFrontCamera() { - - mCamera_FrontView = findViewById(R.id.textureview); - if (mCamera_FrontView == null) { - Log.e(TAG, "fail to get surface for front view"); - return; - } - if (mCameraFront == null) { - Open_FrontCamera(); - } - - if (mCamera_FrontView.isAvailable()) { - mCameraFront.textureListener.onSurfaceTextureAvailable( - mCamera_FrontView.getSurfaceTexture(), - mCamera_FrontView.getWidth(), mCamera_FrontView.getHeight()); - } else { - mCamera_FrontView.setSurfaceTextureListener(mCameraFront.textureListener); - } - } private void closeCamera() { - if (null != mCameraBack) { - mCameraBack.closeCamera(); - mCameraBack = null; - } - - if (null != mCameraFront) { - mCameraFront.closeCamera(); - mCameraFront = null; + if (null != mCamera) { + mCamera.closeCamera(); + mCamera = null; } } @@ -401,50 +357,37 @@ public void GetCameraCnt() { } } - private void OpenOnlyBackCamera() { + private void Open_Camera() { mCamera_BackView = findViewById(R.id.textureview); if (mCamera_BackView == null) { Log.e(TAG, "fail to find surface for back camera"); return; } - if (mCameraBack == null) { - Open_BackCamera(); + if (mCamera == null) { + Open_Camera_ById(); } if (mCamera_BackView.isAvailable()) { - mCameraBack.textureListener.onSurfaceTextureAvailable( + mCamera.textureListener.onSurfaceTextureAvailable( mCamera_BackView.getSurfaceTexture(), mCamera_BackView.getWidth(), mCamera_BackView.getHeight()); } else { - mCamera_BackView.setSurfaceTextureListener(mCameraBack.textureListener); + mCamera_BackView.setSurfaceTextureListener(mCamera.textureListener); } } - public void Open_BackCamera() { + public void Open_Camera_ById() { String[] Data = new String[5]; Data[0] = "BackCamera"; - Data[1] = CameraIds[0]; + Data[1] = CameraIds[mCameraInst.getOpenCameraId()]; Data[2] = "capture_list"; Data[3] = "video_list"; Data[4] = "pref_resolution_1"; - mCameraBack = new CameraBase(this, mCamera_BackView, null, mRecordingTimeView, + mCamera = new CameraBase(this, mCamera_BackView, null, mRecordingTimeView, Data, mRoundedThumbnailView); } - - public void Open_FrontCamera() { - String[] Data = new String[5]; - - Data[0] = "FrontCamera"; - Data[1] = CameraIds[1]; - Data[2] = "capture_list_1"; - Data[3] = "video_list"; - Data[4] = "pref_resolution_1"; - - mCameraFront = new CameraBase(this, mCamera_FrontView, null, mRecordingTimeView, - Data, mRoundedThumbnailView); - } /** * Checks if any of the needed Android runtime permissions are missing. * If they are, then launch the permissions activity under one of the following conditions: @@ -491,10 +434,8 @@ protected void onResume() { Log.e(TAG, "onResume"); MultiCamera ic_cam = MultiCamera.getInstance(); ic_cam.setIsCameraOrSurveillance(0); - if (ic_cam.getWhichCamera() == 0) { - openBackCamera(); - } else { - openFrontCamera(); - } + + Open_Camera(); + } } diff --git a/camera/MultiCameraApplication/java/com/intel/multicamera/MultiCamera.java b/camera/MultiCameraApplication/java/com/intel/multicamera/MultiCamera.java index d857557..1c2e99e 100644 --- a/camera/MultiCameraApplication/java/com/intel/multicamera/MultiCamera.java +++ b/camera/MultiCameraApplication/java/com/intel/multicamera/MultiCamera.java @@ -36,7 +36,7 @@ public class MultiCamera { MultiCamera() { mWhichCamera = 0; mIsCameraOrSurveillance = 0; - mOpenCameraId = -1; + mOpenCameraId = 0; } public static MultiCamera getInstance() { if (ic_instance == null) { diff --git a/camera/MultiCameraApplication/java/com/intel/multicamera/SingleCameraActivity.java b/camera/MultiCameraApplication/java/com/intel/multicamera/SingleCameraActivity.java index 03cf239..6b79f7f 100644 --- a/camera/MultiCameraApplication/java/com/intel/multicamera/SingleCameraActivity.java +++ b/camera/MultiCameraApplication/java/com/intel/multicamera/SingleCameraActivity.java @@ -171,14 +171,22 @@ public void onClick(View v) { MultiCamera ic_camera = MultiCamera.getInstance(); if (ic_camera.getWhichCamera() == 0) { ic_camera.setOpenCameraId(1); - OpenCamera(); - ic_camera.setWhichCamera(1); Log.i(TAG,"Opened front camera"); + closeCamera(); + unregisterReceiver(mUsbReceiver); + startActivity(new Intent(getApplicationContext(), FullScreenActivity.class)); + ic_camera.setWhichCamera(1); + finishAffinity(); + } else { ic_camera.setOpenCameraId(0); - OpenCamera(); - ic_camera.setWhichCamera(0); + closeCamera(); + unregisterReceiver(mUsbReceiver); + startActivity(new Intent(getApplicationContext(), FullScreenActivity.class)); + ic_camera.setWhichCamera(1); + finishAffinity(); + Log.i(TAG,"Opened back camera"); } }