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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jun 11 04:47:52 CEST 2020


Hi Niklas,

Thank you for the patch.

On Thu, Jun 11, 2020 at 03:46:14AM +0200, Niklas Söderlund wrote:
> 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 one entry in the EXIF
> directory and that makes tiffinfo happy.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/qcam/dng_writer.cpp | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/src/qcam/dng_writer.cpp b/src/qcam/dng_writer.cpp
> index 330b169af25b7ac7..c1c3833740d96630 100644
> --- a/src/qcam/dng_writer.cpp
> +++ b/src/qcam/dng_writer.cpp
> @@ -426,6 +426,17 @@ 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);

Could we use the timestamp from the buffer instead ?

> +	timeinfo = localtime(&rawtime);
> +	strftime(strTime, 20, "%Y:%m:%d %H:%M:%S", timeinfo);

How are time zones supposed to be handled ?

> +
> +	TIFFSetField(tif, EXIFTAG_DATETIMEDIGITIZED, strTime);

Should we also set EXIFTAG_DATETIMEORIGINAL to the same value ?

> +
>  	if (metadata.contains(controls::AnalogueGain)) {
>  		float gain = metadata.get(controls::AnalogueGain);
>  		uint16_t iso = std::min(std::max(gain * 100, 0.0f), 65535.0f);

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list