summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java9
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDeviceImpl.java27
2 files changed, 26 insertions, 10 deletions
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index a01961206319..2b7d8f155bff 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -838,7 +838,10 @@ public final class CameraManager {
return new CameraExtensionCharacteristics(mContext, cameraId, characteristicsMap);
}
- private Map<String, CameraCharacteristics> getPhysicalIdToCharsMap(
+ /**
+ * @hide
+ */
+ public Map<String, CameraCharacteristics> getPhysicalIdToCharsMap(
CameraCharacteristics chars) throws CameraAccessException {
HashMap<String, CameraCharacteristics> physicalIdsToChars =
new HashMap<String, CameraCharacteristics>();
@@ -974,8 +977,6 @@ public final class CameraManager {
final int oomScoreOffset, int rotationOverride) throws CameraAccessException {
CameraCharacteristics characteristics = getCameraCharacteristics(cameraId);
CameraDevice device = null;
- Map<String, CameraCharacteristics> physicalIdsToChars =
- getPhysicalIdToCharsMap(characteristics);
synchronized (mLock) {
ICameraDeviceUser cameraUser = null;
CameraDevice.CameraDeviceSetup cameraDeviceSetup = null;
@@ -990,7 +991,7 @@ public final class CameraManager {
callback,
executor,
characteristics,
- physicalIdsToChars,
+ this,
mContext.getApplicationInfo().targetSdkVersion,
mContext, cameraDeviceSetup);
ICameraDeviceCallbacks callbacks = deviceImpl.getCallbacks();
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 81bb9ac33df2..e2b409fe35f1 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -31,6 +31,7 @@ import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraExtensionCharacteristics;
+import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CameraOfflineSession;
import android.hardware.camera2.CaptureFailure;
@@ -146,7 +147,8 @@ public class CameraDeviceImpl extends CameraDevice
private final String mCameraId;
private final CameraCharacteristics mCharacteristics;
- private final Map<String, CameraCharacteristics> mPhysicalIdsToChars;
+ private Map<String, CameraCharacteristics> mPhysicalIdsToChars;
+ private final CameraManager mCameraManager;
private final int mTotalPartialCount;
private final Context mContext;
@@ -341,11 +343,12 @@ public class CameraDeviceImpl extends CameraDevice
public CameraDeviceImpl(String cameraId, StateCallback callback, Executor executor,
CameraCharacteristics characteristics,
- Map<String, CameraCharacteristics> physicalIdsToChars,
+ @NonNull CameraManager manager,
int appTargetSdkVersion,
Context ctx,
@Nullable CameraDevice.CameraDeviceSetup cameraDeviceSetup) {
- if (cameraId == null || callback == null || executor == null || characteristics == null) {
+ if (cameraId == null || callback == null || executor == null || characteristics == null
+ || manager == null) {
throw new IllegalArgumentException("Null argument given");
}
mCameraId = cameraId;
@@ -357,7 +360,7 @@ public class CameraDeviceImpl extends CameraDevice
mDeviceExecutor = executor;
}
mCharacteristics = characteristics;
- mPhysicalIdsToChars = physicalIdsToChars;
+ mCameraManager = manager;
mAppTargetSdkVersion = appTargetSdkVersion;
mContext = ctx;
mCameraDeviceSetup = cameraDeviceSetup;
@@ -379,6 +382,18 @@ public class CameraDeviceImpl extends CameraDevice
}
}
+ private Map<String, CameraCharacteristics> getPhysicalIdToChars() {
+ if (mPhysicalIdsToChars == null) {
+ try {
+ mPhysicalIdsToChars = mCameraManager.getPhysicalIdToCharsMap(mCharacteristics);
+ } catch (CameraAccessException e) {
+ Log.e(TAG, "Unable to query the physical characteristics map!");
+ }
+ }
+
+ return mPhysicalIdsToChars;
+ }
+
public CameraDeviceCallbacks getCallbacks() {
return mCallbacks;
}
@@ -1598,7 +1613,7 @@ public class CameraDeviceImpl extends CameraDevice
return true;
}
- for (Map.Entry<String, CameraCharacteristics> entry : mPhysicalIdsToChars.entrySet()) {
+ for (Map.Entry<String, CameraCharacteristics> entry : getPhysicalIdToChars().entrySet()) {
configMap = entry.getValue().get(ck);
if (configMap != null &&
@@ -2621,7 +2636,7 @@ public class CameraDeviceImpl extends CameraDevice
public void createExtensionSession(ExtensionSessionConfiguration extensionConfiguration)
throws CameraAccessException {
HashMap<String, CameraCharacteristics> characteristicsMap = new HashMap<>(
- mPhysicalIdsToChars);
+ getPhysicalIdToChars());
characteristicsMap.put(mCameraId, mCharacteristics);
boolean initializationFailed = true;
IBinder token = new Binder(TAG + " : " + mNextSessionId++);