summaryrefslogtreecommitdiffstats
path: root/core/java/android/hardware
diff options
context:
space:
mode:
authorJianing Wei <jianingwei@google.com>2014-04-18 17:35:00 -0700
committerJianing Wei <jianingwei@google.com>2014-04-18 17:35:00 -0700
commitbaf0c650b3747a6510af81cf92c4a584d7bfd3a1 (patch)
tree0e4c7fc054f460ca94d1382053e79f1e97ccb00d /core/java/android/hardware
parentc726f6b537c5913600bc35ff866f1fb32800b9be (diff)
downloadframeworks_base-baf0c650b3747a6510af81cf92c4a584d7bfd3a1.zip
frameworks_base-baf0c650b3747a6510af81cf92c4a584d7bfd3a1.tar.gz
frameworks_base-baf0c650b3747a6510af81cf92c4a584d7bfd3a1.tar.bz2
Camera2 API: fix bug in Camera2 CTS test failure.
* The bug is caused by the fact that we did not update the frame tracker when the listener is null or camera is closed. * This change fixes the bug 14151933. Bug: 14151933 Change-Id: I00e3024e403503a056834be805c44604cb1a8a6d
Diffstat (limited to 'core/java/android/hardware')
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDevice.java27
1 files changed, 23 insertions, 4 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraDevice.java b/core/java/android/hardware/camera2/impl/CameraDevice.java
index 7328fe3..ee2adac 100644
--- a/core/java/android/hardware/camera2/impl/CameraDevice.java
+++ b/core/java/android/hardware/camera2/impl/CameraDevice.java
@@ -315,6 +315,12 @@ public class CameraDevice implements android.hardware.camera2.CameraDevice {
holder = (index >= 0) ? mCaptureListenerMap.valueAt(index) : null;
if (holder != null) {
mCaptureListenerMap.removeAt(index);
+ if (DEBUG) {
+ Log.v(TAG, String.format(
+ "remove holder for requestId %d, "
+ + "because lastFrame is %d.",
+ requestId, lastFrameNumber));
+ }
}
if (holder != null) {
@@ -390,6 +396,10 @@ public class CameraDevice implements android.hardware.camera2.CameraDevice {
if (listener != null) {
mCaptureListenerMap.put(requestId, new CaptureListenerHolder(listener,
requestList, handler, repeating));
+ } else {
+ if (DEBUG) {
+ Log.d(TAG, "Listen for request " + requestId + " is null");
+ }
}
long lastFrameNumber = lastFrameNumberRef.getNumber();
@@ -828,7 +838,8 @@ public class CameraDevice implements android.hardware.camera2.CameraDevice {
CaptureResultExtras resultExtras) throws RemoteException {
int requestId = resultExtras.getRequestId();
if (DEBUG) {
- Log.d(TAG, "Received result for id " + requestId);
+ Log.v(TAG, "Received result frame " + resultExtras.getFrameNumber() + " for id "
+ + requestId);
}
final CaptureListenerHolder holder;
synchronized (mLock) {
@@ -838,17 +849,26 @@ public class CameraDevice implements android.hardware.camera2.CameraDevice {
Boolean quirkPartial = result.get(CaptureResult.QUIRKS_PARTIAL_RESULT);
boolean quirkIsPartialResult = (quirkPartial != null && quirkPartial);
+ // Update tracker (increment counter) when it's not a partial result.
+ if (!quirkIsPartialResult) {
+ mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(), /*error*/false);
+ }
+
// Check if we have a listener for this
if (holder == null) {
if (DEBUG) {
- Log.v(TAG, "holder is null, early return");
+ Log.d(TAG,
+ "holder is null, early return at frame "
+ + resultExtras.getFrameNumber());
}
return;
}
if (isClosed()) {
if (DEBUG) {
- Log.v(TAG, "camera is closed, early return");
+ Log.d(TAG,
+ "camera is closed, early return at frame "
+ + resultExtras.getFrameNumber());
}
return;
}
@@ -891,7 +911,6 @@ public class CameraDevice implements android.hardware.camera2.CameraDevice {
// Fire onCaptureSequenceCompleted
if (!quirkIsPartialResult) {
- mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(), /*error*/false);
checkAndFireSequenceComplete();
}
}