Fixes reading Dual ISO (Magic Lantern) DNG (#5658) (#6505)

This commit is contained in:
GiMo84 2022-08-21 07:04:14 +02:00 committed by GitHub
parent ea515f4c98
commit 4f6273a2bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 4 deletions

View File

@ -6109,7 +6109,8 @@ get2_256:
{
fseek(ifp, offsetChannelBlackLevel, SEEK_SET);
FORC4
bls += (cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2());
bls += (RT_canon_levels_data.cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2());
RT_canon_levels_data.black_ok = true;
imCanon.AverageBlackLevel = bls / 4;
// RT_blacklevel_from_constant = ThreeValBool::F;
}
@ -6121,7 +6122,8 @@ get2_256:
imCanon.SpecularWhiteLevel = get2();
// FORC4
// imgdata.color.linear_max[c] = imCanon.SpecularWhiteLevel;
maximum = imCanon.SpecularWhiteLevel;
RT_canon_levels_data.white = imCanon.SpecularWhiteLevel;
RT_canon_levels_data.white_ok = true;
// RT_whitelevel_from_constant = ThreeValBool::F;
}
@ -6129,7 +6131,8 @@ get2_256:
{
fseek(ifp, offsetChannelBlackLevel2, SEEK_SET);
FORC4
bls += (cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2());
bls += (RT_canon_levels_data.cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2());
RT_canon_levels_data.black_ok = true;
imCanon.AverageBlackLevel = bls / 4;
// RT_blacklevel_from_constant = ThreeValBool::F;
}
@ -9864,7 +9867,8 @@ void CLASS identify()
filters = 0;
tiff_samples = colors = 3;
load_raw = &CLASS canon_sraw_load_raw;
FORC4 cblack[c] = 0; // ALB
//FORC4 cblack[c] = 0; // ALB
RT_canon_levels_data.black_ok = RT_canon_levels_data.white_ok = false;
} else if (!strcmp(model,"PowerShot 600")) {
height = 613;
width = 854;
@ -10530,6 +10534,14 @@ bw: colors = 1;
}
}
dng_skip:
if (!dng_version && is_raw) {
if (RT_canon_levels_data.black_ok) {
FORC4 cblack[c] = RT_canon_levels_data.cblack[c];
}
if (RT_canon_levels_data.white_ok) {
maximum = RT_canon_levels_data.white;
}
}
if ((use_camera_matrix & (use_camera_wb || dng_version))
&& cmatrix[0][0] > 0.125
&& strncmp(RT_software.c_str(), "Adobe DNG Converter", 19) != 0

View File

@ -193,9 +193,18 @@ public:
int crx_track_selected;
short CR3_CTMDtag;
};
struct CanonLevelsData {
unsigned cblack[4];
unsigned white;
bool black_ok;
bool white_ok;
CanonLevelsData(): cblack{0}, white{0}, black_ok(false), white_ok(false) {}
};
protected:
CanonCR3Data RT_canon_CR3_data;
CanonLevelsData RT_canon_levels_data;
float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];
void (DCraw::*write_thumb)();