Camera: Treat decreasing timestamp as BUFFER_ERROR
Decreasing timestamp shouldn't happen in non ZSL or reprocessing case.
When that happens, treat the buffer as error and return to buffer queue
directly.
Test: Camera CTS
Bug: 113670946
Change-Id: I39d3417dd9307d6cc7c90ff357a82604566a9081
diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
index 8476711..ecbcf76 100644
--- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
@@ -237,12 +237,14 @@
/**
* Return buffer back to ANativeWindow
*/
- if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers) {
+ if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR || mDropBuffers || timestamp == 0) {
// Cancel buffer
if (mDropBuffers) {
ALOGV("%s: Dropping a frame for stream %d.", __FUNCTION__, mId);
- } else {
+ } else if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) {
ALOGW("%s: A frame is dropped for stream %d due to buffer error.", __FUNCTION__, mId);
+ } else {
+ ALOGE("%s: Stream %d: timestamp shouldn't be 0", __FUNCTION__, mId);
}
res = currentConsumer->cancelBuffer(currentConsumer.get(),
@@ -268,10 +270,6 @@
mTraceFirstBuffer = false;
}
- if (timestamp == 0) {
- ALOGW("%s: Stream %d: timestamp shouldn't be 0", __FUNCTION__, mId);
- }
-
/* Certain consumers (such as AudioSource or HardwareComposer) use
* MONOTONIC time, causing time misalignment if camera timestamp is
* in BOOTTIME. Do the conversion if necessary. */