|
Packit Service |
48484a |
#include <glib.h>
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#include <clocale>
|
|
Packit Service |
48484a |
#include <vector>
|
|
Packit Service |
48484a |
#include <string>
|
|
Packit Service |
48484a |
#include <map>
|
|
Packit Service |
48484a |
#include <limits>
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#include <cstdlib>
|
|
Packit Service |
48484a |
#include <cstdio>
|
|
Packit Service |
48484a |
#include <cmath>
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#include "lensfun.h"
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__)
|
|
Packit Service |
48484a |
#include <malloc.h>
|
|
Packit Service |
48484a |
#endif
|
|
Packit Service |
48484a |
#ifdef __APPLE__
|
|
Packit Service |
48484a |
#include <sys/malloc.h>
|
|
Packit Service |
48484a |
#endif
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#include "common_code.hpp"
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
typedef struct
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
void *coordBuff;
|
|
Packit Service |
48484a |
size_t img_width, img_height;
|
|
Packit Service |
48484a |
lfLens *lens;
|
|
Packit Service |
48484a |
lfModifier *mod;
|
|
Packit Service |
48484a |
} lfFixture;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
typedef struct
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
bool reverse;
|
|
Packit Service |
48484a |
gchar *sourceType;
|
|
Packit Service |
48484a |
lfLensType sourceLensType;
|
|
Packit Service |
48484a |
gchar *targetType;
|
|
Packit Service |
48484a |
lfLensType targetLensType;
|
|
Packit Service |
48484a |
size_t alignment;
|
|
Packit Service |
48484a |
} lfTestParams;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
// setup a standard lens
|
|
Packit Service |
48484a |
void mod_setup(lfFixture *lfFix, gconstpointer data)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
lfTestParams *p = (lfTestParams *)data;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
lfFix->lens = new lfLens();
|
|
Packit Service |
48484a |
lfFix->lens->CropFactor = 1.0f;
|
|
Packit Service |
48484a |
lfFix->lens->Type = p->sourceLensType;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
lfFix->img_height = 300;
|
|
Packit Service |
48484a |
lfFix->img_width = 300;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
lfFix->mod = lfModifier::Create(lfFix->lens, 1.0f, lfFix->img_width, lfFix->img_height);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
lfFix->mod->Initialize(
|
|
Packit Service |
48484a |
lfFix->lens, LF_PF_F32,
|
|
Packit Service |
48484a |
24.0f, 2.8f, 1000.0f, 1.0f, p->targetLensType,
|
|
Packit Service |
48484a |
LF_MODIFY_GEOMETRY, p->reverse);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
lfFix->coordBuff = NULL;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
const size_t bufsize = 2 * lfFix->img_width * lfFix->img_height * sizeof(float);
|
|
Packit Service |
48484a |
if(p->alignment == 0)
|
|
Packit Service |
48484a |
lfFix->coordBuff = g_malloc(bufsize);
|
|
Packit Service |
48484a |
else
|
|
Packit Service |
48484a |
lfFix->coordBuff = lf_alloc_align(p->alignment, bufsize);
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
void mod_teardown(lfFixture *lfFix, gconstpointer data)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
lfTestParams *p = (lfTestParams *)data;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
if(p->alignment == 0)
|
|
Packit Service |
48484a |
g_free(lfFix->coordBuff);
|
|
Packit Service |
48484a |
else
|
|
Packit Service |
48484a |
lf_free_align(lfFix->coordBuff);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
lfFix->mod->Destroy();
|
|
Packit Service |
48484a |
delete lfFix->lens;
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
void test_mod_coord_geometry(lfFixture *lfFix, gconstpointer data)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
for(size_t y = 0; y < lfFix->img_height; y++)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
float *coordData = (float *)lfFix->coordBuff + (size_t)2 * y * lfFix->img_width;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
g_assert_true(
|
|
Packit Service |
48484a |
lfFix->mod->ApplyGeometryDistortion(0.0, y, lfFix->img_width, 1, coordData)
|
|
Packit Service |
48484a |
);
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#ifdef _OPENMP
|
|
Packit Service |
48484a |
void test_mod_coord_geometry_parallel(lfFixture *lfFix, gconstpointer data)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
#pragma omp parallel for schedule(static)
|
|
Packit Service |
48484a |
for(size_t y = 0; y < lfFix->img_height; y++)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
float *coordData = (float *)lfFix->coordBuff + (size_t)2 * y * lfFix->img_width;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
g_assert_true(
|
|
Packit Service |
48484a |
lfFix->mod->ApplyGeometryDistortion(0.0, y, lfFix->img_width, 1, coordData)
|
|
Packit Service |
48484a |
);
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
#endif
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
gchar *describe(lfTestParams *p, const char *prefix)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
gchar alignment[32] = "";
|
|
Packit Service |
48484a |
g_snprintf(alignment, sizeof(alignment), "%lu-byte", p->alignment);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
return g_strdup_printf(
|
|
Packit Service |
48484a |
"/%s/%s/%s/%s/%s",
|
|
Packit Service |
48484a |
prefix,
|
|
Packit Service |
48484a |
p->reverse ? "unGeom" : "Geom",
|
|
Packit Service |
48484a |
p->sourceType,
|
|
Packit Service |
48484a |
p->targetType,
|
|
Packit Service |
48484a |
p->alignment == 0 ? "unaligned" : alignment
|
|
Packit Service |
48484a |
);
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
void add_set_item(lfTestParams *p)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
gchar *desc = NULL;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
desc = describe(p, "modifier/coord/serialFor");
|
|
Packit Service |
48484a |
g_test_add(desc, lfFixture, p, mod_setup, test_mod_coord_geometry, mod_teardown);
|
|
Packit Service |
48484a |
g_free(desc);
|
|
Packit Service |
48484a |
desc = NULL;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
#ifdef _OPENMP
|
|
Packit Service |
48484a |
desc = describe(p, "modifier/coord/parallelFor");
|
|
Packit Service |
48484a |
g_test_add(desc, lfFixture, p, mod_setup, test_mod_coord_geometry_parallel, mod_teardown);
|
|
Packit Service |
48484a |
g_free(desc);
|
|
Packit Service |
48484a |
desc = NULL;
|
|
Packit Service |
48484a |
#endif
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
void free_params(gpointer mem)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
lfTestParams *p = (lfTestParams *)mem;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
g_free(p->sourceType);
|
|
Packit Service |
48484a |
g_free(p->targetType);
|
|
Packit Service |
48484a |
g_free(mem);
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
int main(int argc, char **argv)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
setlocale(LC_ALL, "");
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
g_test_init(&argc, &argv, NULL);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
GSList *slist = NULL;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
std::vector<bool> reverse;
|
|
Packit Service |
48484a |
reverse.push_back(false);
|
|
Packit Service |
48484a |
reverse.push_back(true);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
for(std::vector<bool>::iterator it_reverse = reverse.begin(); it_reverse != reverse.end(); ++it_reverse)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
std::map<std::string, lfLensType> lensType;
|
|
Packit Service |
48484a |
lensType["LF_RECTILINEAR"] = LF_RECTILINEAR;
|
|
Packit Service |
48484a |
lensType["LF_FISHEYE"] = LF_FISHEYE;
|
|
Packit Service |
48484a |
lensType["LF_PANORAMIC"] = LF_PANORAMIC;
|
|
Packit Service |
48484a |
lensType["LF_EQUIRECTANGULAR"] = LF_EQUIRECTANGULAR;
|
|
Packit Service |
48484a |
lensType["LF_FISHEYE_ORTHOGRAPHIC"] = LF_FISHEYE_ORTHOGRAPHIC;
|
|
Packit Service |
48484a |
lensType["LF_FISHEYE_STEREOGRAPHIC"] = LF_FISHEYE_STEREOGRAPHIC;
|
|
Packit Service |
48484a |
lensType["LF_FISHEYE_EQUISOLID"] = LF_FISHEYE_EQUISOLID;
|
|
Packit Service |
48484a |
lensType["LF_FISHEYE_THOBY"] = LF_FISHEYE_THOBY;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
for(std::map<std::string, lfLensType>::iterator it_sourceType = lensType.begin(); it_sourceType != lensType.end(); ++it_sourceType)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
for(std::map<std::string, lfLensType>::iterator it_targetType = lensType.begin(); it_targetType != lensType.end(); ++it_targetType)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
if(it_sourceType->second == it_targetType->second)
|
|
Packit Service |
48484a |
continue;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
std::vector<size_t> align;
|
|
Packit Service |
48484a |
align.push_back(0);
|
|
Packit Service |
48484a |
align.push_back(4 * sizeof(float)); // SSE
|
|
Packit Service |
48484a |
//align.push_back(8 * sizeof(float)); // AVX
|
|
Packit Service |
48484a |
//align.push_back(16 * sizeof(float)); // AVX512
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
for(std::vector<size_t>::iterator it_align = align.begin(); it_align != align.end(); ++it_align)
|
|
Packit Service |
48484a |
{
|
|
Packit Service |
48484a |
lfTestParams *p = (lfTestParams *)g_malloc(sizeof(lfTestParams));
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
p->reverse = *it_reverse;
|
|
Packit Service |
48484a |
p->sourceType = g_strdup(it_sourceType->first.c_str());
|
|
Packit Service |
48484a |
p->sourceLensType = it_sourceType->second;
|
|
Packit Service |
48484a |
p->targetType = g_strdup(it_targetType->first.c_str());
|
|
Packit Service |
48484a |
p->targetLensType = it_targetType->second;
|
|
Packit Service |
48484a |
p->alignment = *it_align;
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
add_set_item(p);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
slist = g_slist_append(slist, p);
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
}
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
const int res = g_test_run();
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
g_slist_free_full(slist, (GDestroyNotify)free_params);
|
|
Packit Service |
48484a |
|
|
Packit Service |
48484a |
return res;
|
|
Packit Service |
48484a |
}
|