Support for GX680 digital back including DCP (#6655)

* Initial support for GX680 digital back
With help from LibRaw for decoding support.
Estimates for color calibration are very rough...
* Small modification to black level, add DCP
This commit is contained in:
Thanatomanic 2023-01-02 21:24:15 +01:00 committed by GitHub
parent 21a7c97ede
commit 3423a7ac55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 0 deletions

Binary file not shown.

View File

@ -1586,6 +1586,12 @@ Camera constants:
"raw_crop": [ 0, 5, 7752, 5184 ]
},
{ // Quality C
"make_model": "FUJIFILM DBP for GX680",
"dcraw_matrix": [ 12741, -4916, -1420, -8510, 16791, 1715, -1767, 2302, 7771 ], // same as S2Pro as per LibRaw
"ranges": { "white": 4096, "black": 132 }
},
{ // Quality C, Leica C-Lux names can differ?
"make_model" : [ "LEICA C-LUX", "LEICA CAM-DC25" ],
"dcraw_matrix" : [7790, -2736, -755, -3452, 11870, 1769, -628, 1647, 4898]

View File

@ -2464,6 +2464,30 @@ void CLASS unpacked_load_raw()
}
}
// RT - from LibRaw
void CLASS unpacked_load_raw_FujiDBP()
/*
for Fuji DBP for GX680, aka DX-2000
DBP_tile_width = 688;
DBP_tile_height = 3856;
DBP_n_tiles = 8;
*/
{
int scan_line, tile_n;
int nTiles = 8;
tile_width = raw_width / nTiles;
ushort *tile;
tile = (ushort *) calloc(raw_height, tile_width * 2);
for (tile_n = 0; tile_n < nTiles; tile_n++) {
read_shorts(tile, tile_width * raw_height);
for (scan_line = 0; scan_line < raw_height; scan_line++) {
memcpy(&raw_image[scan_line * raw_width + tile_n * tile_width],
&tile[scan_line * tile_width], tile_width * 2);
}
}
free(tile);
fseek(ifp, -2, SEEK_CUR); // avoid EOF error
}
// RT
void CLASS sony_arq_load_raw()
@ -10067,6 +10091,9 @@ canon_a5:
} else if (!strcmp(model, "X-Pro3") || !strcmp(model, "X-T3") || !strcmp(model, "X-T30") || !strcmp(model, "X-T4") || !strcmp(model, "X100V") || !strcmp(model, "X-S10")) {
width = raw_width = 6384;
height = raw_height = 4182;
} else if (!strcmp(model, "DBP for GX680")) { // Special case for #4204
width = raw_width = 5504;
height = raw_height = 3856;
}
top_margin = (raw_height - height) >> 2 << 1;
left_margin = (raw_width - width ) >> 2 << 1;
@ -10074,6 +10101,16 @@ canon_a5:
if (width == 4032 || width == 4952 || width == 6032 || width == 8280) left_margin = 0;
if (width == 3328 && (width -= 66)) left_margin = 34;
if (width == 4936) left_margin = 4;
if (width == 5504) { // #4204, taken from LibRaw
left_margin = 32;
top_margin = 8;
width = raw_width - 2*left_margin;
height = raw_height - 2*top_margin;
load_raw = &CLASS unpacked_load_raw_FujiDBP;
filters = 0x16161616;
load_flags = 0;
flip = 6;
}
if (!strcmp(model,"HS50EXR") ||
!strcmp(model,"F900EXR")) {
width += 2;

View File

@ -432,6 +432,7 @@ void parse_hasselblad_gain();
void hasselblad_load_raw();
void leaf_hdr_load_raw();
void unpacked_load_raw();
void unpacked_load_raw_FujiDBP();
void sinar_4shot_load_raw();
void imacon_full_load_raw();
void packed_load_raw();