Merge "Camera: Use characteristic from user app for extension" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2b956fe212
@@ -30,6 +30,7 @@ import android.hardware.camera2.extension.IInitializeSessionCallback;
|
|||||||
import android.hardware.camera2.extension.IPreviewExtenderImpl;
|
import android.hardware.camera2.extension.IPreviewExtenderImpl;
|
||||||
import android.hardware.camera2.extension.LatencyRange;
|
import android.hardware.camera2.extension.LatencyRange;
|
||||||
import android.hardware.camera2.extension.SizeList;
|
import android.hardware.camera2.extension.SizeList;
|
||||||
|
import android.hardware.camera2.impl.CameraExtensionUtils;
|
||||||
import android.hardware.camera2.impl.CameraMetadataNative;
|
import android.hardware.camera2.impl.CameraMetadataNative;
|
||||||
import android.hardware.camera2.params.ExtensionSessionConfiguration;
|
import android.hardware.camera2.params.ExtensionSessionConfiguration;
|
||||||
import android.hardware.camera2.params.StreamConfigurationMap;
|
import android.hardware.camera2.params.StreamConfigurationMap;
|
||||||
@@ -47,8 +48,10 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
@@ -161,16 +164,19 @@ public final class CameraExtensionCharacteristics {
|
|||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final String mCameraId;
|
private final String mCameraId;
|
||||||
private final CameraCharacteristics mChars;
|
private final Map<String, CameraCharacteristics> mCharacteristicsMap;
|
||||||
|
private final Map<String, CameraMetadataNative> mCharacteristicsMapNative;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public CameraExtensionCharacteristics(Context context, String cameraId,
|
public CameraExtensionCharacteristics(Context context, String cameraId,
|
||||||
CameraCharacteristics chars) {
|
Map<String, CameraCharacteristics> characteristicsMap) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mCameraId = cameraId;
|
mCameraId = cameraId;
|
||||||
mChars = chars;
|
mCharacteristicsMap = characteristicsMap;
|
||||||
|
mCharacteristicsMapNative =
|
||||||
|
CameraExtensionUtils.getCharacteristicsMapNative(characteristicsMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ArrayList<Size> getSupportedSizes(List<SizeList> sizesList,
|
private static ArrayList<Size> getSupportedSizes(List<SizeList> sizesList,
|
||||||
@@ -468,11 +474,11 @@ public final class CameraExtensionCharacteristics {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public static boolean isExtensionSupported(String cameraId, int extensionType,
|
public static boolean isExtensionSupported(String cameraId, int extensionType,
|
||||||
CameraCharacteristics chars) {
|
Map<String, CameraMetadataNative> characteristicsMap) {
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
try {
|
try {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extensionType);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extensionType);
|
||||||
return extender.isExtensionAvailable(cameraId);
|
return extender.isExtensionAvailable(cameraId, characteristicsMap);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Failed to query extension availability! Extension service does not"
|
Log.e(TAG, "Failed to query extension availability! Extension service does not"
|
||||||
+ " respond!");
|
+ " respond!");
|
||||||
@@ -487,8 +493,10 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return extenders.first.isExtensionAvailable(cameraId, chars.getNativeMetadata()) &&
|
return extenders.first.isExtensionAvailable(cameraId,
|
||||||
extenders.second.isExtensionAvailable(cameraId, chars.getNativeMetadata());
|
characteristicsMap.get(cameraId))
|
||||||
|
&& extenders.second.isExtensionAvailable(cameraId,
|
||||||
|
characteristicsMap.get(cameraId));
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Failed to query extension availability! Extension service does not"
|
Log.e(TAG, "Failed to query extension availability! Extension service does not"
|
||||||
+ " respond!");
|
+ " respond!");
|
||||||
@@ -563,7 +571,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
for (int extensionType : EXTENSION_LIST) {
|
for (int extensionType : EXTENSION_LIST) {
|
||||||
if (isExtensionSupported(mCameraId, extensionType, mChars)) {
|
if (isExtensionSupported(mCameraId, extensionType, mCharacteristicsMapNative)) {
|
||||||
ret.add(extensionType);
|
ret.add(extensionType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -597,18 +605,18 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
return extender.isPostviewAvailable();
|
return extender.isPostviewAvailable();
|
||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
return extenders.second.isPostviewAvailable();
|
return extenders.second.isPostviewAvailable();
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
@@ -655,7 +663,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -664,7 +672,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
sz.width = captureSize.getWidth();
|
sz.width = captureSize.getWidth();
|
||||||
sz.height = captureSize.getHeight();
|
sz.height = captureSize.getHeight();
|
||||||
|
|
||||||
StreamConfigurationMap streamMap = mChars.get(
|
StreamConfigurationMap streamMap = mCharacteristicsMap.get(mCameraId).get(
|
||||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
||||||
|
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
@@ -676,13 +684,13 @@ public final class CameraExtensionCharacteristics {
|
|||||||
throw new IllegalArgumentException("Unsupported format: " + format);
|
throw new IllegalArgumentException("Unsupported format: " + format);
|
||||||
}
|
}
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
return generateSupportedSizes(extender.getSupportedPostviewResolutions(
|
return generateSupportedSizes(extender.getSupportedPostviewResolutions(
|
||||||
sz), format, streamMap);
|
sz), format, streamMap);
|
||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
if ((extenders.second.getCaptureProcessor() == null) ||
|
if ((extenders.second.getCaptureProcessor() == null) ||
|
||||||
!isPostviewAvailable(extension)) {
|
!isPostviewAvailable(extension)) {
|
||||||
// Extensions that don't implement any capture processor
|
// Extensions that don't implement any capture processor
|
||||||
@@ -754,22 +762,23 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamConfigurationMap streamMap = mChars.get(
|
StreamConfigurationMap streamMap = mCharacteristicsMap.get(mCameraId).get(
|
||||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
return generateSupportedSizes(
|
return generateSupportedSizes(
|
||||||
extender.getSupportedPreviewOutputResolutions(mCameraId),
|
extender.getSupportedPreviewOutputResolutions(mCameraId),
|
||||||
ImageFormat.PRIVATE, streamMap);
|
ImageFormat.PRIVATE, streamMap);
|
||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.first.init(mCameraId, mChars.getNativeMetadata());
|
extenders.first.init(mCameraId,
|
||||||
|
mCharacteristicsMapNative.get(mCameraId));
|
||||||
return generateSupportedSizes(extenders.first.getSupportedResolutions(),
|
return generateSupportedSizes(extenders.first.getSupportedResolutions(),
|
||||||
ImageFormat.PRIVATE, streamMap);
|
ImageFormat.PRIVATE, streamMap);
|
||||||
}
|
}
|
||||||
@@ -811,11 +820,11 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamConfigurationMap streamMap = mChars.get(
|
StreamConfigurationMap streamMap = mCharacteristicsMap.get(mCameraId).get(
|
||||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
switch(format) {
|
switch(format) {
|
||||||
@@ -826,14 +835,14 @@ public final class CameraExtensionCharacteristics {
|
|||||||
throw new IllegalArgumentException("Unsupported format: " + format);
|
throw new IllegalArgumentException("Unsupported format: " + format);
|
||||||
}
|
}
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
return generateSupportedSizes(extender.getSupportedCaptureOutputResolutions(
|
return generateSupportedSizes(extender.getSupportedCaptureOutputResolutions(
|
||||||
mCameraId), format, streamMap);
|
mCameraId), format, streamMap);
|
||||||
} else {
|
} else {
|
||||||
if (format == ImageFormat.YUV_420_888) {
|
if (format == ImageFormat.YUV_420_888) {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
if (extenders.second.getCaptureProcessor() == null) {
|
if (extenders.second.getCaptureProcessor() == null) {
|
||||||
// Extensions that don't implement any capture processor are limited to
|
// Extensions that don't implement any capture processor are limited to
|
||||||
// JPEG only!
|
// JPEG only!
|
||||||
@@ -844,7 +853,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
} else if (format == ImageFormat.JPEG) {
|
} else if (format == ImageFormat.JPEG) {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
if (extenders.second.getCaptureProcessor() != null) {
|
if (extenders.second.getCaptureProcessor() != null) {
|
||||||
// The framework will perform the additional encoding pass on the
|
// The framework will perform the additional encoding pass on the
|
||||||
// processed YUV_420 buffers.
|
// processed YUV_420 buffers.
|
||||||
@@ -900,7 +909,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -910,7 +919,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
sz.height = captureOutputSize.getHeight();
|
sz.height = captureOutputSize.getHeight();
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
LatencyRange latencyRange = extender.getEstimatedCaptureLatencyRange(mCameraId,
|
LatencyRange latencyRange = extender.getEstimatedCaptureLatencyRange(mCameraId,
|
||||||
sz, format);
|
sz, format);
|
||||||
if (latencyRange != null) {
|
if (latencyRange != null) {
|
||||||
@@ -919,7 +928,7 @@ public final class CameraExtensionCharacteristics {
|
|||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
if ((format == ImageFormat.YUV_420_888) &&
|
if ((format == ImageFormat.YUV_420_888) &&
|
||||||
(extenders.second.getCaptureProcessor() == null) ){
|
(extenders.second.getCaptureProcessor() == null) ){
|
||||||
// Extensions that don't implement any capture processor are limited to
|
// Extensions that don't implement any capture processor are limited to
|
||||||
@@ -965,18 +974,18 @@ public final class CameraExtensionCharacteristics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
return extender.isCaptureProcessProgressAvailable();
|
return extender.isCaptureProcessProgressAvailable();
|
||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
return extenders.second.isCaptureProcessProgressAvailable();
|
return extenders.second.isCaptureProcessProgressAvailable();
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
@@ -1012,20 +1021,20 @@ public final class CameraExtensionCharacteristics {
|
|||||||
HashSet<CaptureRequest.Key> ret = new HashSet<>();
|
HashSet<CaptureRequest.Key> ret = new HashSet<>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraMetadataNative captureRequestMeta = null;
|
CameraMetadataNative captureRequestMeta = null;
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
captureRequestMeta = extender.getAvailableCaptureRequestKeys(mCameraId);
|
captureRequestMeta = extender.getAvailableCaptureRequestKeys(mCameraId);
|
||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
|
extenders.second.onInit(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
captureRequestMeta = extenders.second.getAvailableCaptureRequestKeys();
|
captureRequestMeta = extenders.second.getAvailableCaptureRequestKeys();
|
||||||
extenders.second.onDeInit();
|
extenders.second.onDeInit();
|
||||||
}
|
}
|
||||||
@@ -1090,20 +1099,20 @@ public final class CameraExtensionCharacteristics {
|
|||||||
|
|
||||||
HashSet<CaptureResult.Key> ret = new HashSet<>();
|
HashSet<CaptureResult.Key> ret = new HashSet<>();
|
||||||
try {
|
try {
|
||||||
if (!isExtensionSupported(mCameraId, extension, mChars)) {
|
if (!isExtensionSupported(mCameraId, extension, mCharacteristicsMapNative)) {
|
||||||
throw new IllegalArgumentException("Unsupported extension");
|
throw new IllegalArgumentException("Unsupported extension");
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraMetadataNative captureResultMeta = null;
|
CameraMetadataNative captureResultMeta = null;
|
||||||
if (areAdvancedExtensionsSupported()) {
|
if (areAdvancedExtensionsSupported()) {
|
||||||
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension);
|
||||||
extender.init(mCameraId);
|
extender.init(mCameraId, mCharacteristicsMapNative);
|
||||||
captureResultMeta = extender.getAvailableCaptureResultKeys(mCameraId);
|
captureResultMeta = extender.getAvailableCaptureResultKeys(mCameraId);
|
||||||
} else {
|
} else {
|
||||||
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders =
|
||||||
initializeExtension(extension);
|
initializeExtension(extension);
|
||||||
extenders.second.onInit(mCameraId, mChars.getNativeMetadata());
|
extenders.second.onInit(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
extenders.second.init(mCameraId, mChars.getNativeMetadata());
|
extenders.second.init(mCameraId, mCharacteristicsMapNative.get(mCameraId));
|
||||||
captureResultMeta = extenders.second.getAvailableCaptureResultKeys();
|
captureResultMeta = extenders.second.getAvailableCaptureResultKeys();
|
||||||
extenders.second.onDeInit();
|
extenders.second.onDeInit();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -694,7 +694,10 @@ public final class CameraManager {
|
|||||||
public CameraExtensionCharacteristics getCameraExtensionCharacteristics(
|
public CameraExtensionCharacteristics getCameraExtensionCharacteristics(
|
||||||
@NonNull String cameraId) throws CameraAccessException {
|
@NonNull String cameraId) throws CameraAccessException {
|
||||||
CameraCharacteristics chars = getCameraCharacteristics(cameraId);
|
CameraCharacteristics chars = getCameraCharacteristics(cameraId);
|
||||||
return new CameraExtensionCharacteristics(mContext, cameraId, chars);
|
Map<String, CameraCharacteristics> characteristicsMap = getPhysicalIdToCharsMap(chars);
|
||||||
|
characteristicsMap.put(cameraId, chars);
|
||||||
|
|
||||||
|
return new CameraExtensionCharacteristics(mContext, cameraId, characteristicsMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, CameraCharacteristics> getPhysicalIdToCharsMap(
|
private Map<String, CameraCharacteristics> getPhysicalIdToCharsMap(
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package android.hardware.camera2.extension;
|
package android.hardware.camera2.extension;
|
||||||
|
|
||||||
|
import android.hardware.camera2.impl.CameraMetadataNative;
|
||||||
|
|
||||||
import android.hardware.camera2.extension.ISessionProcessorImpl;
|
import android.hardware.camera2.extension.ISessionProcessorImpl;
|
||||||
import android.hardware.camera2.extension.LatencyRange;
|
import android.hardware.camera2.extension.LatencyRange;
|
||||||
import android.hardware.camera2.extension.Size;
|
import android.hardware.camera2.extension.Size;
|
||||||
@@ -24,8 +26,8 @@ import android.hardware.camera2.impl.CameraMetadataNative;
|
|||||||
/** @hide */
|
/** @hide */
|
||||||
interface IAdvancedExtenderImpl
|
interface IAdvancedExtenderImpl
|
||||||
{
|
{
|
||||||
boolean isExtensionAvailable(in String cameraId);
|
boolean isExtensionAvailable(in String cameraId, in Map<String, CameraMetadataNative> charsMap);
|
||||||
void init(in String cameraId);
|
void init(in String cameraId, in Map<String, CameraMetadataNative> charsMap);
|
||||||
LatencyRange getEstimatedCaptureLatencyRange(in String cameraId, in Size outputSize,
|
LatencyRange getEstimatedCaptureLatencyRange(in String cameraId, in Size outputSize,
|
||||||
int format);
|
int format);
|
||||||
@nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId);
|
@nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId);
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package android.hardware.camera2.extension;
|
package android.hardware.camera2.extension;
|
||||||
|
|
||||||
|
import android.hardware.camera2.impl.CameraMetadataNative;
|
||||||
|
|
||||||
import android.hardware.camera2.CaptureRequest;
|
import android.hardware.camera2.CaptureRequest;
|
||||||
import android.hardware.camera2.extension.CameraSessionConfig;
|
import android.hardware.camera2.extension.CameraSessionConfig;
|
||||||
import android.hardware.camera2.extension.ICaptureCallback;
|
import android.hardware.camera2.extension.ICaptureCallback;
|
||||||
@@ -26,7 +28,8 @@ import android.hardware.camera2.extension.OutputSurface;
|
|||||||
/** @hide */
|
/** @hide */
|
||||||
interface ISessionProcessorImpl
|
interface ISessionProcessorImpl
|
||||||
{
|
{
|
||||||
CameraSessionConfig initSession(in String cameraId, in OutputSurface previewSurface,
|
CameraSessionConfig initSession(in String cameraId,
|
||||||
|
in Map<String, CameraMetadataNative> charsMap, in OutputSurface previewSurface,
|
||||||
in OutputSurface imageCaptureSurface, in OutputSurface postviewSurface);
|
in OutputSurface imageCaptureSurface, in OutputSurface postviewSurface);
|
||||||
void deInitSession();
|
void deInitSession();
|
||||||
void onCaptureSessionStart(IRequestProcessorImpl requestProcessor);
|
void onCaptureSessionStart(IRequestProcessorImpl requestProcessor);
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import android.hardware.camera2.CameraCharacteristics;
|
|||||||
import android.hardware.camera2.CameraDevice;
|
import android.hardware.camera2.CameraDevice;
|
||||||
import android.hardware.camera2.CameraExtensionCharacteristics;
|
import android.hardware.camera2.CameraExtensionCharacteristics;
|
||||||
import android.hardware.camera2.CameraExtensionSession;
|
import android.hardware.camera2.CameraExtensionSession;
|
||||||
import android.hardware.camera2.CameraManager;
|
|
||||||
import android.hardware.camera2.CaptureFailure;
|
import android.hardware.camera2.CaptureFailure;
|
||||||
import android.hardware.camera2.CaptureRequest;
|
import android.hardware.camera2.CaptureRequest;
|
||||||
import android.hardware.camera2.CaptureResult;
|
import android.hardware.camera2.CaptureResult;
|
||||||
@@ -78,6 +77,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
|||||||
|
|
||||||
private final Executor mExecutor;
|
private final Executor mExecutor;
|
||||||
private final CameraDevice mCameraDevice;
|
private final CameraDevice mCameraDevice;
|
||||||
|
private final Map<String, CameraMetadataNative> mCharacteristicsMap;
|
||||||
private final long mExtensionClientId;
|
private final long mExtensionClientId;
|
||||||
private final Handler mHandler;
|
private final Handler mHandler;
|
||||||
private final HandlerThread mHandlerThread;
|
private final HandlerThread mHandlerThread;
|
||||||
@@ -109,6 +109,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
|||||||
@RequiresPermission(android.Manifest.permission.CAMERA)
|
@RequiresPermission(android.Manifest.permission.CAMERA)
|
||||||
public static CameraAdvancedExtensionSessionImpl createCameraAdvancedExtensionSession(
|
public static CameraAdvancedExtensionSessionImpl createCameraAdvancedExtensionSession(
|
||||||
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
|
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
|
||||||
|
@NonNull Map<String, CameraCharacteristics> characteristicsMap,
|
||||||
@NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId)
|
@NonNull Context ctx, @NonNull ExtensionSessionConfiguration config, int sessionId)
|
||||||
throws CameraAccessException, RemoteException {
|
throws CameraAccessException, RemoteException {
|
||||||
long clientId = CameraExtensionCharacteristics.registerClient(ctx);
|
long clientId = CameraExtensionCharacteristics.registerClient(ctx);
|
||||||
@@ -117,13 +118,13 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
|||||||
}
|
}
|
||||||
|
|
||||||
String cameraId = cameraDevice.getId();
|
String cameraId = cameraDevice.getId();
|
||||||
CameraManager manager = ctx.getSystemService(CameraManager.class);
|
|
||||||
CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
|
|
||||||
CameraExtensionCharacteristics extensionChars = new CameraExtensionCharacteristics(ctx,
|
CameraExtensionCharacteristics extensionChars = new CameraExtensionCharacteristics(ctx,
|
||||||
cameraId, chars);
|
cameraId, characteristicsMap);
|
||||||
|
|
||||||
|
Map<String, CameraMetadataNative> characteristicsMapNative =
|
||||||
|
CameraExtensionUtils.getCharacteristicsMapNative(characteristicsMap);
|
||||||
if (!CameraExtensionCharacteristics.isExtensionSupported(cameraDevice.getId(),
|
if (!CameraExtensionCharacteristics.isExtensionSupported(cameraDevice.getId(),
|
||||||
config.getExtension(), chars)) {
|
config.getExtension(), characteristicsMapNative)) {
|
||||||
throw new UnsupportedOperationException("Unsupported extension type: " +
|
throw new UnsupportedOperationException("Unsupported extension type: " +
|
||||||
config.getExtension());
|
config.getExtension());
|
||||||
}
|
}
|
||||||
@@ -198,11 +199,12 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
|||||||
|
|
||||||
IAdvancedExtenderImpl extender = CameraExtensionCharacteristics.initializeAdvancedExtension(
|
IAdvancedExtenderImpl extender = CameraExtensionCharacteristics.initializeAdvancedExtension(
|
||||||
config.getExtension());
|
config.getExtension());
|
||||||
extender.init(cameraId);
|
extender.init(cameraId, characteristicsMapNative);
|
||||||
|
|
||||||
CameraAdvancedExtensionSessionImpl ret = new CameraAdvancedExtensionSessionImpl(clientId,
|
CameraAdvancedExtensionSessionImpl ret = new CameraAdvancedExtensionSessionImpl(clientId,
|
||||||
extender, cameraDevice, repeatingRequestSurface, burstCaptureSurface,
|
extender, cameraDevice, characteristicsMapNative, repeatingRequestSurface,
|
||||||
postviewSurface, config.getStateCallback(), config.getExecutor(), sessionId);
|
burstCaptureSurface, postviewSurface, config.getStateCallback(),
|
||||||
|
config.getExecutor(), sessionId);
|
||||||
ret.initialize();
|
ret.initialize();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -210,14 +212,16 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
|||||||
|
|
||||||
private CameraAdvancedExtensionSessionImpl(long extensionClientId,
|
private CameraAdvancedExtensionSessionImpl(long extensionClientId,
|
||||||
@NonNull IAdvancedExtenderImpl extender,
|
@NonNull IAdvancedExtenderImpl extender,
|
||||||
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
|
@NonNull CameraDeviceImpl cameraDevice,
|
||||||
|
Map<String, CameraMetadataNative> characteristicsMap,
|
||||||
@Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface,
|
@Nullable Surface repeatingRequestSurface, @Nullable Surface burstCaptureSurface,
|
||||||
@Nullable Surface postviewSurface,
|
@Nullable Surface postviewSurface,
|
||||||
@NonNull CameraExtensionSession.StateCallback callback, @NonNull Executor executor,
|
@NonNull StateCallback callback, @NonNull Executor executor,
|
||||||
int sessionId) {
|
int sessionId) {
|
||||||
mExtensionClientId = extensionClientId;
|
mExtensionClientId = extensionClientId;
|
||||||
mAdvancedExtender = extender;
|
mAdvancedExtender = extender;
|
||||||
mCameraDevice = cameraDevice;
|
mCameraDevice = cameraDevice;
|
||||||
|
mCharacteristicsMap = characteristicsMap;
|
||||||
mCallbacks = callback;
|
mCallbacks = callback;
|
||||||
mExecutor = executor;
|
mExecutor = executor;
|
||||||
mClientRepeatingRequestSurface = repeatingRequestSurface;
|
mClientRepeatingRequestSurface = repeatingRequestSurface;
|
||||||
@@ -247,7 +251,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes
|
|||||||
|
|
||||||
mSessionProcessor = mAdvancedExtender.getSessionProcessor();
|
mSessionProcessor = mAdvancedExtender.getSessionProcessor();
|
||||||
CameraSessionConfig sessionConfig = mSessionProcessor.initSession(mCameraDevice.getId(),
|
CameraSessionConfig sessionConfig = mSessionProcessor.initSession(mCameraDevice.getId(),
|
||||||
previewSurface, captureSurface, postviewSurface);
|
mCharacteristicsMap, previewSurface, captureSurface, postviewSurface);
|
||||||
List<CameraOutputConfig> outputConfigs = sessionConfig.outputConfigs;
|
List<CameraOutputConfig> outputConfigs = sessionConfig.outputConfigs;
|
||||||
ArrayList<OutputConfiguration> outputList = new ArrayList<>();
|
ArrayList<OutputConfiguration> outputList = new ArrayList<>();
|
||||||
for (CameraOutputConfig output : outputConfigs) {
|
for (CameraOutputConfig output : outputConfigs) {
|
||||||
|
|||||||
@@ -2517,14 +2517,19 @@ public class CameraDeviceImpl extends CameraDevice
|
|||||||
@Override
|
@Override
|
||||||
public void createExtensionSession(ExtensionSessionConfiguration extensionConfiguration)
|
public void createExtensionSession(ExtensionSessionConfiguration extensionConfiguration)
|
||||||
throws CameraAccessException {
|
throws CameraAccessException {
|
||||||
|
HashMap<String, CameraCharacteristics> characteristicsMap = new HashMap<>(
|
||||||
|
mPhysicalIdsToChars);
|
||||||
|
characteristicsMap.put(mCameraId, mCharacteristics);
|
||||||
try {
|
try {
|
||||||
if (CameraExtensionCharacteristics.areAdvancedExtensionsSupported()) {
|
if (CameraExtensionCharacteristics.areAdvancedExtensionsSupported()) {
|
||||||
mCurrentAdvancedExtensionSession =
|
mCurrentAdvancedExtensionSession =
|
||||||
CameraAdvancedExtensionSessionImpl.createCameraAdvancedExtensionSession(
|
CameraAdvancedExtensionSessionImpl.createCameraAdvancedExtensionSession(
|
||||||
this, mContext, extensionConfiguration, mNextSessionId++);
|
this, characteristicsMap, mContext, extensionConfiguration,
|
||||||
|
mNextSessionId++);
|
||||||
} else {
|
} else {
|
||||||
mCurrentExtensionSession = CameraExtensionSessionImpl.createCameraExtensionSession(
|
mCurrentExtensionSession = CameraExtensionSessionImpl.createCameraExtensionSession(
|
||||||
this, mContext, extensionConfiguration, mNextSessionId++);
|
this, characteristicsMap, mContext, extensionConfiguration,
|
||||||
|
mNextSessionId++);
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
throw new CameraAccessException(CameraAccessException.CAMERA_ERROR);
|
throw new CameraAccessException(CameraAccessException.CAMERA_ERROR);
|
||||||
|
|||||||
@@ -129,6 +129,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
@RequiresPermission(android.Manifest.permission.CAMERA)
|
@RequiresPermission(android.Manifest.permission.CAMERA)
|
||||||
public static CameraExtensionSessionImpl createCameraExtensionSession(
|
public static CameraExtensionSessionImpl createCameraExtensionSession(
|
||||||
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
|
@NonNull android.hardware.camera2.impl.CameraDeviceImpl cameraDevice,
|
||||||
|
@NonNull Map<String, CameraCharacteristics> characteristicsMap,
|
||||||
@NonNull Context ctx,
|
@NonNull Context ctx,
|
||||||
@NonNull ExtensionSessionConfiguration config,
|
@NonNull ExtensionSessionConfiguration config,
|
||||||
int sessionId)
|
int sessionId)
|
||||||
@@ -139,13 +140,12 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String cameraId = cameraDevice.getId();
|
String cameraId = cameraDevice.getId();
|
||||||
CameraManager manager = ctx.getSystemService(CameraManager.class);
|
|
||||||
CameraCharacteristics chars = manager.getCameraCharacteristics(cameraId);
|
|
||||||
CameraExtensionCharacteristics extensionChars = new CameraExtensionCharacteristics(ctx,
|
CameraExtensionCharacteristics extensionChars = new CameraExtensionCharacteristics(ctx,
|
||||||
cameraId, chars);
|
cameraId, characteristicsMap);
|
||||||
|
|
||||||
if (!CameraExtensionCharacteristics.isExtensionSupported(cameraDevice.getId(),
|
if (!CameraExtensionCharacteristics.isExtensionSupported(cameraDevice.getId(),
|
||||||
config.getExtension(), chars)) {
|
config.getExtension(),
|
||||||
|
CameraExtensionUtils.getCharacteristicsMapNative(characteristicsMap))) {
|
||||||
throw new UnsupportedOperationException("Unsupported extension type: " +
|
throw new UnsupportedOperationException("Unsupported extension type: " +
|
||||||
config.getExtension());
|
config.getExtension());
|
||||||
}
|
}
|
||||||
@@ -222,10 +222,10 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extenders.first.init(cameraId, chars.getNativeMetadata());
|
extenders.first.init(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
|
||||||
extenders.first.onInit(cameraId, chars.getNativeMetadata());
|
extenders.first.onInit(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
|
||||||
extenders.second.init(cameraId, chars.getNativeMetadata());
|
extenders.second.init(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
|
||||||
extenders.second.onInit(cameraId, chars.getNativeMetadata());
|
extenders.second.onInit(cameraId, characteristicsMap.get(cameraId).getNativeMetadata());
|
||||||
|
|
||||||
CameraExtensionSessionImpl session = new CameraExtensionSessionImpl(
|
CameraExtensionSessionImpl session = new CameraExtensionSessionImpl(
|
||||||
extenders.second,
|
extenders.second,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.annotation.Nullable;
|
|||||||
import android.graphics.ImageFormat;
|
import android.graphics.ImageFormat;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
import android.hardware.HardwareBuffer;
|
import android.hardware.HardwareBuffer;
|
||||||
|
import android.hardware.camera2.CameraCharacteristics;
|
||||||
import android.hardware.camera2.CameraExtensionCharacteristics;
|
import android.hardware.camera2.CameraExtensionCharacteristics;
|
||||||
import android.hardware.camera2.params.OutputConfiguration;
|
import android.hardware.camera2.params.OutputConfiguration;
|
||||||
import android.hardware.camera2.params.StreamConfigurationMap;
|
import android.hardware.camera2.params.StreamConfigurationMap;
|
||||||
@@ -34,6 +35,7 @@ import android.view.Surface;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
@@ -169,4 +171,13 @@ public final class CameraExtensionUtils {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<String, CameraMetadataNative> getCharacteristicsMapNative(
|
||||||
|
Map<String, CameraCharacteristics> charsMap) {
|
||||||
|
HashMap<String, CameraMetadataNative> ret = new HashMap<>();
|
||||||
|
for (Map.Entry<String, CameraCharacteristics> entry : charsMap.entrySet()) {
|
||||||
|
ret.put(entry.getKey(), entry.getValue().getNativeMetadata());
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,7 +151,6 @@ public class CameraExtensionsProxyService extends Service {
|
|||||||
(EXTENSIONS_VERSION.startsWith(RESULTS_VERSION_PREFIX) ||
|
(EXTENSIONS_VERSION.startsWith(RESULTS_VERSION_PREFIX) ||
|
||||||
EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX));
|
EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX));
|
||||||
|
|
||||||
private HashMap<String, CameraCharacteristics> mCharacteristicsHashMap = new HashMap<>();
|
|
||||||
private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>();
|
private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>();
|
||||||
private CameraManager mCameraManager;
|
private CameraManager mCameraManager;
|
||||||
|
|
||||||
@@ -501,7 +500,6 @@ public class CameraExtensionsProxyService extends Service {
|
|||||||
if (cameraIds != null) {
|
if (cameraIds != null) {
|
||||||
for (String cameraId : cameraIds) {
|
for (String cameraId : cameraIds) {
|
||||||
CameraCharacteristics chars = mCameraManager.getCameraCharacteristics(cameraId);
|
CameraCharacteristics chars = mCameraManager.getCameraCharacteristics(cameraId);
|
||||||
mCharacteristicsHashMap.put(cameraId, chars);
|
|
||||||
Object thisClass = CameraCharacteristics.Key.class;
|
Object thisClass = CameraCharacteristics.Key.class;
|
||||||
Class<CameraCharacteristics.Key<?>> keyClass =
|
Class<CameraCharacteristics.Key<?>> keyClass =
|
||||||
(Class<CameraCharacteristics.Key<?>>)thisClass;
|
(Class<CameraCharacteristics.Key<?>>)thisClass;
|
||||||
@@ -554,6 +552,15 @@ public class CameraExtensionsProxyService extends Service {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Map<String, CameraCharacteristics> getCharacteristicsMap(
|
||||||
|
Map<String, CameraMetadataNative> charsMap) {
|
||||||
|
HashMap<String, CameraCharacteristics> ret = new HashMap<>();
|
||||||
|
for (Map.Entry<String, CameraMetadataNative> entry : charsMap.entrySet()) {
|
||||||
|
ret.put(entry.getKey(), new CameraCharacteristics(entry.getValue()));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
private static List<SizeList> initializeParcelable(
|
private static List<SizeList> initializeParcelable(
|
||||||
Map<Integer, List<android.util.Size>> sizes) {
|
Map<Integer, List<android.util.Size>> sizes) {
|
||||||
if (sizes == null) {
|
if (sizes == null) {
|
||||||
@@ -734,13 +741,15 @@ public class CameraExtensionsProxyService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isExtensionAvailable(String cameraId) {
|
public boolean isExtensionAvailable(String cameraId,
|
||||||
return mAdvancedExtender.isExtensionAvailable(cameraId, mCharacteristicsHashMap);
|
Map<String, CameraMetadataNative> charsMapNative) {
|
||||||
|
return mAdvancedExtender.isExtensionAvailable(cameraId,
|
||||||
|
getCharacteristicsMap(charsMapNative));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(String cameraId) {
|
public void init(String cameraId, Map<String, CameraMetadataNative> charsMapNative) {
|
||||||
mAdvancedExtender.init(cameraId, mCharacteristicsHashMap);
|
mAdvancedExtender.init(cameraId, getCharacteristicsMap(charsMapNative));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1192,7 +1201,8 @@ public class CameraExtensionsProxyService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CameraSessionConfig initSession(String cameraId, OutputSurface previewSurface,
|
public CameraSessionConfig initSession(String cameraId,
|
||||||
|
Map<String, CameraMetadataNative> charsMapNative, OutputSurface previewSurface,
|
||||||
OutputSurface imageCaptureSurface, OutputSurface postviewSurface) {
|
OutputSurface imageCaptureSurface, OutputSurface postviewSurface) {
|
||||||
OutputSurfaceImplStub outputPreviewSurfaceImpl =
|
OutputSurfaceImplStub outputPreviewSurfaceImpl =
|
||||||
new OutputSurfaceImplStub(previewSurface);
|
new OutputSurfaceImplStub(previewSurface);
|
||||||
@@ -1211,10 +1221,12 @@ public class CameraExtensionsProxyService extends Service {
|
|||||||
outputPostviewSurfaceImpl);
|
outputPostviewSurfaceImpl);
|
||||||
|
|
||||||
sessionConfig = mSessionProcessor.initSession(cameraId,
|
sessionConfig = mSessionProcessor.initSession(cameraId,
|
||||||
mCharacteristicsHashMap, getApplicationContext(), outputSurfaceConfigs);
|
getCharacteristicsMap(charsMapNative),
|
||||||
|
getApplicationContext(), outputSurfaceConfigs);
|
||||||
} else {
|
} else {
|
||||||
sessionConfig = mSessionProcessor.initSession(cameraId,
|
sessionConfig = mSessionProcessor.initSession(cameraId,
|
||||||
mCharacteristicsHashMap, getApplicationContext(), outputPreviewSurfaceImpl,
|
getCharacteristicsMap(charsMapNative),
|
||||||
|
getApplicationContext(), outputPreviewSurfaceImpl,
|
||||||
outputImageCaptureSurfaceImpl, null /*imageAnalysisSurfaceConfig*/);
|
outputImageCaptureSurfaceImpl, null /*imageAnalysisSurfaceConfig*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user