{"id":3681,"url":"https://patchwork.libcamera.org/api/1.1/patches/3681/?format=json","web_url":"https://patchwork.libcamera.org/patch/3681/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20200504070425.5972-1-laurent.pinchart@ideasonboard.com>","date":"2020-05-04T07:04:25","name":"[libcamera-devel] qcam: dng_writer: Write EXIF IFD as custom directory","commit_ref":"3ed0fced1f22bcdb9a0f05bbbc1e3b87017ac8c2","pull_url":null,"state":"accepted","archived":false,"hash":"c3b0fdb7f767fc05eceb7378600854819bee0fad","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/1.1/people/2/?format=json","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/3681/mbox/","series":[{"id":879,"url":"https://patchwork.libcamera.org/api/1.1/series/879/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=879","date":"2020-05-04T07:04:25","name":"[libcamera-devel] qcam: dng_writer: Write EXIF IFD as custom directory","version":1,"mbox":"https://patchwork.libcamera.org/series/879/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/3681/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/3681/checks/","tags":{},"headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2C1E7603F2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  4 May 2020 09:04:38 +0200 (CEST)","from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9DD39304\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  4 May 2020 09:04:37 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"dsVUEyr8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1588575877;\n\tbh=cieFPV82b2T09IQCGVwp6Ec14rDwu5MXed6n7pm3SYE=;\n\th=From:To:Subject:Date:From;\n\tb=dsVUEyr88/EkDA6q587zUuXPg0tFB+VinQePqvfiTl0uC92agvsnF+Xg8ojg1Ybx2\n\tDvcxPUoBLg1Cd2ZrAyQYrZWl2+vzJmusVQ7BuGPHcPzqi6BBttSOLo6b7ylGVv9lQs\n\tHEJxjH+QXa2PjeSlB73FOIN08RJQDUIosoxaHpPs=","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Mon,  4 May 2020 10:04:25 +0300","Message-Id":"<20200504070425.5972-1-laurent.pinchart@ideasonboard.com>","X-Mailer":"git-send-email 2.26.2","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH] qcam: dng_writer: Write EXIF IFD as\n\tcustom directory","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Mon, 04 May 2020 07:04:38 -0000"},"content":"The EXIF IFD is incorrectly chained to IFD 0 in addition to being a\nreferenced as a sub IFD through the EXIFIFD tag. While the libtiff API\ndoesn't clearly document why this happens, inspection of the\nTIFFWriteDirectory() source code show that the function treats the IFD\nbeing written as containing an image, which isn't correct for the EXIF\nIFD. Use TIFFWriteCustomDirectory() instead, which fixes the problem.\nThe resulting DNG file can now be opened with darktable in addition to\nrawtherapee.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/qcam/dng_writer.cpp | 4 +---\n 1 file changed, 1 insertion(+), 3 deletions(-)","diff":"diff --git a/src/qcam/dng_writer.cpp b/src/qcam/dng_writer.cpp\nindex ea4616f63d8e..cbd8bed3e6d0 100644\n--- a/src/qcam/dng_writer.cpp\n+++ b/src/qcam/dng_writer.cpp\n@@ -316,9 +316,7 @@ int DNGWriter::write(const char *filename, const Camera *camera,\n \t\tTIFFSetField(tif, EXIFTAG_EXPOSURETIME, exposureTime);\n \t}\n \n-\tTIFFCheckpointDirectory(tif);\n-\texifIFDOffset = TIFFCurrentDirOffset(tif);\n-\tTIFFWriteDirectory(tif);\n+\tTIFFWriteCustomDirectory(tif, &exifIFDOffset);\n \n \t/* Update the IFD offsets and close the file. */\n \tTIFFSetDirectory(tif, 0);\n","prefixes":["libcamera-devel"]}