115 JsonReader *reader = NULL;
116 gboolean valid =
TRUE;
120 JsonNode *root = json_parser_get_root(parser);
123 reader = json_reader_new(root);
125 if(!json_reader_read_member(reader,
"version"))
_ERROR(
"can't find file version.");
128 const int version = json_reader_get_int_value(reader);
129 json_reader_end_member(reader);
133 if(!json_reader_read_member(reader,
"noiseprofiles"))
_ERROR(
"can't find `noiseprofiles' entry.");
135 if(!json_reader_is_array(reader))
_ERROR(
"`noiseprofiles' is supposed to be an array");
138 const int n_makers = json_reader_count_elements(reader);
140 for(
int i = 0;
i < n_makers;
i++)
142 if(!json_reader_read_element(reader,
i))
_ERROR(
"can't access maker at position %d / %d",
i+1, n_makers);
144 if(!json_reader_read_member(reader,
"maker"))
_ERROR(
"missing `maker`");
147 json_reader_end_member(reader);
149 if(!json_reader_read_member(reader,
"models"))
_ERROR(
"missing `models`");
151 const int n_models = json_reader_count_elements(reader);
153 for(
int j = 0; j < n_models; j++)
155 if(!json_reader_read_element(reader, j))
_ERROR(
"can't access model at position %d / %d", j+1, n_models);
157 if(!json_reader_read_member(reader,
"model"))
_ERROR(
"missing `model`");
159 json_reader_end_member(reader);
161 if(!json_reader_read_member(reader,
"profiles"))
_ERROR(
"missing `profiles`");
163 const int n_profiles = json_reader_count_elements(reader);
164 for(
int k = 0;
k < n_profiles;
k++)
166 if(!json_reader_read_element(reader,
k))
_ERROR(
"can't access profile at position %d / %d",
k+1, n_profiles);
168 gchar** member_names = json_reader_list_members(reader);
173 g_strfreev(member_names);
180 g_strfreev(member_names);
187 g_strfreev(member_names);
190 json_reader_read_member(reader,
"a");
191 if(json_reader_count_elements(reader) != 3)
193 g_strfreev(member_names);
194 _ERROR(
"`a` with size != 3");
196 json_reader_end_member(reader);
201 g_strfreev(member_names);
204 json_reader_read_member(reader,
"b");
205 if(json_reader_count_elements(reader) != 3)
207 g_strfreev(member_names);
208 _ERROR(
"`b` with size != 3");
210 json_reader_end_member(reader);
212 json_reader_end_element(reader);
214 g_strfreev(member_names);
217 json_reader_end_member(reader);
218 json_reader_end_element(reader);
221 json_reader_end_member(reader);
222 json_reader_end_element(reader);
225 json_reader_end_member(reader);
228 if(reader) g_object_unref(reader);
236 JsonReader *reader = NULL;
237 GList *result = NULL;
238 gboolean parser_locked =
FALSE;
247 parser_locked =
TRUE;
249 JsonNode *root = json_parser_get_root(parser);
252 reader = json_reader_new(root);
255 if(!json_reader_read_member(reader,
"noiseprofiles"))
goto end;
258 const int n_makers = json_reader_count_elements(reader);
259 for(
int i = 0;
i < n_makers;
i++)
261 json_reader_read_element(reader,
i);
263 json_reader_read_member(reader,
"maker");
265 if(g_strstr_len(cimg->
camera_maker, -1, json_reader_get_string_value(reader)))
268 json_reader_end_member(reader);
270 json_reader_read_member(reader,
"models");
272 const int n_models = json_reader_count_elements(reader);
273 for(
int j = 0; j < n_models; j++)
275 json_reader_read_element(reader, j);
277 json_reader_read_member(reader,
"model");
279 if(!g_strcmp0(cimg->
camera_model, json_reader_get_string_value(reader)))
282 json_reader_end_member(reader);
284 json_reader_read_member(reader,
"profiles");
286 const int n_profiles = json_reader_count_elements(reader);
287 for(
int k = 0;
k < n_profiles;
k++)
291 json_reader_read_element(reader,
k);
293 gchar** member_names = json_reader_list_members(reader);
298 json_reader_read_member(reader,
"skip");
299 gboolean skip = json_reader_get_boolean_value(reader);
300 json_reader_end_member(reader);
303 json_reader_end_element(reader);
304 g_strfreev(member_names);
316 json_reader_read_member(reader,
"name");
317 tmp_profile.
name = g_strdup(json_reader_get_string_value(reader));
318 json_reader_end_member(reader);
321 json_reader_read_member(reader,
"iso");
322 tmp_profile.
iso = json_reader_get_double_value(reader);
323 json_reader_end_member(reader);
326 json_reader_read_member(reader,
"a");
327 for(
int a = 0; a < 3; a++)
329 json_reader_read_element(reader, a);
330 tmp_profile.
a[a] = json_reader_get_double_value(reader);
331 json_reader_end_element(reader);
333 json_reader_end_member(reader);
336 json_reader_read_member(reader,
"b");
337 for(
int b = 0; b < 3; b++)
339 json_reader_read_element(reader, b);
340 tmp_profile.
b[b] = json_reader_get_double_value(reader);
341 json_reader_end_element(reader);
343 json_reader_end_member(reader);
345 json_reader_end_element(reader);
349 *new_profile = tmp_profile;
350 result = g_list_prepend(result, new_profile);
352 g_strfreev(member_names);
358 json_reader_end_member(reader);
359 json_reader_end_element(reader);
363 json_reader_end_member(reader);
364 json_reader_end_element(reader);
367 json_reader_end_member(reader);