android: camera: Minor fixes for USB/external camera

Signed-off-by: hmz007 <hmz007@gmail.com>
master
hmz007 1 year ago
parent 5dd722ba81
commit e906e99eb7

@ -22,6 +22,7 @@
#include <array> #include <array>
#include <regex> #include <regex>
#include <linux/videodev2.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"
@ -370,7 +371,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

@ -23,6 +23,7 @@
#include <aidl/android/hardware/camera/common/Status.h> #include <aidl/android/hardware/camera/common/Status.h>
#include <convert.h> #include <convert.h>
#include <cutils/properties.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <regex> #include <regex>
#include <set> #include <set>
@ -482,7 +483,11 @@ status_t ExternalCameraDevice::initDefaultCharsKeys(
const uint8_t opticalStabilizationMode = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF; const uint8_t opticalStabilizationMode = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF;
UPDATE(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, &opticalStabilizationMode, 1); 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);
int nr_hdmi = property_get_int32("persist.vendor.camera.nr_hdmi", 1);
const uint8_t facing = (std::stoi(mCameraId) > (mCfg.cameraIdOffset + nr_back - nr_hdmi)) ?
ANDROID_LENS_FACING_EXTERNAL : ANDROID_LENS_FACING_BACK;
ALOGV("update external 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

@ -23,9 +23,9 @@
#include <aidl/android/hardware/camera/common/Status.h> #include <aidl/android/hardware/camera/common/Status.h>
#include <convert.h> #include <convert.h>
#include <linux/videodev2.h>
#include <linux/v4l2-subdev.h> #include <linux/v4l2-subdev.h>
#include <linux/videodev2.h> #include <linux/videodev2.h>
#include <cutils/properties.h>
#include <regex> #include <regex>
#include <set> #include <set>
@ -422,7 +422,10 @@ status_t HdmiDevice::initDefaultCharsKeys(
const uint8_t opticalStabilizationMode = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF; const uint8_t opticalStabilizationMode = ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF;
UPDATE(ANDROID_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, &opticalStabilizationMode, 1); 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 hdmiin %s facing to %d", mCameraId.c_str(), facing);
UPDATE(ANDROID_LENS_FACING, &facing, 1); UPDATE(ANDROID_LENS_FACING, &facing, 1);
// android.noiseReduction // android.noiseReduction

@ -98,7 +98,7 @@ int RgaCropScale::CropScaleNV12Or21(struct Params* in, struct Params* out)
} else { } else {
dst.fd = out->fd; dst.fd = out->fd;
dst_handle = importbuffer_fd(dst.fd, &param); dst_handle = importbuffer_fd(dst.fd, &param);
ALOGD("@%s, dst fd:%d,width:%d,height:%d",__FUNCTION__,dst.fd,param.width,param.height); ALOGV("@%s, dst fd:%d,width:%d,height:%d",__FUNCTION__,dst.fd,param.width,param.height);
} }
dst.mmuFlag = ((2 & 0x3) << 4) | 1 | (1 << 8) | (1 << 10); dst.mmuFlag = ((2 & 0x3) << 4) | 1 | (1 << 8) | (1 << 10);

@ -102,6 +102,7 @@ class IHdmiRxStatusCallbackImpl:public ::rockchip::hardware::hdmi::V1_0::IHdmiRx
} // namespace } // namespace
HdmiProvider::HdmiProvider() : mCfg(HdmiConfig::loadFromCfg()) { HdmiProvider::HdmiProvider() : mCfg(HdmiConfig::loadFromCfg()) {
property_set("persist.vendor.camera.nr_hdmi", "0");
mHotPlugThread = std::make_shared<HotplugThread>(this); mHotPlugThread = std::make_shared<HotplugThread>(this);
mHotPlugThread->run(); mHotPlugThread->run();
} }
@ -258,6 +259,7 @@ void HdmiProvider::deviceAdded(const char* devName) {
} }
deviceImpl.reset(); deviceImpl.reset();
addHdmi(devName); addHdmi(devName);
property_set("persist.vendor.camera.nr_hdmi", "1");
} }
void HdmiProvider::deviceRemoved(const char* devName) { void HdmiProvider::deviceRemoved(const char* devName) {
@ -278,6 +280,7 @@ void HdmiProvider::deviceRemoved(const char* devName) {
if (mCallback != nullptr) { if (mCallback != nullptr) {
mCallback->cameraDeviceStatusChange(deviceName, CameraDeviceStatus::NOT_PRESENT); mCallback->cameraDeviceStatusChange(deviceName, CameraDeviceStatus::NOT_PRESENT);
} }
property_set("persist.vendor.camera.nr_hdmi", "0");
} }
void HdmiProvider::updateAttachedCameras() { void HdmiProvider::updateAttachedCameras() {

@ -1763,6 +1763,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");
@ -2194,6 +2197,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,

@ -1748,10 +1748,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) {

@ -2507,7 +2507,7 @@ public class VideoModule extends CameraModule
e.printStackTrace(); e.printStackTrace();
return 0; return 0;
} }
return id; return id > 1 ? 0 : id;
} else { } else {
Log.e(TAG, "No camera found."); Log.e(TAG, "No camera found.");
return 0; return 0;

@ -33,6 +33,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.
*/ */

@ -105,6 +105,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;
} }

@ -84,9 +84,14 @@ public class Camera2OneCameraManagerImpl extends CameraManager.AvailabilityCallb
@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;
@ -179,9 +184,9 @@ public class Camera2OneCameraManagerImpl extends CameraManager.AvailabilityCallb
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;
} }
@ -191,8 +196,12 @@ public class Camera2OneCameraManagerImpl extends CameraManager.AvailabilityCallb
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.");
} }
@ -200,16 +209,19 @@ public class Camera2OneCameraManagerImpl extends CameraManager.AvailabilityCallb
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