likely.cpp
1.38 KB
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
#include <openbr/plugins/openbr_internal.h>
namespace br
{
/*!
* \ingroup transforms
* \brief Generic interface to Likely JIT compiler
*
* www.liblikely.org
* \author Josh Klontz \cite jklontz
*/
class LikelyTransform : public UntrainableTransform
{
Q_OBJECT
Q_PROPERTY(QString kernel READ get_kernel WRITE set_kernel RESET reset_kernel STORED false)
BR_PROPERTY(QString, kernel, "")
likely_const_env env;
void *function;
~LikelyTransform()
{
likely_release_env(env);
}
void init()
{
likely_release_env(env);
const likely_ast ast = likely_lex_and_parse(qPrintable(kernel), likely_file_lisp);
const likely_const_env parent = likely_standard(NULL);
env = likely_eval(ast, parent, NULL, NULL);
likely_release_env(parent);
likely_release_ast(ast);
function = likely_compile(env->expr, NULL, 0);
}
void project(const Template &src, Template &dst) const
{
const likely_const_mat srcl = likelyFromOpenCVMat(src);
const likely_const_mat dstl = reinterpret_cast<likely_mat (*)(likely_const_mat)>(function)(srcl);
dst = likelyToOpenCVMat(dstl);
likely_release_mat(dstl);
likely_release_mat(srcl);
}
public:
LikelyTransform()
{
env = NULL;
}
};
BR_REGISTER(Transform, LikelyTransform)
} // namespace br
#include "core/likely.moc"