[libcamera-devel] [PATCH v2] qcam: dng_writer: Record creation time in the EXIF directory

Niklas Söderlund niklas.soderlund at ragnatech.se
Thu Jun 11 20:39:14 CEST 2020


If the EXIF directory is empty due to no metadata being available tools
such as tiffinfo complains that the directory is malformed.

    TIFFFetchDirectory: Sanity check on directory count failed, this is probably not a valid IFD offset.
    TIFFReadCustomDirectory: Failed to read custom directory at offset 0.

Always record the creation time in the EXIF directory instead of adding
complexity to skip creating the EXIF directory if there is no metadata
to record. This ensures there are at least some entries in the EXIF
directory and that makes tiffinfo happy.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
* Changes since v1
- Also set EXIFTAG_DATETIMEORIGINAL
---
 src/qcam/dng_writer.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/qcam/dng_writer.cpp b/src/qcam/dng_writer.cpp
index 8470908816e3e408..946d46d84c73397e 100644
--- a/src/qcam/dng_writer.cpp
+++ b/src/qcam/dng_writer.cpp
@@ -427,6 +427,18 @@ int DNGWriter::write(const char *filename, const Camera *camera,
 	/* Create a new IFD for the EXIF data and fill it. */
 	TIFFCreateEXIFDirectory(tif);
 
+	/* Store creation time. */
+	time_t rawtime;
+	struct tm *timeinfo;
+	char strTime[20];
+
+	time(&rawtime);
+	timeinfo = localtime(&rawtime);
+	strftime(strTime, 20, "%Y:%m:%d %H:%M:%S", timeinfo);
+
+	TIFFSetField(tif, EXIFTAG_DATETIMEORIGINAL, strTime);
+	TIFFSetField(tif, EXIFTAG_DATETIMEDIGITIZED, strTime);
+
 	if (metadata.contains(controls::AnalogueGain)) {
 		float gain = metadata.get(controls::AnalogueGain);
 		uint16_t iso = std::min(std::max(gain * 100, 0.0f), 65535.0f);
-- 
2.27.0



More information about the libcamera-devel mailing list