Camera2: replace partial quirks with normal partial result
Change-Id: I56550748478bf0aa1a7bf9a350b4fdc7bbd6af86
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 92046f3..8750194 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -81,6 +81,7 @@
private final String mCameraId;
private final CameraCharacteristics mCharacteristics;
+ private final int mTotalPartialCount;
/**
* A list tracking request and its expected last frame.
@@ -210,7 +211,7 @@
public CameraDeviceImpl(String cameraId, StateListener listener, Handler handler,
CameraCharacteristics characteristics) {
- if (cameraId == null || listener == null || handler == null) {
+ if (cameraId == null || listener == null || handler == null || characteristics == null) {
throw new IllegalArgumentException("Null argument given");
}
mCameraId = cameraId;
@@ -226,6 +227,15 @@
}
TAG = tag;
DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+ Integer partialCount =
+ mCharacteristics.get(CameraCharacteristics.REQUEST_PARTIAL_RESULT_COUNT);
+ if (partialCount == null) {
+ // 1 means partial result is not supported.
+ mTotalPartialCount = 1;
+ } else {
+ mTotalPartialCount = partialCount;
+ }
}
public CameraDeviceCallbacks getCallbacks() {
@@ -1042,11 +1052,11 @@
final CaptureListenerHolder holder =
CameraDeviceImpl.this.mCaptureListenerMap.get(requestId);
- Boolean quirkPartial = result.get(CaptureResult.QUIRKS_PARTIAL_RESULT);
- boolean quirkIsPartialResult = (quirkPartial != null && quirkPartial);
+ boolean isPartialResult =
+ (resultExtras.getPartialResultCount() < mTotalPartialCount);
// Update tracker (increment counter) when it's not a partial result.
- if (!quirkIsPartialResult) {
+ if (!isPartialResult) {
mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(),
/*error*/false);
}
@@ -1076,7 +1086,7 @@
Runnable resultDispatch = null;
// Either send a partial result or the final capture completed result
- if (quirkIsPartialResult) {
+ if (isPartialResult) {
final CaptureResult resultAsCapture =
new CaptureResult(result, request, requestId);
@@ -1113,7 +1123,7 @@
holder.getHandler().post(resultDispatch);
// Fire onCaptureSequenceCompleted
- if (!quirkIsPartialResult) {
+ if (!isPartialResult) {
checkAndFireSequenceComplete();
}
diff --git a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java
index 7544045..d859da7 100644
--- a/core/java/android/hardware/camera2/impl/CaptureResultExtras.java
+++ b/core/java/android/hardware/camera2/impl/CaptureResultExtras.java
@@ -27,6 +27,7 @@
private int afTriggerId;
private int precaptureTriggerId;
private long frameNumber;
+ private int partialResultCount;
public static final Parcelable.Creator<CaptureResultExtras> CREATOR =
new Parcelable.Creator<CaptureResultExtras>() {
@@ -46,12 +47,14 @@
}
public CaptureResultExtras(int requestId, int subsequenceId, int afTriggerId,
- int precaptureTriggerId, long frameNumber) {
+ int precaptureTriggerId, long frameNumber,
+ int partialResultCount) {
this.requestId = requestId;
this.subsequenceId = subsequenceId;
this.afTriggerId = afTriggerId;
this.precaptureTriggerId = precaptureTriggerId;
this.frameNumber = frameNumber;
+ this.partialResultCount = partialResultCount;
}
@Override
@@ -66,6 +69,7 @@
dest.writeInt(afTriggerId);
dest.writeInt(precaptureTriggerId);
dest.writeLong(frameNumber);
+ dest.writeInt(partialResultCount);
}
public void readFromParcel(Parcel in) {
@@ -74,6 +78,7 @@
afTriggerId = in.readInt();
precaptureTriggerId = in.readInt();
frameNumber = in.readLong();
+ partialResultCount = in.readInt();
}
public int getRequestId() {
@@ -96,4 +101,7 @@
return frameNumber;
}
+ public int getPartialResultCount() {
+ return partialResultCount;
+ }
}
diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
index 5f29e5c..71d3d4b 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
@@ -73,10 +73,11 @@
private CaptureResultExtras getExtrasFromRequest(RequestHolder holder) {
if (holder == null) {
return new CaptureResultExtras(ILLEGAL_VALUE, ILLEGAL_VALUE, ILLEGAL_VALUE,
- ILLEGAL_VALUE, ILLEGAL_VALUE);
+ ILLEGAL_VALUE, ILLEGAL_VALUE, ILLEGAL_VALUE);
}
return new CaptureResultExtras(holder.getRequestId(), holder.getSubsequeceId(),
- /*afTriggerId*/0, /*precaptureTriggerId*/0, holder.getFrameNumber());
+ /*afTriggerId*/0, /*precaptureTriggerId*/0, holder.getFrameNumber(),
+ /*partialResultCount*/1);
}
/**