summaryrefslogtreecommitdiff
path: root/src/export.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/export.c')
-rw-r--r--src/export.c48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/export.c b/src/export.c
index 5a98f2d..9abd1ae 100644
--- a/src/export.c
+++ b/src/export.c
@@ -70,6 +70,34 @@ error_image3d:
return ENOMEM;
}
+static int export_fundi(const struct e2e_series *series, matvar_t **fundi)
+{
+ size_t i, dims;
+ struct e2e_image *image;
+
+ dims = series->num_fundi;
+ *fundi = Mat_VarCreate(NULL, MAT_C_CELL, MAT_T_CELL, 1, &dims, NULL, 0);
+ if (!*fundi)
+ return ENOMEM;
+
+ i = 0;
+ eli_for(image, series->fundi, series_fundi_list) {
+ matvar_t *var;
+ size_t dims[2] = {image->width, image->height};
+
+ var = Mat_VarCreate(NULL, MAT_C_UINT8, MAT_T_UINT8, 2, dims,
+ (void*)image->fundus, 0);
+ if (!var) {
+ Mat_VarFree(*fundi);
+ return ENOMEM;
+ }
+
+ Mat_VarSetCell(*fundi, i++, var);
+ }
+
+ return 0;
+}
+
static int export_series(const struct e2e_series *series, matvar_t **out)
{
int rv;
@@ -89,7 +117,7 @@ static int export_series(const struct e2e_series *series, matvar_t **out)
"tomogram_slice_ids",
"fundi",
};
- matvar_t *st, *id, *tomogram, *slice_ids;
+ matvar_t *st, *id, *tomogram = NULL, *slice_ids = NULL, *fundi;
st = create_struct(fields, COUNT(fields));
if (!st) {
@@ -103,22 +131,26 @@ static int export_series(const struct e2e_series *series, matvar_t **out)
goto error_id;
}
- Mat_VarSetStructFieldByName(st, "series_id", 0, id);
if (HASH_COUNT(series1->slices)) {
rv = export_tomogram(series1->slices, &tomogram, &slice_ids);
if (rv)
goto error_tomogram;
-
- Mat_VarSetStructFieldByName(st, "tomogram", 0, tomogram);
- Mat_VarSetStructFieldByName(st, "tomogram_slice_ids", 0,
- slice_ids);
}
- // TODO: export fundus images
-
+
+ rv = export_fundi(series1, &fundi);
+ if (rv)
+ goto error_fundi;
+
+ Mat_VarSetStructFieldByName(st, "tomogram", 0, tomogram);
+ Mat_VarSetStructFieldByName(st, "tomogram_slice_ids", 0,
+ slice_ids);
+ Mat_VarSetStructFieldByName(st, "fundi", 0, fundi);
Mat_VarSetCell(*out, i++, st);
continue;
+ error_fundi:
+ Mat_VarFree(tomogram);
error_tomogram:
Mat_VarFree(id);
error_id: