summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Eino-Ville Talvala <etalvala@google.com> 2016-09-19 19:34:47 +0000
committer android-build-merger <android-build-merger@google.com> 2016-09-19 19:34:47 +0000
commit215c76b1f4326e4f4a00a10cfd678c34307b1be2 (patch)
tree8465ae72b87dfabc1e676a20b14c400af93074c9
parenta712eb9b268864846492bd428092d88e9a4cf906 (diff)
parent3fc21ef78bb7b913a203394cbb870086696c8fa3 (diff)
DngCreator: Fix calculation of date/time stamps
am: 3fc21ef78b Change-Id: Ic09cbb9fcf26d4d189506cd1b8c3aaacb86f448d
-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