1
0
Fork 0

android: camera: Minor fixes for USB/external camera

Signed-off-by: hmz007 <hmz007@gmail.com>
master
hmz007 1 year ago
parent 9cca8cd67b
commit d76ddaaa61

@ -23,7 +23,7 @@
#include <regex> #include <regex>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <linux/v4l2-subdev.h> #include <linux/v4l2-subdev.h>
#include <linux/videodev2.h> #include <cutils/properties.h>
#include "android-base/macros.h" #include "android-base/macros.h"
#include "CameraMetadata.h" #include "CameraMetadata.h"
#include "../../3.2/default/include/convert.h" #include "../../3.2/default/include/convert.h"
@ -445,7 +445,10 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
UPDATE(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, UPDATE(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
&opticalStabilizationMode, 1); &opticalStabilizationMode, 1);
const uint8_t facing = ANDROID_LENS_FACING_EXTERNAL; int nr_back = property_get_int32("persist.vendor.camera.nr_back", 1);
const uint8_t facing = (std::stoi(mCameraId) < (mCfg.cameraIdOffset + nr_back)) ?
ANDROID_LENS_FACING_BACK : ANDROID_LENS_FACING_EXTERNAL;
ALOGV("update camera %s facing to %d", mCameraId.c_str(), facing);
UPDATE(ANDROID_LENS_FACING, &facing, 1); UPDATE(ANDROID_LENS_FACING, &facing, 1);
// android.noiseReduction // android.noiseReduction

@ -1787,6 +1787,9 @@ public class CameraActivity extends QuickActivity
setModuleFromModeIndex(getModeIndex()); setModuleFromModeIndex(getModeIndex());
// Saved camera Id (of external camera) may be gone
checkCameraId();
profile.mark(); profile.mark();
mCameraAppUI.prepareModuleUI(); mCameraAppUI.prepareModuleUI();
profile.mark("Init Current Module UI"); profile.mark("Init Current Module UI");
@ -2217,6 +2220,17 @@ public class CameraActivity extends QuickActivity
} }
} }
private void checkCameraId() {
int cameraId = mSettingsManager.getInteger(SettingsManager.SCOPE_GLOBAL,
Keys.KEY_CAMERA_ID);
if (!mOneCameraManager.hasCamera(cameraId)) {
Log.d(TAG, "reset cameraId setting " + cameraId + " to 0");
mSettingsManager.set(SettingsManager.SCOPE_GLOBAL,
Keys.KEY_CAMERA_ID, 0);
}
}
private void preloadFilmstripItems() { private void preloadFilmstripItems() {
if (mDataAdapter == null) { if (mDataAdapter == null) {
mDataAdapter = new CameraFilmstripDataAdapter(mAppContext, mDataAdapter = new CameraFilmstripDataAdapter(mAppContext,

@ -1683,10 +1683,19 @@ public class CaptureModule extends CameraModule implements
private Facing getFacingFromCameraId(int cameraId) { private Facing getFacingFromCameraId(int cameraId) {
try { try {
CameraManager manager = (CameraManager) mCameraActivity.getSystemService(Context.CAMERA_SERVICE); CameraManager manager = (CameraManager) mCameraActivity.getSystemService(Context.CAMERA_SERVICE);
String cameraIds = manager.getCameraIdList()[cameraId]; String[] ids = manager.getCameraIdList();
Log.d(TAG,"cameraIds="+cameraIds); if (cameraId >= ids.length) cameraId = 0;
String cameraIds = ids[cameraId];
Log.d(TAG, "cameraIds = " + cameraIds);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIds); CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIds);
int mLensFacing = characteristics.get(CameraCharacteristics.LENS_FACING); int mLensFacing = characteristics.get(CameraCharacteristics.LENS_FACING);
// map first external camera to back
if (cameraId == 0 && mLensFacing == CameraCharacteristics.LENS_FACING_EXTERNAL) {
return Facing.BACK;
}
// cameraservice map external to front for legacy API // cameraservice map external to front for legacy API
return (mLensFacing == CameraCharacteristics.LENS_FACING_BACK) ? Facing.BACK : Facing.FRONT; return (mLensFacing == CameraCharacteristics.LENS_FACING_BACK) ? Facing.BACK : Facing.FRONT;
} catch (CameraAccessException e) { } catch (CameraAccessException e) {

@ -31,6 +31,11 @@ public interface OneCameraManager {
*/ */
public boolean hasCamera(); public boolean hasCamera();
/**
* Returns whether the device has a camera Id.
*/
public boolean hasCamera(int id);
/** /**
* Returns whether the device has a camera facing the given direction. * Returns whether the device has a camera facing the given direction.
*/ */
@ -62,4 +67,4 @@ public interface OneCameraManager {
public static class Factory { public static class Factory {
} }
} }

@ -103,6 +103,11 @@ public class LegacyOneCameraManagerImpl implements OneCameraManager {
@Override @Override
public boolean hasCamera() { public boolean hasCamera() {
return hasCamera(0);
}
@Override
public boolean hasCamera(int id) {
return false; return false;
} }
@ -181,4 +186,4 @@ public class LegacyOneCameraManagerImpl implements OneCameraManager {
return characteristics; return characteristics;
} }
} }

@ -81,9 +81,14 @@ public class Camera2OneCameraManagerImpl implements OneCameraManager {
@Override @Override
public boolean hasCamera() { public boolean hasCamera() {
return hasCamera(0);
}
@Override
public boolean hasCamera(int id) {
try { try {
String[] ids = mCameraManager.getCameraIdList(); String[] ids = mCameraManager.getCameraIdList();
return ids != null && ids.length > 0; return ids != null && ids.length > id;
} catch (CameraAccessException ex) { } catch (CameraAccessException ex) {
Log.e(TAG, "Unable to read camera list.", ex); Log.e(TAG, "Unable to read camera list.", ex);
return false; return false;
@ -157,9 +162,9 @@ public class Camera2OneCameraManagerImpl implements OneCameraManager {
String cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_BACK); String cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_BACK);
if (cameraId == null) { if (cameraId == null) {
Log.w(TAG, "No back-facing camera found."); Log.w(TAG, "No back-facing camera found.");
Log.d(TAG, "Getting First FRONT Camera");
//xcq add Log.d(TAG, "Getting First EXTERNAL Camera");
cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_FRONT); cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_EXTERNAL);
} }
return cameraId; return cameraId;
} }
@ -169,8 +174,12 @@ public class Camera2OneCameraManagerImpl implements OneCameraManager {
Log.d(TAG, "Getting First FRONT Camera"); Log.d(TAG, "Getting First FRONT Camera");
String cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_FRONT); String cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_FRONT);
if (cameraId == null) { if (cameraId == null) {
Log.w(TAG, "No front-facing camera found,try to find external facing camera."); Log.w(TAG, "No front-facing camera found.");
cameraId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_EXTERNAL);
String backId = findFirstCameraIdFacing(CameraCharacteristics.LENS_FACING_BACK);
int start = (backId == null) ? 1 : 0;
Log.d(TAG, "Finding external camera " + start);
cameraId = findCameraIdFacingFrom(CameraCharacteristics.LENS_FACING_EXTERNAL, start);
if (cameraId == null) { if (cameraId == null) {
Log.w(TAG, "No external camera found."); Log.w(TAG, "No external camera found.");
} }
@ -178,16 +187,19 @@ public class Camera2OneCameraManagerImpl implements OneCameraManager {
return cameraId; return cameraId;
} }
/** Returns the ID of the first camera facing the given direction. */ /** Returns the ID of the first camera facing the given direction. */
private String findFirstCameraIdFacing(int facing) { private String findFirstCameraIdFacing(int facing) {
return findCameraIdFacingFrom(facing, 0);
}
private String findCameraIdFacingFrom(int facing, int from) {
try { try {
String[] cameraIds = mCameraManager.getCameraIdList(); String[] cameraIds = mCameraManager.getCameraIdList();
for (String cameraId : cameraIds) { for (String cameraId : cameraIds) {
CameraCharacteristics characteristics = mCameraManager CameraCharacteristics characteristics = mCameraManager
.getCameraCharacteristics(cameraId); .getCameraCharacteristics(cameraId);
if (characteristics.get(CameraCharacteristics.LENS_FACING) == facing) { if (characteristics.get(CameraCharacteristics.LENS_FACING) == facing) {
return cameraId; if (--from < 0) return cameraId;
} }
} }
} catch (CameraAccessException ex) { } catch (CameraAccessException ex) {

Loading…
Cancel
Save