1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#include <stdbool.h>
#include <tiffio.h>
#include "greatest.h"
#include "libdng.h"
TEST load_pinephone_dcp(void)
{
libdng_info info = {0};
libdng_new(&info);
if (!libdng_load_calibration_file(&info, "fixture/pinephone.dcp")) {
FAILm("Could not load calibration file");
}
float colormatrix1[] = {
1.8464f, -0.9617f, 0.096f,
-0.4260f, 1.3753f, 0.3348f,
-0.1147f, 0.4933f, 1.6042f,
};
char name[20] = {0};
for (int i = 0; i < 9; i++) {
snprintf(name, 20, "COLORMATRIX1[%d]", i);
ASSERT_IN_RANGEm(strdup(name), colormatrix1[i], info.color_matrix_1[i], 0.0000001f);
}
float forwardmatrix1[] = {
0.7063f, 0.1361f, 0.1219f,
0.2691f, 0.6969f, 0.0340f,
0.0003f, 0.0855f, 0.7393f,
};
for (int i = 0; i < 9; i++) {
snprintf(name, 20, "FORWARDMATRIX1[%d]", i);
ASSERT_IN_RANGEm(strdup(name), forwardmatrix1[i], info.forward_matrix_1[i], 0.0000001f);
}
ASSERT_EQ_FMTm("ILLUMINANT1", LIBDNG_ILLUMINANT_STANDARD_A, info.illuminant_1, "%d");
ASSERT_EQ_FMTm("ILLUMINANT2", LIBDNG_ILLUMINANT_D65, info.illuminant_2, "%d");
ASSERT_EQ_FMTm("TONE_CURVE_LEN", (size_t) 4, info.tone_curve_length, "%zu");
double tonecurve[] = {0.0, 0.0, 1.0, 1.0};
for (size_t i = 0; i < info.tone_curve_length; i++) {
snprintf(name, 20, "TONECURVE[%zu]", i);
ASSERT_IN_RANGEm(strdup(name), tonecurve[i], info.tone_curve[i], 0.0000001f);
}
// HueSat map is 90x30x1 in this DCP (ProfileHueSatMapDims: Hues = 90, Sats = 30, Vals = 1)
ASSERT_EQ_FMTm("HUE_SAT_MAP_DIMS[0]", 90, info.hue_sat_map_dims[0], "%d");
ASSERT_EQ_FMTm("HUE_SAT_MAP_DIMS[1]", 30, info.hue_sat_map_dims[1], "%d");
ASSERT_EQ_FMTm("HUE_SAT_MAP_DIMS[2]", 1, info.hue_sat_map_dims[2], "%d");
size_t entries = info.hue_sat_map_dims[0] * info.hue_sat_map_dims[1] * info.hue_sat_map_dims[2];
for (size_t i = 0; i < entries; i = i + 3) {
if (info.hue_sat_map_data_1[i] < -360.0f || info.hue_sat_map_data_1[i] > 360.0f) {
snprintf(name, 20, "HUESATMAP1[%zu]", i);
FAILm(strdup(name));
}
if (info.hue_sat_map_data_2[i] < -360.0f || info.hue_sat_map_data_2[i] > 360.0f) {
snprintf(name, 20, "HUESATMAP2[%zu]", i);
FAILm(strdup(name));
}
}
PASS();
}
SUITE (test_suite)
{
RUN_TEST(load_pinephone_dcp);
}
GREATEST_MAIN_DEFS();
int
main(int argc, char **argv)
{
GREATEST_MAIN_BEGIN();
libdng_init();
RUN_SUITE(test_suite);
GREATEST_MAIN_END();
}
|