[v2] apps: common: dng_writer: Workaround for "Unknown tag 33421" error
diff mbox series

Message ID 20240625090146.1925569-1-stefan.klug@ideasonboard.com
State Accepted
Commit 36a4f67a755ef54d81944ae6d8b11685e5a41a28
Headers show
Series
  • [v2] apps: common: dng_writer: Workaround for "Unknown tag 33421" error
Related show

Commit Message

Stefan Klug June 25, 2024, 9:01 a.m. UTC
In libtiff version 4.5.1 and later the CFA* tags were missing. This got
fixed in https://gitlab.com/libtiff/libtiff/-/commit/49856998c3d82e65444b47bb4fb11b7830a0c2be
Unfortunately the fix is not released yet, but the faulty libtiff is
contained in current buildroot. As a local fix is pretty easy and
without side effects, let's workaround that.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes in v2:
- Removed EP prefix from tag names as these weren't available in older
  libtiff versions (the values are the same)

 src/apps/common/dng_writer.cpp | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Patch
diff mbox series

diff --git a/src/apps/common/dng_writer.cpp b/src/apps/common/dng_writer.cpp
index 103e5c828c4d..5a1de8010a47 100644
--- a/src/apps/common/dng_writer.cpp
+++ b/src/apps/common/dng_writer.cpp
@@ -541,6 +541,23 @@  int DNGWriter::write(const char *filename, const Camera *camera,
 
 	TIFFWriteDirectory(tif);
 
+	/*
+	 * Workaround for a bug introduced in libtiff version 4.5.1 and no fix
+	 * released. In these versions the CFA* tags were missing in the field
+	 * info.
+	 * Introduced by: https://gitlab.com/libtiff/libtiff/-/commit/738e04099b13192bb1f654e74e9b5829313f3161
+	 * Fixed by: https://gitlab.com/libtiff/libtiff/-/commit/49856998c3d82e65444b47bb4fb11b7830a0c2be
+	 */
+	if (!TIFFFindField(tif, TIFFTAG_CFAREPEATPATTERNDIM, TIFF_ANY)) {
+		static const TIFFFieldInfo infos[] = {
+			{ TIFFTAG_CFAREPEATPATTERNDIM, 2, 2, TIFF_SHORT, FIELD_CUSTOM,
+			  1, 0, const_cast<char *>("CFARepeatPatternDim") },
+			{ TIFFTAG_CFAPATTERN, -1, -1, TIFF_BYTE, FIELD_CUSTOM,
+			  1, 1, const_cast<char *>("CFAPattern") },
+		};
+		TIFFMergeFieldInfo(tif, infos, 2);
+	}
+
 	/* Create a new IFD for the RAW image. */
 	const uint16_t cfaRepeatPatternDim[] = { 2, 2 };
 	const uint8_t cfaPlaneColor[] = {