mirror of
https://github.com/chararomandroid/android_device_samsung_a20
synced 2026-08-23 12:35:33 -04:00
universal7885: CameraLightSensor: Fix some issues on cam
* It was non-usable even when CameraLightSensor service is off
This commit is contained in:
parent
ef7fb5151b
commit
e96c97cad8
3 changed files with 42 additions and 22 deletions
|
|
@ -27,12 +27,12 @@ import android.media.ImageReader;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class Camera2Service extends Service {
|
public class Camera2Service extends Service {
|
||||||
protected static final String TAG = Camera2Service.class.getSimpleName();
|
protected static final String TAG = Camera2Service.class.getSimpleName();
|
||||||
|
|
@ -71,8 +71,6 @@ public class Camera2Service extends Service {
|
||||||
if (!destroy) {
|
if (!destroy) {
|
||||||
Camera2Service.this.session = session;
|
Camera2Service.this.session = session;
|
||||||
try {
|
try {
|
||||||
Handler mHandler = new Handler(Looper.getMainLooper());
|
|
||||||
mHandler.postDelayed(() -> {
|
|
||||||
try {
|
try {
|
||||||
if (createCaptureRequest() == null) return;
|
if (createCaptureRequest() == null) return;
|
||||||
session.capture(createCaptureRequest(), captureCallback, null);
|
session.capture(createCaptureRequest(), captureCallback, null);
|
||||||
|
|
@ -81,7 +79,6 @@ public class Camera2Service extends Service {
|
||||||
} catch (IllegalStateException e){
|
} catch (IllegalStateException e){
|
||||||
Log.w(TAG, "onReady: Session is NULL");
|
Log.w(TAG, "onReady: Session is NULL");
|
||||||
}
|
}
|
||||||
}, 4000);
|
|
||||||
} catch (Exception e){
|
} catch (Exception e){
|
||||||
Log.e(TAG, "Camera is in use");
|
Log.e(TAG, "Camera is in use");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
@ -100,6 +97,7 @@ public class Camera2Service extends Service {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
protected ImageReader.OnImageAvailableListener onImageAvailableListener = reader -> {
|
protected ImageReader.OnImageAvailableListener onImageAvailableListener = reader -> {
|
||||||
if (DEBUG) Log.d(TAG, "onImageAvailable: Capturing");
|
if (DEBUG) Log.d(TAG, "onImageAvailable: Capturing");
|
||||||
Image img = reader.acquireLatestImage();
|
Image img = reader.acquireLatestImage();
|
||||||
|
|
@ -110,6 +108,10 @@ public class Camera2Service extends Service {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
img.close();
|
img.close();
|
||||||
|
if (DEBUG)
|
||||||
|
Log.d(TAG, "ImageReader.OnImageAvailableListener: Closing Camera and Sessions..");
|
||||||
|
cameraDevice.close();
|
||||||
|
session.close();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -122,7 +124,7 @@ public class Camera2Service extends Service {
|
||||||
}
|
}
|
||||||
manager.registerAvailabilityCallback(availabilityCallback, null);
|
manager.registerAvailabilityCallback(availabilityCallback, null);
|
||||||
manager.openCamera(pickedCamera, cameraStateCallback, null);
|
manager.openCamera(pickedCamera, cameraStateCallback, null);
|
||||||
imageReader = ImageReader.newInstance(500, 500, ImageFormat.JPEG, 2 /* images buffered */);
|
imageReader = ImageReader.newInstance(250, 250, ImageFormat.JPEG, 2 /* images buffered */);
|
||||||
imageReader.setOnImageAvailableListener(onImageAvailableListener, null);
|
imageReader.setOnImageAvailableListener(onImageAvailableListener, null);
|
||||||
if (DEBUG) Log.d(TAG, "imageReader created");
|
if (DEBUG) Log.d(TAG, "imageReader created");
|
||||||
} catch (CameraAccessException e) {
|
} catch (CameraAccessException e) {
|
||||||
|
|
@ -196,6 +198,7 @@ public class Camera2Service extends Service {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
|
cameraDevice.close();
|
||||||
if (session != null && isavail) {
|
if (session != null && isavail) {
|
||||||
try {
|
try {
|
||||||
session.abortCaptures();
|
session.abortCaptures();
|
||||||
|
|
@ -238,17 +241,31 @@ public class Camera2Service extends Service {
|
||||||
super.onCameraOpened(cameraId, packageId);
|
super.onCameraOpened(cameraId, packageId);
|
||||||
Log.i(TAG, "CameraManager.AvailabilityCallback: Camera " + cameraId
|
Log.i(TAG, "CameraManager.AvailabilityCallback: Camera " + cameraId
|
||||||
+ " Opened by Package " + packageId);
|
+ " Opened by Package " + packageId);
|
||||||
isavail = Objects.equals(packageId, mContext.getBasePackageName());
|
if (packageId.equals(mContext.getBasePackageName())) return;
|
||||||
|
isavail = false;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onCameraClosed(String cameraId) {
|
||||||
|
if (DEBUG) Log.d(TAG, "CameraManager.AvailabilityCallback: Camera is closed now, " +
|
||||||
|
"sleeping for 4000 ms");
|
||||||
|
Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
|
mHandler.postDelayed(() -> {
|
||||||
|
if(isavail) readyCamera();
|
||||||
|
},4000);
|
||||||
|
super.onCameraClosed(cameraId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCameraClosed(String cameraId) {
|
public void onCameraUnavailable(String cameraId) {
|
||||||
if(!isavail){
|
if (DEBUG)Log.i(TAG, "CameraManager.AvailabilityCallback : Camera NOT Available. ");
|
||||||
Log.i(TAG, "CameraManager.AvailabilityCallback: Camera " + cameraId + " Closed." +
|
super.onCameraUnavailable(cameraId);
|
||||||
"Re-opening Camera");
|
|
||||||
readyCamera();
|
|
||||||
}
|
}
|
||||||
super.onCameraClosed(cameraId);
|
|
||||||
|
@Override
|
||||||
|
public void onCameraAvailable(String cameraId) {
|
||||||
|
if (DEBUG) Log.i(TAG, "CameraManager.AvailabilityCallback : Camera IS Available. ");
|
||||||
|
isavail = true;
|
||||||
|
super.onCameraAvailable(cameraId);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
|
CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
|
||||||
|
|
@ -259,11 +276,14 @@ public class Camera2Service extends Service {
|
||||||
mHandler.postDelayed(() -> readyCamera(),400);
|
mHandler.postDelayed(() -> readyCamera(),400);
|
||||||
super.onCaptureSequenceCompleted(session, sequenceId, frameNumber);
|
super.onCaptureSequenceCompleted(session, sequenceId, frameNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBinder onBind(Intent intent) {
|
public IBinder onBind(Intent intent) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int calculateBrightnessEstimate(Bitmap bitmap, int pixelSpacing) {
|
public int calculateBrightnessEstimate(Bitmap bitmap, int pixelSpacing) {
|
||||||
int R = 0; int G = 0; int B = 0;
|
int R = 0; int G = 0; int B = 0;
|
||||||
int height = bitmap.getHeight();
|
int height = bitmap.getHeight();
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@ public class CameraLightSensorService extends Activity {
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
if (DEBUG) Log.d(TAG, "Destroying service");
|
if (DEBUG) Log.d(TAG, "Destroying service");
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
this.unregisterReceiver(mScreenStateReceiver);
|
|
||||||
}
|
}
|
||||||
private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
|
private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,6 @@ ro.lmk.kill_heaviest_task=false
|
||||||
ro.lmk.log_stats=true
|
ro.lmk.log_stats=true
|
||||||
ro.lmk.upgrade_pressure=40
|
ro.lmk.upgrade_pressure=40
|
||||||
ro.lmk.use_psi=false
|
ro.lmk.use_psi=false
|
||||||
# xml
|
|
||||||
|
# Binary XML
|
||||||
persist.sys.binary_xml=false
|
persist.sys.binary_xml=false
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue