1
0
Fork 0

android: camera: Minor fixes for USB/external camera

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

@ -23,7 +23,7 @@
#include <regex>
#include <linux/videodev2.h>
#include <linux/v4l2-subdev.h>
#include <linux/videodev2.h>
#include <cutils/properties.h>
#include "android-base/macros.h"
#include "CameraMetadata.h"
#include "../../3.2/default/include/convert.h"
@ -445,7 +445,10 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
UPDATE(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION,
&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);
// android.noiseReduction

@ -1787,6 +1787,9 @@ public class CameraActivity extends QuickActivity
setModuleFromModeIndex(getModeIndex());
// Saved camera Id (of external camera) may be gone
checkCameraId();
profile.mark();
mCameraAppUI.prepareModuleUI();
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() {
if (mDataAdapter == null) {
mDataAdapter = new CameraFilmstripDataAdapter(mAppContext,

@ -1683,10 +1683,19 @@ public class CaptureModule extends CameraModule implements
private Facing getFacingFromCameraId(int cameraId) {
try {
CameraManager manager = (CameraManager) mCameraActivity.getSystemService(Context.CAMERA_SERVICE);
String cameraIds = manager.getCameraIdList()[cameraId];
Log.d(TAG,"cameraIds="+cameraIds);
String[] ids = manager.getCameraIdList();
if (cameraId >= ids.length) cameraId = 0;
String cameraIds = ids[cameraId];
Log.d(TAG, "cameraIds = " + cameraIds);
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIds);
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
return (mLensFacing == CameraCharacteristics.LENS_FACING_BACK) ? Facing.BACK : Facing.FRONT;
} catch (CameraAccessException e) {

@ -31,6 +31,11 @@ public interface OneCameraManager {
*/
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.
*/
@ -62,4 +67,4 @@ public interface OneCameraManager {
public static class Factory {
}
}
}

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

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

Loading…
Cancel
Save