summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/camera2/DngCreator.java27
1 files changed, 22 insertions, 5 deletions
diff --git a/core/java/android/hardware/camera2/DngCreator.java b/core/java/android/hardware/camera2/DngCreator.java
index 9478dc002d6c..45fa15e043e5 100644
--- a/core/java/android/hardware/camera2/DngCreator.java
+++ b/core/java/android/hardware/camera2/DngCreator.java
@@ -27,6 +27,7 @@ import android.location.Location;
import android.media.ExifInterface;
import android.media.Image;
import android.os.SystemClock;
+import android.util.Log;
import android.util.Size;
import java.io.IOException;
@@ -89,17 +90,33 @@ public final class DngCreator implements AutoCloseable {
throw new IllegalArgumentException("Null argument to DngCreator constructor");
}
- // Find current time
+ // Find current time in milliseconds since 1970
long currentTime = System.currentTimeMillis();
-
- // Find boot time
- long bootTimeMillis = currentTime - SystemClock.elapsedRealtime();
+ // Assume that sensor timestamp has that timebase to start
+ long timeOffset = 0;
+
+ int timestampSource = characteristics.get(
+ CameraCharacteristics.SENSOR_INFO_TIMESTAMP_SOURCE);
+
+ if (timestampSource == CameraCharacteristics.SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME) {
+ // This means the same timebase as SystemClock.elapsedRealtime(),
+ // which is CLOCK_BOOTTIME
+ timeOffset = currentTime - SystemClock.elapsedRealtime();
+ } else if (timestampSource == CameraCharacteristics.SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN) {
+ // This means the same timebase as System.currentTimeMillis(),
+ // which is CLOCK_MONOTONIC
+ timeOffset = currentTime - SystemClock.uptimeMillis();
+ } else {
+ // Unexpected time source - treat as CLOCK_MONOTONIC
+ Log.w(TAG, "Sensor timestamp source is unexpected: " + timestampSource);
+ timeOffset = currentTime - SystemClock.uptimeMillis();
+ }
// Find capture time (nanos since boot)
Long timestamp = metadata.get(CaptureResult.SENSOR_TIMESTAMP);
long captureTime = currentTime;
if (timestamp != null) {
- captureTime = timestamp / 1000000 + bootTimeMillis;
+ captureTime = timestamp / 1000000 + timeOffset;
}
// Format for metadata