From 7f5c7c1c4c5a7f59bae41476ccd8648c6145f6e8 Mon Sep 17 00:00:00 2001 From: Martijn Braam Date: Thu, 23 Nov 2023 00:30:14 +0100 Subject: [PATCH] Use libdng to parse the calibration file --- src/dcp.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/dcp.c b/src/dcp.c index d25417f..59018b2 100644 --- a/src/dcp.c +++ b/src/dcp.c @@ -1,7 +1,9 @@ #include "dcp.h" +#include #include #include +#include #include bool @@ -15,18 +17,18 @@ find_calibration_by_model(char *conffile, char *model, const char *sensor) } // Check user overridden /etc/megapixels/config/%model,%sensor.dcp - sprintf(conffile, - "%s/megapixels/config/%s,%s.dcp", - "/etc", - model, - sensor); + sprintf(conffile, "%s/megapixels/config/%s,%s.dcp", "/etc", model, sensor); if (access(conffile, F_OK) != -1) { printf("Found calibration file at %s\n", conffile); return true; } // Check packaged /usr/share/megapixels/config/%model,%sensor.ini - sprintf(conffile, "%s/megapixels/config/%s,%s.dcp", "/usr/share", model, sensor); + sprintf(conffile, + "%s/megapixels/config/%s,%s.dcp", + "/usr/share", + model, + sensor); if (access(conffile, F_OK) != -1) { printf("Found calibration file at %s\n", conffile); return true; @@ -63,3 +65,21 @@ find_calibration(char *conffile, const char *sensor) } } } +struct MPCameraCalibration +parse_calibration_file(const char *path) +{ + struct MPCameraCalibration result; + libdng_info temp = { 0 }; + libdng_new(&temp); + libdng_load_calibration_file(&temp, path); + + memcpy(result.color_matrix_1, temp.color_matrix_1, 9 * sizeof(float)); + memcpy(result.color_matrix_2, temp.color_matrix_2, 9 * sizeof(float)); + memcpy(result.forward_matrix_1, temp.forward_matrix_1, 9 * sizeof(float)); + memcpy(result.forward_matrix_2, temp.forward_matrix_2, 9 * sizeof(float)); + result.tone_curve_length = temp.tone_curve_length; + memcpy(result.tone_curve, + temp.tone_curve, + temp.tone_curve_length * sizeof(float)); + return result; +}