58 buf[adr + 3] = val & 0xff;
59 buf[adr + 2] = (val >> 8) & 0xff;
60 buf[adr + 1] = (val >> 16) & 0xff;
65 uint16_t tag, uint16_t
type, uint32_t lng, uint32_t fld,
66 uint8_t *
b, uint8_t *cnt)
84 while(
f * mult - (
int)(
f * mult + 0.00005f) > 0.0001f) mult++;
86 *num = (int)(*den *
f);
91 FILE *fp, uint32_t xs, uint32_t ys,
float Tv,
float Av,
92 float f,
float iso, uint32_t filter,
93 const uint8_t xtrans[6][6],
94 const float whitelevel,
95 const dt_aligned_pixel_t wb_coeffs,
96 const float adobe_XYZ_to_CAM[4][3])
98 const uint32_t channels = 1;
105 int m[9] = { 3240454, -1537138, -498531, -969266, 1876010, 41556, 55643, -204025, 1057225 };
108 memset(buf, 0,
sizeof(buf));
144 uint32_t cfapattern = 0;
148 cfapattern = (0 << 24) | (1 << 16) | (1 << 8) | 2;
151 cfapattern = (1 << 24) | (2 << 16) | (0 << 8) | 1;
154 cfapattern = (1 << 24) | (0 << 16) | (2 << 8) | 1;
157 cfapattern = (2 << 24) | (1 << 16) | (1 << 8) | 0;
174 white.f = whitelevel;
187 memcpy(buf+400, xtrans,
sizeof(uint8_t)*36);
190 if(!isnan(adobe_XYZ_to_CAM[0][0]))
192 for(
int k= 0; k < 3; k++)
193 for(
int i= 0;
i < 3;
i++)
198 for(
int k = 0; k < 9; k++)
206 for(
int k = 0; k < 3; k++)
208 const float coeff = roundf(((
float)den * wb_coeffs[1]) / wb_coeffs[k]);
214 const int written = fwrite(buf, 1, 584, fp);
215 if(written != 584) fprintf(stderr,
"[dng_write_header] failed to write image header!\n");
219 const char *filename,
const float *
const pixel,
const int wd,
220 const int ht,
void *exif,
const int exif_len,
const uint32_t filter,
221 const uint8_t xtrans[6][6],
222 const float whitelevel,
223 const dt_aligned_pixel_t wb_coeffs,
224 const float adobe_XYZ_to_CAM[4][3])
226 FILE *
f = g_fopen(filename,
"wb");
230 filter, xtrans, whitelevel, wb_coeffs, adobe_XYZ_to_CAM);
231 const int k = fwrite(pixel,
sizeof(
float), (
size_t)wd * ht,
f);
232 if(k != wd * ht) fprintf(stderr,
"[dng_write] Error writing image data to %s\n", filename);
#define m
Definition basecurve.c:277
const float i
Definition colorspaces_inline_conversions.h:669
const dt_aligned_pixel_t f
Definition colorspaces_inline_conversions.h:256
const float b
Definition colorspaces_inline_conversions.h:1326
static const dt_aligned_pixel_simd_t sign
Definition darktable.h:475
int dt_exif_write_blob(uint8_t *blob, uint32_t size, const char *path, const int compressed)
Definition exif.cc:1809
#define ADOBE_COEFF_FACTOR
Definition imageio.h:57
static void dt_imageio_dng_convert_rational(float f, int32_t *num, int32_t *den)
Definition imageio_dng.h:75
#define RATIONAL
Definition imageio_dng.h:53
static uint8_t * dt_imageio_dng_make_tag(uint16_t tag, uint16_t type, uint32_t lng, uint32_t fld, uint8_t *b, uint8_t *cnt)
Definition imageio_dng.h:64
static void dt_imageio_write_dng(const char *filename, const float *const pixel, const int wd, const int ht, void *exif, const int exif_len, const uint32_t filter, const uint8_t xtrans[6][6], const float whitelevel, const dt_aligned_pixel_t wb_coeffs, const float adobe_XYZ_to_CAM[4][3])
Definition imageio_dng.h:218
#define SHORT
Definition imageio_dng.h:51
#define LONG
Definition imageio_dng.h:52
static void dt_imageio_dng_write_tiff_header(FILE *fp, uint32_t xs, uint32_t ys, float Tv, float Av, float f, float iso, uint32_t filter, const uint8_t xtrans[6][6], const float whitelevel, const dt_aligned_pixel_t wb_coeffs, const float adobe_XYZ_to_CAM[4][3])
Definition imageio_dng.h:90
#define BYTE
Definition imageio_dng.h:49
static void dt_imageio_dng_write_buf(uint8_t *buf, int adr, int val)
Definition imageio_dng.h:56
#define SRATIONAL
Definition imageio_dng.h:54
static const float *const const float coeff[3]
Definition iop_profile.h:246