Merge "Merge 24Q4 into AOSP main" into main
diff --git a/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidService.java b/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidService.java
index 496ead1..6379378 100644
--- a/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidService.java
+++ b/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidService.java
@@ -34,8 +34,6 @@
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
-import android.hardware.camera2.ExtensionCaptureRequest;
-import android.hardware.camera2.ExtensionCaptureResult;
import android.hardware.camera2.extension.AdvancedExtender;
import android.hardware.camera2.extension.CameraExtensionService;
import android.hardware.camera2.extension.CharacteristicsMap;
@@ -54,7 +52,6 @@
import com.android.internal.camera.flags.Flags;
-@FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public class EyesFreeVidService extends CameraExtensionService {
private static final String TAG = "EyesFreeVidService";
@@ -69,7 +66,6 @@
protected static final Key REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP =
new Key<long[]>("android.request.availableColorSpaceProfilesMap", long[].class);
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public boolean onRegisterClient(IBinder token) {
synchronized (mLock) {
@@ -81,7 +77,6 @@
}
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void onUnregisterClient(IBinder token) {
synchronized (mLock) {
@@ -89,42 +84,36 @@
}
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public AdvancedExtender onInitializeAdvancedExtension(int extensionType) {
mCameraManager = getSystemService(CameraManager.class);
switch (extensionType) {
- case CameraExtensionCharacteristics.EXTENSION_EYES_FREE_VIDEOGRAPHY:
+ case CameraExtensionCharacteristics.EXTENSION_FACE_RETOUCH:
return new AdvancedExtenderEyesFreeImpl(mCameraManager);
default:
return new AdvancedExtenderImpl(mCameraManager);
}
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public static class AdvancedExtenderEyesFreeImpl extends AdvancedExtender {
private CameraCharacteristics mCameraCharacteristics;
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public AdvancedExtenderEyesFreeImpl(@NonNull CameraManager cameraManager) {
super(cameraManager);
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public boolean isExtensionAvailable(String cameraId,
CharacteristicsMap charsMap) {
return true;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void initialize(String cameraId, CharacteristicsMap map) {
mCameraCharacteristics = map.get(cameraId);
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
String cameraId) {
@@ -153,7 +142,6 @@
return mCameraCharacteristics;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
String cameraId) {
@@ -161,45 +149,29 @@
ImageFormat.JPEG, ImageFormat.JPEG_R, ImageFormat.YCBCR_P010));
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public SessionProcessor getSessionProcessor() {
return new EyesFreeVidSessionProcessor(this);
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys(
String cameraId) {
final CaptureRequest.Key [] CAPTURE_REQUEST_SET = {CaptureRequest.CONTROL_ZOOM_RATIO,
CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_REGIONS,
CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.JPEG_QUALITY,
- CaptureRequest.JPEG_ORIENTATION, ExtensionCaptureRequest.EFV_PADDING_ZOOM_FACTOR,
- ExtensionCaptureRequest.EFV_AUTO_ZOOM,
- ExtensionCaptureRequest.EFV_MAX_PADDING_ZOOM_FACTOR,
- ExtensionCaptureRequest.EFV_STABILIZATION_MODE,
- ExtensionCaptureRequest.EFV_TRANSLATE_VIEWPORT,
- ExtensionCaptureRequest.EFV_ROTATE_VIEWPORT};
+ CaptureRequest.JPEG_ORIENTATION
+ };
return Arrays.asList(CAPTURE_REQUEST_SET);
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys(
String cameraId) {
final CaptureResult.Key [] CAPTURE_RESULT_SET = {CaptureResult.CONTROL_ZOOM_RATIO,
CaptureResult.CONTROL_AF_MODE, CaptureResult.CONTROL_AF_REGIONS,
CaptureResult.CONTROL_AF_TRIGGER, CaptureResult.CONTROL_AF_STATE,
- CaptureResult.JPEG_QUALITY, CaptureResult.JPEG_ORIENTATION,
- ExtensionCaptureResult.EFV_PADDING_REGION,
- ExtensionCaptureResult.EFV_AUTO_ZOOM,
- ExtensionCaptureResult.EFV_MAX_PADDING_ZOOM_FACTOR,
- ExtensionCaptureResult.EFV_AUTO_ZOOM_PADDING_REGION,
- ExtensionCaptureResult.EFV_STABILIZATION_MODE,
- ExtensionCaptureResult.EFV_TARGET_COORDINATES,
- ExtensionCaptureResult.EFV_PADDING_ZOOM_FACTOR,
- ExtensionCaptureResult.EFV_TRANSLATE_VIEWPORT,
- ExtensionCaptureResult.EFV_ROTATE_VIEWPORT
+ CaptureResult.JPEG_QUALITY, CaptureResult.JPEG_ORIENTATION
};
return Arrays.asList(CAPTURE_RESULT_SET);
}
@@ -310,8 +282,6 @@
new int[]{ CameraCharacteristics
.CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
}),
- Pair.create(CameraExtensionCharacteristics.EFV_PADDING_ZOOM_FACTOR_RANGE,
- new Range<Float>(1.0f, 2.0f)),
Pair.create(REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP,
dynamicRangeProfileArray),
Pair.create(REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP,
@@ -320,28 +290,23 @@
}
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public static class AdvancedExtenderImpl extends AdvancedExtender {
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public AdvancedExtenderImpl(@NonNull CameraManager cameraManager) {
super(cameraManager);
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public boolean isExtensionAvailable(String cameraId,
CharacteristicsMap charsMap) {
return false;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void initialize(String cameraId, CharacteristicsMap map) {
throw new RuntimeException("Extension not supported");
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
String cameraId) {
@@ -356,20 +321,17 @@
throw new RuntimeException("Extension not supported");
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
String cameraId) {
throw new RuntimeException("Extension not supported");
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public SessionProcessor getSessionProcessor() {
throw new RuntimeException("Extension not supported");
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys(
String cameraId) {
@@ -377,7 +339,6 @@
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys(
String cameraId) {
diff --git a/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidSessionProcessor.java b/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidSessionProcessor.java
index 9158792..364f959 100644
--- a/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidSessionProcessor.java
+++ b/camera2/extensions/eyesFreeVidSample/src/android/camera/extensions/impl/service/EyesFreeVidSessionProcessor.java
@@ -37,8 +37,6 @@
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
-import android.hardware.camera2.ExtensionCaptureRequest;
-import android.hardware.camera2.ExtensionCaptureResult;
import android.hardware.camera2.TotalCaptureResult;
import android.hardware.camera2.extension.CameraOutputSurface;
import android.hardware.camera2.extension.CharacteristicsMap;
@@ -58,11 +56,9 @@
import android.util.Pair;
import androidx.annotation.GuardedBy;
-import com.android.internal.camera.flags.Flags;
import java.util.concurrent.atomic.AtomicBoolean;
-@FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public class EyesFreeVidSessionProcessor extends SessionProcessor {
private static final String TAG = "EyesFreeVidSessionProcessor";
@@ -94,12 +90,10 @@
protected AtomicBoolean mOnCaptureSessionEndStarted = new AtomicBoolean(false);
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
protected EyesFreeVidSessionProcessor(AdvancedExtenderEyesFreeImpl advancedExtender) {
mAdvancedExtender = advancedExtender;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
public ExtensionConfiguration initSession(@NonNull IBinder token,
@NonNull String cameraId, @NonNull CharacteristicsMap map,
@NonNull CameraOutputSurface previewSurface,
@@ -148,7 +142,6 @@
return res;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void deInitSession(@NonNull IBinder token) {
if (mPreviewImageReader != null) {
@@ -170,7 +163,6 @@
}
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void onCaptureSessionStart(@NonNull RequestProcessor requestProcessor,
@NonNull String statsKey) {
@@ -195,7 +187,6 @@
mPreviewImageReader.setOnImageAvailableListener(new ImageListener(), mHandler);
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void onCaptureSessionEnd() {
mOnCaptureSessionEndStarted.set(true);
@@ -207,7 +198,6 @@
mRequestProcessor = null;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public int startRepeating(@NonNull Executor executor,
@NonNull CaptureCallback captureCallback) {
@@ -301,67 +291,6 @@
}
}
- synchronized (mParametersLock) {
- List<Pair<CaptureRequest.Key, Object>> requestParameters = request.getParameters();
- boolean autoZoomEnabled = false;
- boolean stabilizationModeLocked = false;
- for (Pair<CaptureRequest.Key, Object> parameter : requestParameters) {
- if (ExtensionCaptureRequest.EFV_AUTO_ZOOM.equals(parameter.first)) {
- captureResults.put(ExtensionCaptureResult.EFV_AUTO_ZOOM,
- (boolean) parameter.second);
- autoZoomEnabled = (boolean) parameter.second;
- if (autoZoomEnabled &&
- ExtensionCaptureRequest.EFV_MAX_PADDING_ZOOM_FACTOR.equals(
- parameter.first)) {
- captureResults.put(
- ExtensionCaptureResult.EFV_MAX_PADDING_ZOOM_FACTOR,
- (Float) parameter.second);
- }
- }
- if (ExtensionCaptureRequest.EFV_PADDING_ZOOM_FACTOR.equals(parameter.first)) {
- captureResults.put(ExtensionCaptureResult.EFV_PADDING_ZOOM_FACTOR,
- (Float) parameter.second);
- }
- if (ExtensionCaptureRequest.EFV_TRANSLATE_VIEWPORT.equals(parameter.first)) {
- captureResults.put(ExtensionCaptureResult.EFV_TRANSLATE_VIEWPORT,
- (Pair<Integer, Integer>) parameter.second);
- }
- if (ExtensionCaptureRequest.EFV_ROTATE_VIEWPORT.equals(parameter.first)) {
- captureResults.put(ExtensionCaptureResult.EFV_ROTATE_VIEWPORT,
- (Float) parameter.second);
- }
- if (ExtensionCaptureRequest.EFV_STABILIZATION_MODE.equals(parameter.first)) {
- if (ExtensionCaptureRequest.EFV_STABILIZATION_MODE_LOCKED ==
- (int) parameter.second) {
- stabilizationModeLocked = true;
- int[] samplePaddingRegion = {5, 5, 5, 5};
- captureResults.put(ExtensionCaptureResult.EFV_PADDING_REGION,
- samplePaddingRegion);
- CameraCharacteristics cameraCharacteristics =
- mAdvancedExtender.getCameraCharacteristics();
- Rect arraySize = cameraCharacteristics.get(
- CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
- int centerX = arraySize.width() / 2;
- int centerY = arraySize.height() / 2;
- int squareSize = 5;
- PointF[] sampleTargetCoordinates = new PointF[]{
- new PointF(centerX - squareSize, centerY - squareSize),
- new PointF(centerX + squareSize, centerY - squareSize),
- new PointF(centerX + squareSize, centerY + squareSize),
- new PointF(centerX - squareSize, centerY + squareSize)
- };
- captureResults.put(ExtensionCaptureResult.EFV_TARGET_COORDINATES,
- sampleTargetCoordinates);
- }
- }
- }
-
- if (autoZoomEnabled && stabilizationModeLocked) {
- int[] sampleAutoZoomPaddingRegion = {3, 3, 3, 3};
- captureResults.put(ExtensionCaptureResult.EFV_AUTO_ZOOM_PADDING_REGION,
- sampleAutoZoomPaddingRegion);
- }
- }
captureCallback.onCaptureCompleted(shutterTimestamp, seqId, captureResults);
}
@@ -382,13 +311,11 @@
return mParametersList;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void stopRepeating() {
mRequestProcessor.stopRepeating();
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public int startMultiFrameCapture(@NonNull Executor executor,
@NonNull CaptureCallback captureCallback) {
@@ -453,7 +380,6 @@
return seqId;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public int startTrigger(@NonNull CaptureRequest captureRequest,
@NonNull Executor executor, @NonNull CaptureCallback captureCallback) {
@@ -533,7 +459,6 @@
return parameters;
}
- @FlaggedApi(Flags.FLAG_CONCERT_MODE_API)
@Override
public void setParameters(@NonNull CaptureRequest captureRequest) {
synchronized (mParametersLock) {
diff --git a/camera2/extensions/stub/Android.bp b/camera2/extensions/stub/Android.bp
index 7ebfdea..aca5711 100644
--- a/camera2/extensions/stub/Android.bp
+++ b/camera2/extensions/stub/Android.bp
@@ -20,9 +20,7 @@
name: "androidx.camera.extensions.stub",
installable: true,
- static_libs: ["androidx.annotation_annotation"],
+ platform_apis: true,
srcs: ["src/**/*.java"],
-
- sdk_version: "current",
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java
old mode 100755
new mode 100644
index bd60570..e8414a7
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoImageCaptureExtenderImpl.java
@@ -23,8 +23,8 @@
import android.util.Range;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -45,15 +45,18 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureProcessorImpl getCaptureProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<CaptureStageImpl> getCaptureStages() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -65,8 +68,9 @@
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -75,44 +79,50 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
- public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(Size captureSize) {
+ public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(
+ @NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Nullable
@Override
- public Range<Long> getEstimatedCaptureLatencyRange(@NonNull Size captureOutputSize) {
+ public Range<Long> getEstimatedCaptureLatencyRange(@Nullable Size captureOutputSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -129,6 +139,7 @@
}
@Override
+ @Nullable
public Pair<Long, Long> getRealtimeCaptureLatency() {
throw new RuntimeException("Stub, replace with implementation.");
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java
old mode 100755
new mode 100644
index 0c4577a..f3f9693
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/AutoPreviewExtenderImpl.java
@@ -21,8 +21,8 @@
import android.util.Pair;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -44,28 +44,33 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public CaptureStageImpl getCaptureStage() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public ProcessorType getProcessorType() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public ProcessorImpl getProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -74,21 +79,25 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
old mode 100755
new mode 100644
index 50c8040..98b9e6e
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyImageCaptureExtenderImpl.java
@@ -23,8 +23,8 @@
import android.util.Range;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -45,15 +45,18 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureProcessorImpl getCaptureProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<CaptureStageImpl> getCaptureStages() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -65,8 +68,9 @@
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -75,44 +79,49 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(Size captureSize) {
+ @Nullable
+ public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(@NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Nullable
@Override
- public Range<Long> getEstimatedCaptureLatencyRange(@NonNull Size captureOutputSize) {
+ public Range<Long> getEstimatedCaptureLatencyRange(@Nullable Size captureOutputSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -129,6 +138,7 @@
}
@Override
+ @Nullable
public Pair<Long, Long> getRealtimeCaptureLatency() {
throw new RuntimeException("Stub, replace with implementation.");
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
old mode 100755
new mode 100644
index 1f50174..77ac3a5
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BeautyPreviewExtenderImpl.java
@@ -21,8 +21,8 @@
import android.util.Pair;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -44,28 +44,33 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public CaptureStageImpl getCaptureStage() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public ProcessorType getProcessorType() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public ProcessorImpl getProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -74,21 +79,25 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java
index ee777cf..a81d6d9 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehImageCaptureExtenderImpl.java
@@ -23,8 +23,8 @@
import android.util.Range;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -45,15 +45,18 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureProcessorImpl getCaptureProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<CaptureStageImpl> getCaptureStages() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -65,8 +68,9 @@
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -75,44 +79,49 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(Size captureSize) {
+ @Nullable
+ public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(@NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Nullable
@Override
- public Range<Long> getEstimatedCaptureLatencyRange(@NonNull Size captureOutputSize) {
+ public Range<Long> getEstimatedCaptureLatencyRange(@Nullable Size captureOutputSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -128,6 +137,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public Pair<Long, Long> getRealtimeCaptureLatency() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java
index 1dc5ed7..6327b80 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/BokehPreviewExtenderImpl.java
@@ -20,8 +20,8 @@
import android.util.Pair;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -42,28 +42,33 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public CaptureStageImpl getCaptureStage() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public ProcessorType getProcessorType() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public ProcessorImpl getProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -72,21 +77,25 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureProcessorImpl.java
index f4719b8..1f121a8 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureProcessorImpl.java
@@ -24,6 +24,9 @@
import android.util.Size;
import android.view.Surface;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.Map;
import java.util.concurrent.Executor;
@@ -44,7 +47,7 @@
* process. The {@link Image} that are contained within the map will become
* invalid after this method completes, so no references to them should be kept.
*/
- void process(Map<Integer, Pair<Image, TotalCaptureResult>> results);
+ void process(@NonNull Map<Integer, Pair<Image, TotalCaptureResult>> results);
/**
* Informs the CaptureProcessorImpl where it should write the postview output to.
@@ -54,7 +57,7 @@
* that the CaptureProcessorImpl should write data into.
* @since 1.4
*/
- void onPostviewOutputSurface(Surface surface);
+ void onPostviewOutputSurface(@NonNull Surface surface);
/**
* Invoked when the Camera Framework changes the configured output resolution for
@@ -67,7 +70,7 @@
* @param postviewSize for the surface for postview.
* @since 1.4
*/
- void onResolutionUpdate(Size size, Size postviewSize);
+ void onResolutionUpdate(@NonNull Size size, @NonNull Size postviewSize);
/**
* Process a set images captured that were requested.
@@ -85,8 +88,8 @@
* run on any arbitrary executor.
* @since 1.3
*/
- void process(Map<Integer, Pair<Image, TotalCaptureResult>> results,
- ProcessResultImpl resultCallback, Executor executor);
+ void process(@NonNull Map<Integer, Pair<Image, TotalCaptureResult>> results,
+ @NonNull ProcessResultImpl resultCallback, @Nullable Executor executor);
/**
* Process a set images captured that were requested for both postview and
@@ -111,6 +114,6 @@
* @throws RuntimeException if postview feature is not supported
* @since 1.4
*/
- void processWithPostview(Map<Integer, Pair<Image, TotalCaptureResult>> results,
- ProcessResultImpl resultCallback, Executor executor);
+ void processWithPostview(@NonNull Map<Integer, Pair<Image, TotalCaptureResult>> results,
+ @NonNull ProcessResultImpl resultCallback, @Nullable Executor executor);
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureStageImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureStageImpl.java
index c4796c2..39a7db2 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureStageImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/CaptureStageImpl.java
@@ -19,6 +19,8 @@
import android.hardware.camera2.CaptureRequest;
import android.util.Pair;
+import android.annotation.NonNull;
+
import java.util.List;
/**
@@ -34,5 +36,6 @@
* Returns the set of {@link CaptureRequest.Key} and the corresponding values that will be
* set for a single {@link CaptureRequest}.
*/
+ @NonNull
List<Pair<CaptureRequest.Key, Object>> getParameters();
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java
index 4a3b01c..79e7e58 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtenderStateListener.java
@@ -22,6 +22,9 @@
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.SessionConfiguration;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
/**
* Provides interfaces that the OEM needs to implement to handle the state change.
*
@@ -39,7 +42,8 @@
* @param cameraCharacteristics The {@link CameraCharacteristics} of the camera.
* @param context The {@link Context} used for CameraX.
*/
- void onInit(String cameraId, CameraCharacteristics cameraCharacteristics, Context context);
+ void onInit(@NonNull String cameraId, @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context);
/**
* Notify to de-initialize the extension. This callback will be invoked after unbind.
@@ -58,6 +62,7 @@
*
* @return The request information to set the session wide camera parameters.
*/
+ @Nullable
CaptureStageImpl onPresetSession();
/**
@@ -69,6 +74,7 @@
*
* @return The request information to create a single capture request to camera device.
*/
+ @Nullable
CaptureStageImpl onEnableSession();
/**
@@ -79,6 +85,7 @@
*
* @return The request information to customize the session.
*/
+ @Nullable
CaptureStageImpl onDisableSession();
/**
@@ -90,10 +97,11 @@
* is inconsistency between the session type values from preview and image extenders, then
* the session configuration will fail.
*
- * @since 1.4
* @return Camera capture session type. Regular and vendor specific types are supported but
* not high speed values. The extension can return -1 in which case the camera capture session
* will be configured to use the default regular type.
+ *
+ * @since 1.4
*/
int onSessionType();
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java
index 7769551..7cd0190 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ExtensionVersionImpl.java
@@ -16,6 +16,8 @@
package androidx.camera.extensions.impl;
+import android.annotation.NonNull;
+
/**
* Stub implementation for the extension version check.
*
@@ -50,7 +52,8 @@
* @return the version that vendor supported in this device. The MAJOR.MINOR.PATCH format
* should be used.
*/
- public String checkApiVersion(String version) {
+ @NonNull
+ public String checkApiVersion(@NonNull String version) {
throw new RuntimeException("Stub, replace with implementation.");
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java
index f3fd2f3..5f804f8 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrImageCaptureExtenderImpl.java
@@ -23,8 +23,8 @@
import android.util.Range;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -45,15 +45,18 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureProcessorImpl getCaptureProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<CaptureStageImpl> getCaptureStages() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -65,8 +68,9 @@
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -75,44 +79,49 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(Size captureSize) {
+ @Nullable
+ public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(@NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Nullable
@Override
- public Range<Long> getEstimatedCaptureLatencyRange(@NonNull Size captureOutputSize) {
+ public Range<Long> getEstimatedCaptureLatencyRange(@Nullable Size captureOutputSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -128,6 +137,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public Pair<Long, Long> getRealtimeCaptureLatency() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java
index af48464..f035f6f 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/HdrPreviewExtenderImpl.java
@@ -21,8 +21,8 @@
import android.util.Pair;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -44,28 +44,33 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public CaptureStageImpl getCaptureStage() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public ProcessorType getProcessorType() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public ProcessorImpl getProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -74,21 +79,25 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ImageCaptureExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ImageCaptureExtenderImpl.java
index 70c1804..9060b94 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ImageCaptureExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ImageCaptureExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl;
-import android.annotation.SuppressLint;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
@@ -25,6 +24,9 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.List;
/**
@@ -32,7 +34,6 @@
*
* @since 1.0
*/
-@SuppressLint("UnknownNullness")
public interface ImageCaptureExtenderImpl extends ExtenderStateListener {
/**
* Indicates whether the extension is supported on the device.
@@ -41,7 +42,8 @@
* @param cameraCharacteristics The {@link CameraCharacteristics} of the camera.
* @return true if the extension is supported, otherwise false
*/
- boolean isExtensionAvailable(String cameraId, CameraCharacteristics cameraCharacteristics);
+ boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics);
/**
* Initializes the extender to be used with the specified camera.
@@ -52,14 +54,16 @@
* @param cameraId The camera2 id string of the camera.
* @param cameraCharacteristics The {@link CameraCharacteristics} of the camera.
*/
- void init(String cameraId, CameraCharacteristics cameraCharacteristics);
+ void init(@NonNull String cameraId, @NonNull CameraCharacteristics cameraCharacteristics);
/**
* The processing that will be done on a set of captures to create and image with the effect.
*/
+ @Nullable
CaptureProcessorImpl getCaptureProcessor();
/** The set of captures that are needed to create an image with the effect. */
+ @NonNull
List<CaptureStageImpl> getCaptureStages();
/**
@@ -82,22 +86,21 @@
* {@link android.hardware.camera2.params.StreamConfigurationMap}.
* @since 1.1
*/
+ @Nullable
List<Pair<Integer, Size[]>> getSupportedResolutions();
/**
- * Returns the customized supported postview resolutions for a still capture using
- * its size.
+ * Returns supported output format/size map for postview image. OEM is required to support
+ * YUV_420_888 format output.
*
* <p>Pair list composed with {@link ImageFormat} and {@link Size} array will be returned.
+ * The sizes must be smaller than or equal to the provided capture size and have the same
+ * aspect ratio as the given capture size.
*
- * <p>The returned resolutions should be subset of the supported sizes retrieved from
- * {@link android.hardware.camera2.params.StreamConfigurationMap} for the camera device.
- *
- * @return the customized supported resolutions, or null to support all sizes retrieved from
- * {@link android.hardware.camera2.params.StreamConfigurationMap}.
* @since 1.4
*/
- List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(Size captureSize);
+ @Nullable
+ List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(@NonNull Size captureSize);
/**
* Returns the estimated capture latency range in milliseconds for the target capture
@@ -113,7 +116,8 @@
* null if no capture latency info can be provided.
* @since 1.2
*/
- Range<Long> getEstimatedCaptureLatencyRange(Size captureOutputSize);
+ @Nullable
+ Range<Long> getEstimatedCaptureLatencyRange(@Nullable Size captureOutputSize);
/**
* Return a list of orthogonal capture request keys.
@@ -154,6 +158,7 @@
* are not supported.
* @since 1.3
*/
+ @NonNull
List<CaptureRequest.Key> getAvailableCaptureRequestKeys();
/**
@@ -173,6 +178,7 @@
* supported.
* @since 1.3
*/
+ @NonNull
List<CaptureResult.Key> getAvailableCaptureResultKeys();
/**
@@ -202,6 +208,7 @@
* null pair.
* @since 1.4
*/
+ @Nullable
Pair<Long, Long> getRealtimeCaptureLatency();
/**
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/InitializerImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/InitializerImpl.java
index 779a2ee..8958759 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/InitializerImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/InitializerImpl.java
@@ -18,8 +18,8 @@
import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.concurrent.Executor;
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
old mode 100755
new mode 100644
index 6f0eaef..815f5d0
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightImageCaptureExtenderImpl.java
@@ -23,8 +23,8 @@
import android.util.Range;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -45,15 +45,18 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureProcessorImpl getCaptureProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<CaptureStageImpl> getCaptureStages() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -65,8 +68,9 @@
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -75,44 +79,49 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
- public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(Size captureSize) {
+ public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(@NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Nullable
@Override
- public Range<Long> getEstimatedCaptureLatencyRange(@NonNull Size captureOutputSize) {
+ public Range<Long> getEstimatedCaptureLatencyRange(@Nullable Size captureOutputSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
- @Nullable
+ @NonNull
@Override
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
@@ -128,6 +137,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public Pair<Long, Long> getRealtimeCaptureLatency() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
old mode 100755
new mode 100644
index 825994f..5783aba
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/NightPreviewExtenderImpl.java
@@ -21,8 +21,8 @@
import android.util.Pair;
import android.util.Size;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -44,28 +44,33 @@
}
@Override
- public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {
+ public void init(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics) {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public CaptureStageImpl getCaptureStage() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public ProcessorType getProcessorType() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public ProcessorImpl getProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
- Context context) {
+ public void onInit(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics,
+ @NonNull Context context) {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -74,21 +79,25 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onPresetSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onEnableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public CaptureStageImpl onDisableSession() {
throw new RuntimeException("Stub, replace with implementation.");
}
+ @Nullable
@Override
public List<Pair<Integer, Size[]>> getSupportedResolutions() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java
index 4324987..077cb95 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewExtenderImpl.java
@@ -22,7 +22,8 @@
import android.util.Pair;
import android.util.Size;
-import androidx.annotation.Nullable;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import java.util.List;
@@ -49,7 +50,8 @@
* @param cameraCharacteristics The {@link CameraCharacteristics} of the camera.
* @return true if the extension is supported, otherwise false
*/
- boolean isExtensionAvailable(String cameraId, CameraCharacteristics cameraCharacteristics);
+ boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull CameraCharacteristics cameraCharacteristics);
/**
* Initializes the extender to be used with the specified camera.
@@ -60,7 +62,7 @@
* @param cameraId The camera2 id string of the camera.
* @param cameraCharacteristics The {@link CameraCharacteristics} of the camera.
*/
- void init(String cameraId, CameraCharacteristics cameraCharacteristics);
+ void init(@NonNull String cameraId, @NonNull CameraCharacteristics cameraCharacteristics);
/**
* The set of parameters required to produce the effect on the preview stream.
@@ -73,9 +75,11 @@
* CaptureStageImpl}. If the processing step returns a {@code null}, meaning the required
* parameters has not changed, then calling this will return the previous non-null value.
*/
+ @NonNull
CaptureStageImpl getCaptureStage();
/** The type of preview processing to use. */
+ @NonNull
ProcessorType getProcessorType();
/**
@@ -91,6 +95,7 @@
* <tr><td> PROCESSOR_TYPE_NONE </td> <td> null </td> </tr>
* </table>
*/
+ @Nullable
ProcessorImpl getProcessor();
/**
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewImageProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewImageProcessorImpl.java
index f203eba..48e810f 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewImageProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/PreviewImageProcessorImpl.java
@@ -16,11 +16,13 @@
package androidx.camera.extensions.impl;
-import android.annotation.SuppressLint;
import android.graphics.ImageFormat;
import android.hardware.camera2.TotalCaptureResult;
import android.media.Image;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.concurrent.Executor;
/**
@@ -29,7 +31,6 @@
*
* @since 1.0
*/
-@SuppressLint("UnknownNullness")
public interface PreviewImageProcessorImpl extends ProcessorImpl {
/**
* Processes the requested image capture.
@@ -41,7 +42,7 @@
* invalid after the method completes so no reference to it should be kept.
* @param result The metadata associated with the image to process.
*/
- void process(Image image, TotalCaptureResult result);
+ void process(@NonNull Image image, @NonNull TotalCaptureResult result);
/**
* Processes the requested image capture.
@@ -59,6 +60,7 @@
* run on any arbitrary executor.
* @since 1.3
*/
- void process(Image image, TotalCaptureResult result, ProcessResultImpl resultCallback,
- Executor executor);
+ void process(@NonNull Image image, @NonNull TotalCaptureResult result,
+ @NonNull ProcessResultImpl resultCallback,
+ @Nullable Executor executor);
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessResultImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessResultImpl.java
index 0e15445..e4f7f2c 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessResultImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessResultImpl.java
@@ -16,17 +16,17 @@
package androidx.camera.extensions.impl;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CaptureResult;
import android.util.Pair;
+import android.annotation.NonNull;
+
import java.util.List;
/**
* Allows clients to receive information about the capture result values of processed frames.
*
*/
-@SuppressLint("UnknownNullness")
public interface ProcessResultImpl {
/**
* Capture result callback that needs to be called when the process capture results are
@@ -41,7 +41,8 @@
* supported and applied by the corresponding framework.
* @since 1.3
*/
- void onCaptureCompleted(long shutterTimestamp, List<Pair<CaptureResult.Key, Object>> result);
+ void onCaptureCompleted(long shutterTimestamp,
+ @NonNull List<Pair<CaptureResult.Key, Object>> result);
/**
* Capture progress callback that needs to be called when the process capture is
@@ -56,5 +57,5 @@
* @param progress Value between 0 and 100.
* @since 1.4
*/
- void onCaptureProcessProgressed(int progress);
+ default void onCaptureProcessProgressed(int progress) {}
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java
index 6be328b..45c8c13 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/ProcessorImpl.java
@@ -19,6 +19,8 @@
import android.util.Size;
import android.view.Surface;
+import android.annotation.NonNull;
+
/**
* Processes an input image stream and produces an output image stream.
*
@@ -31,23 +33,23 @@
* @param surface The {@link Surface} that the ProcessorImpl should write data into.
* @param imageFormat The format of that the surface expects.
*/
- void onOutputSurface(Surface surface, int imageFormat);
+ void onOutputSurface(@NonNull Surface surface, int imageFormat);
/**
* Invoked when CameraX changes the configured output resolution.
*
- * <p>After this call, {@link CaptureProcessorImpl} should expect any {@link Image} received as
- * input to be at the specified resolution.
+ * <p>After this call, {@link CaptureProcessorImpl} should expect any
+ * {@link android.media.Image} received as input to be at the specified resolution.
*
* @param size for the surface.
*/
- void onResolutionUpdate(Size size);
+ void onResolutionUpdate(@NonNull Size size);
/**
* Invoked when CameraX changes the configured input image format.
*
- * <p>After this call, {@link CaptureProcessorImpl} should expect any {@link Image} received as
- * input to have the specified image format.
+ * <p>After this call, {@link CaptureProcessorImpl} should expect any
+ * {@link android.media.Image} received as input to have the specified image format.
*
* @param imageFormat for the surface.
*/
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java
index 14637d7..a5bb70d 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/RequestUpdateProcessorImpl.java
@@ -18,6 +18,8 @@
import android.hardware.camera2.TotalCaptureResult;
+import android.annotation.Nullable;
+
/**
* Processes a {@link TotalCaptureResult} to update a CaptureStage.
*
@@ -32,5 +34,6 @@
* @return The updated parameters used for the repeating requests. If this is {@code null} then
* the previous parameters will be used.
*/
- CaptureStageImpl process(TotalCaptureResult result);
+ @Nullable
+ CaptureStageImpl process(@Nullable TotalCaptureResult result);
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AdvancedExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AdvancedExtenderImpl.java
index 4386b5e..282a47f 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AdvancedExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AdvancedExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -24,6 +23,8 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import androidx.camera.extensions.impl.ExtensionVersionImpl;
import java.util.List;
@@ -51,7 +52,6 @@
*
* @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface AdvancedExtenderImpl {
/**
@@ -65,8 +65,8 @@
* physical camera ids and their CameraCharacteristics.
* @return true if the extension is supported, otherwise false
*/
- boolean isExtensionAvailable(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap);
+ boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap);
/**
* Initializes the extender to be used with the specified camera.
@@ -81,7 +81,8 @@
* If the camera is logical camera, it will also contain associated
* physical camera ids and their CameraCharacteristics.
*/
- void init(String cameraId, Map<String, CameraCharacteristics> characteristicsMap);
+ void init(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap);
/**
* Returns the estimated capture latency range in milliseconds for the
@@ -98,8 +99,9 @@
* @return the range of estimated minimal and maximal capture latency in milliseconds.
* Returns null if no capture latency info can be provided.
*/
- Range<Long> getEstimatedCaptureLatencyRange(String cameraId,
- Size captureOutputSize, int imageFormat);
+ @Nullable
+ Range<Long> getEstimatedCaptureLatencyRange(@NonNull String cameraId,
+ @Nullable Size captureOutputSize, int imageFormat);
/**
* Returns supported output format/size map for preview. The format could be PRIVATE or
@@ -112,7 +114,8 @@
* the HAL. Alternatively OEM can configure a intermediate YUV surface of the same size and
* writes the output to the preview output surface.
*/
- Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(String cameraId);
+ @NonNull
+ Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(@NonNull String cameraId);
/**
* Returns supported output format/size map for image capture. OEM is required to support
@@ -122,18 +125,21 @@
* format/size could be either added in CameraCaptureSession with HAL processing OR it
* configures intermediate surfaces(YUV/RAW..) and writes the output to the output surface.
*/
- Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(String cameraId);
+ @NonNull
+ Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(@NonNull String cameraId);
/**
* Returns supported output format/size map for postview image. OEM is required to support
* both JPEG and YUV_420_888 format output.
*
- * <p>The surface created with this supported format/size could configure
- * intermediate surfaces(YUV/RAW..) and write the output to the output surface.</p>
+ * <p>The returned sizes must be smaller than or equal to the provided capture size and have the
+ * same aspect ratio as the given capture size. If no supported resolution exists for the
+ * provided capture size then an empty map is returned.
*
* @since 1.4
*/
- Map<Integer, List<Size>> getSupportedPostviewResolutions(Size captureSize);
+ @NonNull
+ Map<Integer, List<Size>> getSupportedPostviewResolutions(@NonNull Size captureSize);
/**
* Returns supported output sizes for Image Analysis (YUV_420_888 format).
@@ -142,12 +148,14 @@
* output surfaces. If imageAnalysis YUV surface is not supported, OEM should return null or
* empty list.
*/
- List<Size> getSupportedYuvAnalysisResolutions(String cameraId);
+ @Nullable
+ List<Size> getSupportedYuvAnalysisResolutions(@NonNull String cameraId);
/**
* Returns a processor for activating extension sessions. It implements all the interactions
* required for starting a extension and cleanup.
*/
+ @NonNull
SessionProcessorImpl createSessionProcessor();
/**
@@ -181,6 +189,7 @@
* are not supported.
* @since 1.3
*/
+ @NonNull
List<CaptureRequest.Key> getAvailableCaptureRequestKeys();
/**
@@ -196,6 +205,7 @@
* an empty list if capture results are not supported.
* @since 1.3
*/
+ @NonNull
List<CaptureResult.Key> getAvailableCaptureResultKeys();
/**
@@ -205,7 +215,7 @@
* be triggered, {@code false} otherwise.
* @since 1.4
*/
- public boolean isCaptureProcessProgressAvailable();
+ boolean isCaptureProcessProgressAvailable();
/**
* Indicates whether the extension supports the postview for still capture feature.
@@ -234,7 +244,11 @@
* {@link CameraCharacteristics#CONTROL_VIDEO_STABILIZATION_MODE_OFF} for the key
* {@link CameraCharacteristics#CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES}.
*
- * <p> Currently, the only synthetic keys supported for override are
+ * <p>Please note that it is mandatory to include
+ * {@link CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE} and
+ * {@link CameraCharacteristics#CONTROL_AF_AVAILABLE_MODES} in the list.
+ *
+ * <p>Currently, the only synthetic keys supported for override are
* {@link CameraCharacteristics#REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES} and
* {@link CameraCharacteristics#REQUEST_AVAILABLE_COLOR_SPACE_PROFILES}. To enable them, an OEM
* should override the respective native keys
@@ -242,5 +256,6 @@
* {@link CameraCharacteristics#REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP}.
* @since 1.5
*/
+ @NonNull
List<Pair<CameraCharacteristics.Key, Object>> getAvailableCharacteristicsKeyValues();
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AutoAdvancedExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AutoAdvancedExtenderImpl.java
index 45e4fcc..efc58bd 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AutoAdvancedExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/AutoAdvancedExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -24,6 +23,9 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.List;
import java.util.Map;
@@ -34,64 +36,71 @@
*
* @since 1.2
*/
-@SuppressLint("UnknownNullness")
public class AutoAdvancedExtenderImpl implements AdvancedExtenderImpl {
public AutoAdvancedExtenderImpl() {
}
@Override
- public boolean isExtensionAvailable(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void init(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public void init(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public Range<Long> getEstimatedCaptureLatencyRange(
- String cameraId, Size size, int imageFormat) {
+ @NonNull String cameraId, @Nullable Size size, int imageFormat) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPostviewResolutions(
- Size captureSize) {
+ @NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public List<Size> getSupportedYuvAnalysisResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public SessionProcessorImpl createSessionProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -106,6 +115,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<Pair<CameraCharacteristics.Key, Object>> getAvailableCharacteristicsKeyValues() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BeautyAdvancedExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BeautyAdvancedExtenderImpl.java
index 8bb17f7..10a3440 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BeautyAdvancedExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BeautyAdvancedExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -24,6 +23,9 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.List;
import java.util.Map;
@@ -34,64 +36,71 @@
*
* @since 1.2
*/
-@SuppressLint("UnknownNullness")
public class BeautyAdvancedExtenderImpl implements AdvancedExtenderImpl {
public BeautyAdvancedExtenderImpl() {
}
@Override
- public boolean isExtensionAvailable(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void init(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public void init(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public Range<Long> getEstimatedCaptureLatencyRange(
- String cameraId, Size size, int imageFormat) {
+ @NonNull String cameraId, @Nullable Size size, int imageFormat) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPostviewResolutions(
- Size captureSize) {
+ @NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public List<Size> getSupportedYuvAnalysisResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public SessionProcessorImpl createSessionProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -106,6 +115,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<Pair<CameraCharacteristics.Key, Object>> getAvailableCharacteristicsKeyValues() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BokehAdvancedExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BokehAdvancedExtenderImpl.java
index 71b38d6..c1d8852 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BokehAdvancedExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/BokehAdvancedExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -24,6 +23,9 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.List;
import java.util.Map;
@@ -34,69 +36,76 @@
*
* @since 1.2
*/
-@SuppressLint("UnknownNullness")
public class BokehAdvancedExtenderImpl implements AdvancedExtenderImpl {
public BokehAdvancedExtenderImpl() {
}
@Override
- public boolean isExtensionAvailable(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void init(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public void init(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public Range<Long> getEstimatedCaptureLatencyRange(
- String cameraId, Size size, int imageFormat) {
+ @NonNull String cameraId, @Nullable Size size, int imageFormat) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPostviewResolutions(
- Size captureSize) {
+ @NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public List<Size> getSupportedYuvAnalysisResolutions(
- String cameraId) {
+ @Nullable
+ public List<Size> getSupportedYuvAnalysisResolutions(@NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public SessionProcessorImpl createSessionProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public boolean isCaptureProcessProgressAvailable() {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -106,6 +115,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<Pair<CameraCharacteristics.Key, Object>> getAvailableCharacteristicsKeyValues() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImpl.java
index fe0cddf..942f6f6 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImpl.java
@@ -16,16 +16,18 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.params.DynamicRangeProfiles;
+import android.annotation.Nullable;
+
import java.util.List;
/**
* A config representing a {@link android.hardware.camera2.params.OutputConfiguration} where
* Surface will be created by the information in this config.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface Camera2OutputConfigImpl {
/**
* Gets thd id of this output config. The id can be used to identify the stream in vendor
@@ -42,6 +44,7 @@
/**
* Gets the physical camera id. Returns null if not specified.
*/
+ @Nullable
String getPhysicalCameraId();
/**
@@ -57,5 +60,6 @@
* If non-null, enable surface sharing and add the surface constructed by the return
* Camera2OutputConfig.
*/
+ @Nullable
List<Camera2OutputConfigImpl> getSurfaceSharingOutputConfigs();
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
index 541ade6..343e998 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2OutputConfigImplBuilder.java
@@ -16,12 +16,14 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.params.DynamicRangeProfiles;
import android.hardware.camera2.params.OutputConfiguration;
import android.util.Size;
import android.view.Surface;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -29,16 +31,15 @@
/**
* A builder implementation to help OEM build the {@link Camera2OutputConfigImpl} instance.
*/
-@SuppressLint("UnknownNullness")
public class Camera2OutputConfigImplBuilder {
static AtomicInteger sLastId = new AtomicInteger(0);
private OutputConfigImplImpl mOutputConfig;
private int mSurfaceGroupId = OutputConfiguration.SURFACE_GROUP_ID_NONE;
+ private int mOutputConfigId = -1;
private String mPhysicalCameraId;
private List<Camera2OutputConfigImpl> mSurfaceSharingConfigs;
private long mDynamicRangeProfile = DynamicRangeProfiles.STANDARD;
-
- private Camera2OutputConfigImplBuilder(OutputConfigImplImpl outputConfig) {
+ private Camera2OutputConfigImplBuilder(@NonNull OutputConfigImplImpl outputConfig) {
mOutputConfig = outputConfig;
}
@@ -50,8 +51,21 @@
* Creates a {@link Camera2OutputConfigImpl} that represents a {@link android.media.ImageReader}
* with the given parameters.
*/
+ @NonNull
public static Camera2OutputConfigImplBuilder newImageReaderConfig(
- Size size, int imageFormat, int maxImages, long usage) {
+ @NonNull Size size, int imageFormat, int maxImages) {
+ return new Camera2OutputConfigImplBuilder(
+ new ImageReaderOutputConfigImplImpl(size, imageFormat, maxImages));
+ }
+
+
+ /**
+ * Creates a {@link Camera2OutputConfigImpl} that represents a {@link android.media.ImageReader}
+ * with the given parameters.
+ */
+ @NonNull
+ public static Camera2OutputConfigImplBuilder newImageReaderConfig(
+ @NonNull Size size, int imageFormat, int maxImages, long usage) {
return new Camera2OutputConfigImplBuilder(
new ImageReaderOutputConfigImplImpl(size, imageFormat, maxImages, usage));
}
@@ -60,6 +74,7 @@
* Creates a {@link Camera2OutputConfigImpl} that represents a MultiResolutionImageReader with
* the given parameters.
*/
+ @NonNull
public static Camera2OutputConfigImplBuilder newMultiResolutionImageReaderConfig(
int imageFormat, int maxImages) {
return new Camera2OutputConfigImplBuilder(
@@ -69,15 +84,17 @@
/**
* Creates a {@link Camera2OutputConfigImpl} that contains the Surface directly.
*/
- public static Camera2OutputConfigImplBuilder newSurfaceConfig(Surface surface) {
+ @NonNull
+ public static Camera2OutputConfigImplBuilder newSurfaceConfig(@NonNull Surface surface) {
return new Camera2OutputConfigImplBuilder(new SurfaceOutputConfigImplImpl(surface));
}
/**
* Adds a {@link Camera2SessionConfigImpl} to be shared with current config.
*/
+ @NonNull
public Camera2OutputConfigImplBuilder addSurfaceSharingOutputConfig(
- Camera2OutputConfigImpl camera2OutputConfig) {
+ @NonNull Camera2OutputConfigImpl camera2OutputConfig) {
if (mSurfaceSharingConfigs == null) {
mSurfaceSharingConfigs = new ArrayList<>();
}
@@ -89,32 +106,50 @@
/**
* Sets a physical camera id.
*/
- public Camera2OutputConfigImplBuilder setPhysicalCameraId(String physicalCameraId) {
+ @NonNull
+ public Camera2OutputConfigImplBuilder setPhysicalCameraId(@Nullable String physicalCameraId) {
mPhysicalCameraId = physicalCameraId;
return this;
}
/**
- * Set dynamic range profile.
- */
- public Camera2OutputConfigImplBuilder setDynamicRangeProfile(long dynamicRangeProfile) {
- mDynamicRangeProfile = dynamicRangeProfile;
- return this;
- }
-
- /**
* Sets surface group id.
*/
+ @NonNull
public Camera2OutputConfigImplBuilder setSurfaceGroupId(int surfaceGroupId) {
mSurfaceGroupId = surfaceGroupId;
return this;
}
/**
+ * Sets Output Config id (Optional: Atomic Integer will be used if this function is not called)
+ */
+ @NonNull
+ public Camera2OutputConfigImplBuilder setOutputConfigId(int outputConfigId) {
+ mOutputConfigId = outputConfigId;
+ return this;
+ }
+
+ /**
+ * Set dynamic range profile.
+ */
+ @NonNull
+ public Camera2OutputConfigImplBuilder setDynamicRangeProfile(long dynamicRangeProfile) {
+ mDynamicRangeProfile = dynamicRangeProfile;
+ return this;
+ }
+
+ /**
* Build a {@link Camera2OutputConfigImpl} instance.
*/
+ @NonNull
public Camera2OutputConfigImpl build() {
- mOutputConfig.setId(getNextId());
+ // Sets an output config id otherwise an output config id will be generated
+ if (mOutputConfigId == -1) {
+ mOutputConfig.setId(getNextId());
+ } else {
+ mOutputConfig.setId(mOutputConfigId);
+ }
mOutputConfig.setPhysicalCameraId(mPhysicalCameraId);
mOutputConfig.setSurfaceGroup(mSurfaceGroupId);
mOutputConfig.setSurfaceSharingConfigs(mSurfaceSharingConfigs);
@@ -148,6 +183,7 @@
}
@Override
+ @Nullable
public String getPhysicalCameraId() {
return mPhysicalCameraId;
}
@@ -158,6 +194,7 @@
}
@Override
+ @Nullable
public List<Camera2OutputConfigImpl> getSurfaceSharingOutputConfigs() {
return mSurfaceSharingConfigs;
}
@@ -170,7 +207,7 @@
mSurfaceGroup = surfaceGroup;
}
- public void setPhysicalCameraId(String physicalCameraId) {
+ public void setPhysicalCameraId(@Nullable String physicalCameraId) {
mPhysicalCameraId = physicalCameraId;
}
@@ -179,20 +216,24 @@
}
public void setSurfaceSharingConfigs(
- List<Camera2OutputConfigImpl> surfaceSharingConfigs) {
+ @Nullable List<Camera2OutputConfigImpl> surfaceSharingConfigs) {
+ if (surfaceSharingConfigs != null) {
+ surfaceSharingConfigs = new ArrayList<>(surfaceSharingConfigs);
+ }
mSurfaceSharingConfigs = surfaceSharingConfigs;
}
}
private static class SurfaceOutputConfigImplImpl extends OutputConfigImplImpl
implements SurfaceOutputConfigImpl {
- private Surface mSurface;
+ private final Surface mSurface;
- SurfaceOutputConfigImplImpl(Surface surface) {
+ SurfaceOutputConfigImplImpl(@NonNull Surface surface) {
mSurface = surface;
}
@Override
+ @NonNull
public Surface getSurface() {
return mSurface;
}
@@ -200,12 +241,17 @@
private static class ImageReaderOutputConfigImplImpl extends OutputConfigImplImpl
implements ImageReaderOutputConfigImpl {
- private Size mSize;
- private int mImageFormat;
- private int mMaxImages;
- private long mUsage;
+ private static final long USAGE_UNSPECIFIED = -1;
+ private final Size mSize;
+ private final int mImageFormat;
+ private final int mMaxImages;
+ private final long mUsage;
- ImageReaderOutputConfigImplImpl(Size size, int imageFormat, int maxImages,
+ ImageReaderOutputConfigImplImpl(@NonNull Size size, int imageFormat, int maxImages) {
+ this(size, imageFormat, maxImages, USAGE_UNSPECIFIED);
+ }
+
+ ImageReaderOutputConfigImplImpl(@NonNull Size size, int imageFormat, int maxImages,
long usage) {
mSize = size;
mImageFormat = imageFormat;
@@ -214,6 +260,7 @@
}
@Override
+ @NonNull
public Size getSize() {
return mSize;
}
@@ -230,14 +277,17 @@
@Override
public long getUsage() {
+ if (mUsage == USAGE_UNSPECIFIED) {
+ return ImageReaderOutputConfigImpl.super.getUsage();
+ }
return mUsage;
}
}
private static class MultiResolutionImageReaderOutputConfigImplImpl extends OutputConfigImplImpl
implements MultiResolutionImageReaderOutputConfigImpl {
- private int mImageFormat;
- private int mMaxImages;
+ private final int mImageFormat;
+ private final int mMaxImages;
MultiResolutionImageReaderOutputConfigImplImpl(int imageFormat, int maxImages) {
mImageFormat = imageFormat;
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImpl.java
index 5d4444f..474bb29 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImpl.java
@@ -16,27 +16,32 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.ColorSpaceProfiles;
+import android.hardware.camera2.params.SessionConfiguration;
+
+import android.annotation.NonNull;
import java.util.List;
import java.util.Map;
/**
* A config representing a {@link android.hardware.camera2.params.SessionConfiguration}
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface Camera2SessionConfigImpl {
/**
* Returns all the {@link Camera2OutputConfigImpl}s that will be used to create
* {@link android.hardware.camera2.params.OutputConfiguration}.
*/
+ @NonNull
List<Camera2OutputConfigImpl> getOutputConfigs();
/**
* Gets all the parameters to create the session parameters with.
*/
+ @NonNull
Map<CaptureRequest.Key<?>, Object> getSessionParameters();
/**
@@ -50,18 +55,21 @@
* Retrieves the session type to be used when initializing the
* {@link android.hardware.camera2.CameraCaptureSession}.
*
- * @since 1.4
* @return Camera capture session type. Regular and vendor specific types are supported but
* not high speed values. The extension can return -1 in which case the camera capture session
* will be configured to use the default regular type.
+ *
+ * @since 1.4
*/
- int getSessionType();
+ default int getSessionType() {
+ return SessionConfiguration.SESSION_REGULAR;
+ }
/**
* Gets the color space.
*
* @since 1.5
- * @return {@link android.graphics#ColorSpace.Named} set for session configuration
+ * @return {@link android.graphics.ColorSpace.Named} set for session configuration
*/
default int getColorSpace() {
return ColorSpaceProfiles.UNSPECIFIED;
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
index e745624..9fa97bf 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/Camera2SessionConfigImplBuilder.java
@@ -16,13 +16,13 @@
package androidx.camera.extensions.impl.advanced;
-
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.ColorSpaceProfiles;
import android.hardware.camera2.params.SessionConfiguration;
+import android.annotation.NonNull;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -31,7 +31,6 @@
/**
* A builder implementation to help OEM build the {@link Camera2SessionConfigImpl} instance.
*/
-@SuppressLint("UnknownNullness")
public class Camera2SessionConfigImplBuilder {
private int mSessionTemplateId = CameraDevice.TEMPLATE_PREVIEW;
private int mColorSpace = ColorSpaceProfiles.UNSPECIFIED;
@@ -45,8 +44,9 @@
/**
* Adds a output config.
*/
+ @NonNull
public Camera2SessionConfigImplBuilder addOutputConfig(
- Camera2OutputConfigImpl outputConfig) {
+ @NonNull Camera2OutputConfigImpl outputConfig) {
mCamera2OutputConfigs.add(outputConfig);
return this;
}
@@ -54,8 +54,9 @@
/**
* Sets session parameters.
*/
+ @NonNull
public <T> Camera2SessionConfigImplBuilder addSessionParameter(
- CaptureRequest.Key<T> key, T value) {
+ @NonNull CaptureRequest.Key<T> key, @NonNull T value) {
mSessionParameters.put(key, value);
return this;
}
@@ -63,14 +64,25 @@
/**
* Sets the template id for session parameters request.
*/
+ @NonNull
public Camera2SessionConfigImplBuilder setSessionTemplateId(int templateId) {
mSessionTemplateId = templateId;
return this;
}
/**
+ * Sets the session type for the session.
+ */
+ @NonNull
+ public Camera2SessionConfigImplBuilder setSessionType(int sessionType) {
+ mSessionType = sessionType;
+ return this;
+ }
+
+ /**
* Sets the color space.
*/
+ @NonNull
public Camera2SessionConfigImplBuilder setColorSpace(int colorSpace) {
mColorSpace = colorSpace;
return this;
@@ -93,6 +105,7 @@
/**
* Gets the session parameters.
*/
+ @NonNull
public Map<CaptureRequest.Key<?>, Object> getSessionParameters() {
return mSessionParameters;
}
@@ -100,6 +113,7 @@
/**
* Gets all the output configs.
*/
+ @NonNull
public List<Camera2OutputConfigImpl> getCamera2OutputConfigs() {
return mCamera2OutputConfigs;
}
@@ -114,32 +128,35 @@
/**
* Builds a {@link Camera2SessionConfigImpl} instance.
*/
+ @NonNull
public Camera2SessionConfigImpl build() {
return new Camera2SessionConfigImplImpl(this);
}
private static class Camera2SessionConfigImplImpl implements
Camera2SessionConfigImpl {
- int mSessionTemplateId;
- int mSessionType;
- int mColorSpace = ColorSpaceProfiles.UNSPECIFIED;
- Map<CaptureRequest.Key<?>, Object> mSessionParameters;
- List<Camera2OutputConfigImpl> mCamera2OutputConfigs;
+ private final int mSessionTemplateId;
+ private final int mSessionType;
+ private final int mColorSpace;
+ private final Map<CaptureRequest.Key<?>, Object> mSessionParameters;
+ private final List<Camera2OutputConfigImpl> mCamera2OutputConfigs;
- Camera2SessionConfigImplImpl(Camera2SessionConfigImplBuilder builder) {
+ Camera2SessionConfigImplImpl(@NonNull Camera2SessionConfigImplBuilder builder) {
mSessionTemplateId = builder.getSessionTemplateId();
- mSessionParameters = builder.getSessionParameters();
+ mSessionParameters = new HashMap<>(builder.getSessionParameters());
mColorSpace = builder.getColorSpace();
- mCamera2OutputConfigs = builder.getCamera2OutputConfigs();
+ mCamera2OutputConfigs = new ArrayList<>(builder.getCamera2OutputConfigs());
mSessionType = builder.getSessionType();
}
@Override
+ @NonNull
public List<Camera2OutputConfigImpl> getOutputConfigs() {
return mCamera2OutputConfigs;
}
@Override
+ @NonNull
public Map<CaptureRequest.Key<?>, Object> getSessionParameters() {
return mSessionParameters;
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/HdrAdvancedExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/HdrAdvancedExtenderImpl.java
index 7d87cc6..105f3a8 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/HdrAdvancedExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/HdrAdvancedExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -24,6 +23,9 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.List;
import java.util.Map;
@@ -34,65 +36,71 @@
*
* @since 1.2
*/
-@SuppressLint("UnknownNullness")
public class HdrAdvancedExtenderImpl implements AdvancedExtenderImpl {
public HdrAdvancedExtenderImpl() {
}
@Override
- public boolean isExtensionAvailable(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void init(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public void init(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public Range<Long> getEstimatedCaptureLatencyRange(
- String cameraId, Size size, int imageFormat) {
+ @NonNull String cameraId, @Nullable Size size, int imageFormat) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPostviewResolutions(
- Size captureSize) {
+ @NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public List<Size> getSupportedYuvAnalysisResolutions(
- String cameraId) {
+ @Nullable
+ public List<Size> getSupportedYuvAnalysisResolutions(@NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public SessionProcessorImpl createSessionProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -107,6 +115,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<Pair<CameraCharacteristics.Key, Object>> getAvailableCharacteristicsKeyValues() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageProcessorImpl.java
index 037e947..6982512 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageProcessorImpl.java
@@ -16,14 +16,16 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
/**
* A interface to receive and process the upcoming next available Image.
*
* <p>Implemented by OEM.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface ImageProcessorImpl {
/**
* The reference count will not be decremented when this method returns. Extensions must
@@ -47,7 +49,7 @@
void onNextImageAvailable(
int outputConfigId,
long timestampNs,
- ImageReferenceImpl imageReference,
- String physicalCameraId
- );
+ @NonNull ImageReferenceImpl imageReference,
+ @Nullable String physicalCameraId
+ );
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReaderOutputConfigImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReaderOutputConfigImpl.java
index 7c3b48e..495de98 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReaderOutputConfigImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReaderOutputConfigImpl.java
@@ -16,17 +16,22 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
+import android.graphics.ImageFormat;
+import android.hardware.HardwareBuffer;
import android.util.Size;
+import android.annotation.NonNull;
+
/**
* Surface will be created by constructing a ImageReader.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface ImageReaderOutputConfigImpl extends Camera2OutputConfigImpl {
/**
* Returns the size of the surface.
*/
+ @NonNull
Size getSize();
/**
@@ -41,6 +46,11 @@
/**
* Gets the surface usage bits.
+ * @since 1.5
*/
- long getUsage();
+ default long getUsage() {
+ // Return the same default usage as in
+ // ImageReader.newInstance(width, height, format, maxImages)
+ return getImageFormat() == ImageFormat.PRIVATE ? 0 : HardwareBuffer.USAGE_CPU_READ_OFTEN;
+ }
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReferenceImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReferenceImpl.java
index 95f2c3b..f2ac413 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReferenceImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/ImageReferenceImpl.java
@@ -16,17 +16,19 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.media.Image;
+import android.annotation.Nullable;
+
/**
* A Image reference container that enables the Image sharing between Camera2/CameraX and OEM
* using reference counting. The wrapped Image will be closed once the reference count
* reaches 0.
*
* <p>Implemented by Camera2/CameraX.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface ImageReferenceImpl {
/**
@@ -46,5 +48,6 @@
* Return the Android image. This object MUST not be closed directly.
* Returns null when the reference count is zero.
*/
+ @Nullable
Image get();
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/MultiResolutionImageReaderOutputConfigImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/MultiResolutionImageReaderOutputConfigImpl.java
index c3ad61b..ccc229d 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/MultiResolutionImageReaderOutputConfigImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/MultiResolutionImageReaderOutputConfigImpl.java
@@ -18,6 +18,8 @@
/**
* Surface will be created by constructing a MultiResolutionImageReader.
+ *
+ * @since 1.2
*/
public interface MultiResolutionImageReaderOutputConfigImpl extends Camera2OutputConfigImpl {
/**
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java
index 961d669..769f83b 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java
@@ -16,7 +16,6 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
@@ -24,6 +23,9 @@
import android.util.Range;
import android.util.Size;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.List;
import java.util.Map;
@@ -34,64 +36,71 @@
*
* @since 1.2
*/
-@SuppressLint("UnknownNullness")
public class NightAdvancedExtenderImpl implements AdvancedExtenderImpl {
public NightAdvancedExtenderImpl() {
}
@Override
- public boolean isExtensionAvailable(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public boolean isExtensionAvailable(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
- public void init(String cameraId,
- Map<String, CameraCharacteristics> characteristicsMap) {
+ public void init(@NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> characteristicsMap) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public Range<Long> getEstimatedCaptureLatencyRange(
- String cameraId, Size size, int imageFormat) {
+ @NonNull String cameraId, @Nullable Size size, int imageFormat) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public Map<Integer, List<Size>> getSupportedPostviewResolutions(
- Size captureSize) {
+ @NonNull Size captureSize) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @Nullable
public List<Size> getSupportedYuvAnalysisResolutions(
- String cameraId) {
+ @NonNull String cameraId) {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public SessionProcessorImpl createSessionProcessor() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@Override
+ @NonNull
public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
throw new RuntimeException("Stub, replace with implementation.");
}
@@ -106,6 +115,7 @@
throw new RuntimeException("Stub, replace with implementation.");
}
+ @NonNull
@Override
public List<Pair<CameraCharacteristics.Key, Object>> getAvailableCharacteristicsKeyValues() {
throw new RuntimeException("Stub, replace with implementation.");
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceConfigurationImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceConfigurationImpl.java
index 217887b..5b1eb4c 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceConfigurationImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceConfigurationImpl.java
@@ -16,25 +16,45 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.params.ColorSpaceProfiles;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
/**
* For specifying the output surface configurations for the extension.
*
* @since 1.4
*/
-@SuppressLint("UnknownNullness")
public interface OutputSurfaceConfigurationImpl {
- public OutputSurfaceImpl getPreviewOutputSurface();
+ /**
+ * gets the preview {@link OutputSurfaceImpl}, which may contain a <code>null</code> surface
+ * if the app doesn't specify the preview output surface.
+ */
+ @NonNull
+ OutputSurfaceImpl getPreviewOutputSurface();
- public OutputSurfaceImpl getImageCaptureOutputSurface();
+ /**
+ * gets the still capture {@link OutputSurfaceImpl} which may contain a <code>null</code>
+ * surface if the app doesn't specify the still capture output surface.
+ */
+ @NonNull
+ OutputSurfaceImpl getImageCaptureOutputSurface();
- public OutputSurfaceImpl getImageAnalysisOutputSurface();
+ /**
+ * gets the image analysis {@link OutputSurfaceImpl}.
+ */
+ @Nullable
+ OutputSurfaceImpl getImageAnalysisOutputSurface();
- public OutputSurfaceImpl getPostviewOutputSurface();
+ /**
+ * gets the postview {@link OutputSurfaceImpl} which may contain a <code>null</code> surface
+ * if the app doesn't specify the postview output surface.
+ */
+ @Nullable
+ OutputSurfaceImpl getPostviewOutputSurface();
- /*
+ /**
* Gets the color space.
*
* @since 1.5
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceImpl.java
index 72bc4ab..fec31ee 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/OutputSurfaceImpl.java
@@ -16,24 +16,46 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.params.DynamicRangeProfiles;
import android.util.Size;
import android.view.Surface;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
/**
* For specifying output surface of the extension.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface OutputSurfaceImpl {
/**
- * Gets the surface.
+ * This indicates the usage is not specified which could happen in the apps that use older
+ * version of CameraX extensions where getUsage() was not added yet.
+ *
+ * <p>We can't use 0 as 0 means GRALLOC_USAGE_SW_READ_NEVER.
*/
+ long USAGE_UNSPECIFIED = -1;
+
+
+ /**
+ * This indicates the dataSpace is not specified which could happen in the apps that use older
+ * version of CameraX extensions where getDataspace() was not added yet.
+ *
+ */
+ int DATASPACE_UNSPECIFIED = -1;
+
+ /**
+ * Gets the surface. It returns null if output surface is not specified.
+ */
+ @Nullable
Surface getSurface();
+
/**
* Gets the size.
*/
+ @NonNull
Size getSize();
/**
@@ -42,14 +64,22 @@
int getImageFormat();
/**
- * Gets the dataspace.
+ * Gets the dataspace. It returns {#link #DATASPACE_UNSPECIFIED} if not specified.
+ *
+ * @since 1.5
*/
- int getDataspace();
+ default int getDataspace() {
+ return DATASPACE_UNSPECIFIED;
+ }
/**
- * Gets the surface usage bits.
- */
- long getUsage();
+ * Gets the surface usage bits. It returns {@link #USAGE_UNSPECIFIED} if not specified.
+ *
+ * @since 1.5
+ */
+ default long getUsage() {
+ return USAGE_UNSPECIFIED;
+ }
/**
* Gets the dynamic range profile.
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/RequestProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/RequestProcessorImpl.java
index 5185333..79a65e7 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/RequestProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/RequestProcessorImpl.java
@@ -16,45 +16,47 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
import android.hardware.camera2.TotalCaptureResult;
+import android.annotation.NonNull;
+
import java.util.List;
import java.util.Map;
/**
* An Interface to execute Camera2 capture requests.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface RequestProcessorImpl {
/**
* Sets a {@link ImageProcessorImpl} to receive {@link ImageReferenceImpl} to process.
*/
- void setImageProcessor(int outputconfigId, ImageProcessorImpl imageProcessor);
+ void setImageProcessor(int outputconfigId, @NonNull ImageProcessorImpl imageProcessor);
/**
* Submits a request.
* @return the id of the capture sequence or -1 in case the processor encounters a fatal error
* or receives an invalid argument.
*/
- int submit(Request request, Callback callback);
+ int submit(@NonNull Request request, @NonNull Callback callback);
/**
* Submits a list of requests.
* @return the id of the capture sequence or -1 in case the processor encounters a fatal error
* or receives an invalid argument.
*/
- int submit(List<Request> requests, Callback callback);
+ int submit(@NonNull List<Request> requests, @NonNull Callback callback);
/**
* Set repeating requests.
* @return the id of the capture sequence or -1 in case the processor encounters a fatal error
* or receives an invalid argument.
*/
- int setRepeating(Request request, Callback callback);
+ int setRepeating(@NonNull Request request, @NonNull Callback callback);
/**
@@ -76,16 +78,19 @@
* Gets the target ids of {@link Camera2OutputConfigImpl} which identifies corresponding
* Surface to be the targeted for the request.
*/
+ @NonNull
List<Integer> getTargetOutputConfigIds();
/**
* Gets all the parameters.
*/
+ @NonNull
Map<CaptureRequest.Key<?>, Object> getParameters();
/**
* Gets the template id.
*/
+ @NonNull
Integer getTemplateId();
}
@@ -94,24 +99,24 @@
*/
interface Callback {
void onCaptureStarted(
- Request request,
+ @NonNull Request request,
long frameNumber,
long timestamp);
void onCaptureProgressed(
- Request request,
- CaptureResult partialResult);
+ @NonNull Request request,
+ @NonNull CaptureResult partialResult);
void onCaptureCompleted(
- Request request,
- TotalCaptureResult totalCaptureResult);
+ @NonNull Request request,
+ @NonNull TotalCaptureResult totalCaptureResult);
void onCaptureFailed(
- Request request,
- CaptureFailure captureFailure);
+ @NonNull Request request,
+ @NonNull CaptureFailure captureFailure);
void onCaptureBufferLost(
- Request request,
+ @NonNull Request request,
long frameNumber,
int outputStreamId);
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SessionProcessorImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SessionProcessorImpl.java
index 57fffd0..351022f 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SessionProcessorImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SessionProcessorImpl.java
@@ -16,15 +16,16 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.camera2.CameraCharacteristics;
-import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.CaptureResult;
import android.util.Pair;
import android.view.Surface;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
import java.util.Map;
/**
@@ -58,8 +59,9 @@
*
* (6) {@link #deInitSession}: called when CameraCaptureSession is closed.
* </pre>
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface SessionProcessorImpl {
/**
* Initializes the session for the extension. This is where the OEMs allocate resources for
@@ -105,11 +107,12 @@
*
* @since 1.4
*/
+ @NonNull
Camera2SessionConfigImpl initSession(
- String cameraId,
- Map<String, CameraCharacteristics> cameraCharacteristicsMap,
- Context context,
- OutputSurfaceConfigurationImpl surfaceConfigs);
+ @NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> cameraCharacteristicsMap,
+ @NonNull Context context,
+ @NonNull OutputSurfaceConfigurationImpl surfaceConfigs);
/**
* Initializes the session for the extension. This is where the OEMs allocate resources for
@@ -156,13 +159,14 @@
* supported or mandatory stream combination BUT OEM must ensure this list will always
* produce a valid camera capture session.
*/
+ @NonNull
Camera2SessionConfigImpl initSession(
- String cameraId,
- Map<String, CameraCharacteristics> cameraCharacteristicsMap,
- Context context,
- OutputSurfaceImpl previewSurfaceConfig,
- OutputSurfaceImpl imageCaptureSurfaceConfig,
- OutputSurfaceImpl imageAnalysisSurfaceConfig);
+ @NonNull String cameraId,
+ @NonNull Map<String, CameraCharacteristics> cameraCharacteristicsMap,
+ @NonNull Context context,
+ @NonNull OutputSurfaceImpl previewSurfaceConfig,
+ @NonNull OutputSurfaceImpl imageCaptureSurfaceConfig,
+ @Nullable OutputSurfaceImpl imageAnalysisSurfaceConfig);
/**
* Notify to de-initialize the extension. This callback will be invoked after
@@ -175,15 +179,19 @@
/**
* CameraX / Camera2 would call these API’s to pass parameters from the app to the OEM. It’s
* expected that the OEM would (eventually) update the repeating request if the keys are
- * supported. Setting a value to null explicitly un-sets the value.
+ * supported. These parameters should be set by the OEM on all capture requests sent during
+ * {@link #startRepeating(CaptureCallback)},
+ * {@link #startCapture(CaptureCallback)} and {@link #startTrigger(Map, CaptureCallback)}.
*/
- void setParameters(Map<CaptureRequest.Key<?>, Object> parameters);
+ void setParameters(@NonNull Map<CaptureRequest.Key<?>, Object> parameters);
/**
* CameraX / Camera2 will call this interface in response to client requests involving
* the output preview surface. Typical examples include requests that include AF/AE triggers.
* Extensions can disregard any capture request keys that were not advertised in
- * {@link AdvancedExtenderImpl#getAvailableCaptureRequestKeys}.
+ * {@link AdvancedExtenderImpl#getAvailableCaptureRequestKeys}. In addition to the
+ * Key/value map in the {@code trigger} parameter, the capture request must also
+ * include the parameters set in {@link #setParameters(Map)}.
*
* @param triggers Capture request key value map.
* @param callback a callback to report the status.
@@ -193,7 +201,8 @@
*
* @since 1.3
*/
- int startTrigger(Map<CaptureRequest.Key<?>, Object> triggers, CaptureCallback callback);
+ int startTrigger(@NonNull Map<CaptureRequest.Key<?>, Object> triggers,
+ @NonNull CaptureCallback callback);
/**
* This will be invoked once after the {@link android.hardware.camera2.CameraCaptureSession}
@@ -201,7 +210,7 @@
* requests or set repeating requests. This ExtensionRequestProcessor will be valid to use
* until onCaptureSessionEnd is called.
*/
- void onCaptureSessionStart(RequestProcessorImpl requestProcessor);
+ void onCaptureSessionStart(@NonNull RequestProcessorImpl requestProcessor);
/**
* This will be invoked before the {@link android.hardware.camera2.CameraCaptureSession} is
@@ -213,12 +222,13 @@
/**
* Starts the repeating request after CameraCaptureSession is called. Vendor should start the
* repeating request by {@link RequestProcessorImpl}. Vendor can also update the
- * repeating request when needed later.
+ * repeating request when needed later. The repeating request is expected to contain the
+ * parameters set in {@link #setParameters(Map)}.
*
* @param callback a callback to report the status.
* @return the id of the capture sequence.
*/
- int startRepeating(CaptureCallback callback);
+ int startRepeating(@NonNull CaptureCallback callback);
/**
* Stop the repeating request. To prevent OEM from not calling stopRepeating, CameraX will
@@ -233,7 +243,9 @@
*
* When the capture is completed, {@link CaptureCallback#onCaptureSequenceCompleted}
* is called and {@code OnImageAvailableListener#onImageAvailable}
- * will also be called on the ImageReader that creates the image capture output surface.
+ * will also be called on the ImageReader that creates the image capture output surface. All
+ * the capture requests are expected to contain the parameters set in
+ * {@link #setParameters(Map)}.
*
* <p>Only one capture can perform at a time. Starting a capture when another capture is running
* will cause onCaptureFailed to be called immediately.
@@ -241,7 +253,7 @@
* @param callback a callback to report the status.
* @return the id of the capture sequence.
*/
- int startCapture(CaptureCallback callback);
+ int startCapture(@NonNull CaptureCallback callback);
/**
* Start a multi-frame capture with a postview. {@link #startCapture(CaptureCallback)}
@@ -261,7 +273,7 @@
* @return the id of the capture sequence.
* @since 1.4
*/
- int startCaptureWithPostview(CaptureCallback callback);
+ int startCaptureWithPostview(@NonNull CaptureCallback callback);
/**
* Abort all capture tasks.
@@ -289,6 +301,7 @@
* null pair.
* @since 1.4
*/
+ @Nullable
Pair<Long, Long> getRealtimeCaptureLatency();
/**
@@ -373,9 +386,10 @@
* as part of this callback. Both Camera2 and CameraX guarantee
* that those two settings and results are always supported and
* applied by the corresponding framework.
+ * @since 1.3
*/
- void onCaptureCompleted(long timestamp, int captureSequenceId,
- Map<CaptureResult.Key, Object> result);
+ default void onCaptureCompleted(long timestamp, int captureSequenceId,
+ @NonNull Map<CaptureResult.Key, Object> result) {}
/**
* Capture progress callback that needs to be called when the process capture is
@@ -390,7 +404,7 @@
* @param progress Value between 0 and 100.
* @since 1.4
*/
- void onCaptureProcessProgressed(int progress);
+ default void onCaptureProcessProgressed(int progress) {}
/**
* This method is called instead of
@@ -405,6 +419,6 @@
* @param reason The capture failure reason @see CaptureFailure#FailureReason
* @since 1.5
*/
- void onCaptureFailed(int captureSequenceId, int reason);
+ default void onCaptureFailed(int captureSequenceId, int reason) {}
}
}
diff --git a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SurfaceOutputConfigImpl.java b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SurfaceOutputConfigImpl.java
index 7b8d83c..b4567e7 100644
--- a/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SurfaceOutputConfigImpl.java
+++ b/camera2/extensions/stub/src/main/java/androidx/camera/extensions/impl/advanced/SurfaceOutputConfigImpl.java
@@ -16,16 +16,19 @@
package androidx.camera.extensions.impl.advanced;
-import android.annotation.SuppressLint;
import android.view.Surface;
+import android.annotation.NonNull;
+
/**
* Use Surface directly to create the OutputConfiguration.
+ *
+ * @since 1.2
*/
-@SuppressLint("UnknownNullness")
public interface SurfaceOutputConfigImpl extends Camera2OutputConfigImpl {
/**
* Get the {@link Surface}. It'll return valid surface only when type is TYPE_SURFACE.
*/
+ @NonNull
Surface getSurface();
}