From 94926b83151023d311a6acef4235375289c292f5 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Thu, 14 Feb 2019 20:40:49 +0100 Subject: [PATCH 1/2] Support for Nikon Z7 uncompressed NEF files, fixes #4801 --- rtengine/dcraw.cc | 52 +++++++++++++++++++++++++++++++++++++++++++---- rtengine/dcraw.h | 2 ++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index c4118dd19..22ee660e2 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -6866,13 +6866,15 @@ void CLASS apply_tiff() } else if ((raw_width * 2 * tiff_bps / 16 + 8) * raw_height == tiff_ifd[raw].bytes) { // 14 bit uncompressed from Nikon Z7, still wrong // each line has 8 padding byte. - row_padding = 8; - load_raw = &CLASS packed_load_raw; + //row_padding = 8; + //load_raw = &CLASS packed_load_raw; + load_raw = &CLASS nikon_14bit_load_raw; } else if ((raw_width * 2 * tiff_bps / 16 + 12) * raw_height == tiff_ifd[raw].bytes) { // 14 bit uncompressed from Nikon Z6, still wrong // each line has 12 padding byte. - row_padding = 12; - load_raw = &CLASS packed_load_raw; + // row_padding = 12; + // load_raw = &CLASS packed_load_raw; + load_raw = &CLASS nikon_14bit_load_raw; } else load_raw = &CLASS nikon_load_raw; break; case 65535: @@ -10674,6 +10676,48 @@ struct tiff_hdr { #include "fujicompressed.cc" +//----------------------------------------------------------------------------- +/* Taken from LibRaw + +LibRaw is free software; you can redistribute it and/or modify +it under the terms of the one of two licenses as you choose: +1. GNU LESSER GENERAL PUBLIC LICENSE version 2.1 + (See file LICENSE.LGPL provided in LibRaw distribution archive for details). +2. COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 + (See file LICENSE.CDDL provided in LibRaw distribution archive for details). + */ + +namespace { + +inline void unpack7bytesto4x16_nikon(unsigned char *src, unsigned short *dest) +{ + dest[3] = (src[6] << 6) | (src[5] >> 2); + dest[2] = ((src[5] & 0x3) << 12) | (src[4] << 4) | (src[3] >> 4); + dest[1] = (src[3] & 0xf) << 10 | (src[2] << 2) | (src[1] >> 6); + dest[0] = ((src[1] & 0x3f) << 8) | src[0]; +} + +} // namespace + +void CLASS nikon_14bit_load_raw() +{ + const unsigned linelen = (unsigned)(ceilf((float)(raw_width * 7 / 4) / 16.0)) * 16; // 14512; // S.raw_width * 7 / 4; + const unsigned pitch = raw_width; //S.raw_pitch ? S.raw_pitch / 2 : S.raw_width; + unsigned char *buf = (unsigned char *)malloc(linelen); + merror(buf, "nikon_14bit_load_raw()"); + for (int row = 0; row < raw_height; row++) + { + unsigned bytesread = fread(buf, 1, linelen, ifp); + unsigned short *dest = &raw_image[pitch * row]; + //swab32arr((unsigned *)buf, bytesread / 4); + for (int sp = 0, dp = 0; dp < pitch - 3 && sp < linelen - 6 && sp < bytesread - 6; sp += 7, dp += 4) + unpack7bytesto4x16_nikon(buf + sp, dest + dp); + } + free(buf); +} + +//----------------------------------------------------------------------------- + /* RT: Delete from here */ /*RT*/#undef SQR /*RT*/#undef MAX diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index ea43d2176..81da41718 100644 --- a/rtengine/dcraw.h +++ b/rtengine/dcraw.h @@ -526,6 +526,8 @@ void shiftXtransMatrix( const int offsy, const int offsx) { } } +void nikon_14bit_load_raw(); // ported from LibRaw + }; From 8c7555f4a80270bfa9270a9d70fb359128e7a9d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B6ssie?= Date: Thu, 14 Feb 2019 21:28:49 +0100 Subject: [PATCH 2/2] Fix experimental C++17 build (fixes #5175) --- rtgui/previewloader.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtgui/previewloader.cc b/rtgui/previewloader.cc index f4cfe2b1b..34b42dcb7 100644 --- a/rtgui/previewloader.cc +++ b/rtgui/previewloader.cc @@ -59,7 +59,7 @@ public: }; */ struct JobCompare { - bool operator()(const Job& lhs, const Job& rhs) + bool operator()(const Job& lhs, const Job& rhs) const { if ( lhs.dir_id_ == rhs.dir_id_ ) { return lhs.dir_entry_ < rhs.dir_entry_;