likely.cpp
2.66 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <likely.h>
#include <likely/opencv.hpp>
#include "openbr/core/opencvutils.h"
#include "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)
/*!
* \ingroup formats
* \brief Likely matrix format
*
* www.liblikely.org
* \author Josh Klontz \cite jklontz
*/
class lmatFormat : public Format
{
Q_OBJECT
Template read() const
{
const likely_const_mat m = likely_read(qPrintable(file.name), likely_file_guess);
const Template result(likelyToOpenCVMat(m));
likely_release_mat(m);
return result;
}
void write(const Template &t) const
{
const likely_const_mat m = likelyFromOpenCVMat(t);
likely_write(m, qPrintable(file.name));
likely_release_mat(m);
}
};
BR_REGISTER(Format, lmatFormat)
/*!
* \ingroup formats
* \brief Likely matrix format
*
* www.liblikely.org
* \author Josh Klontz \cite jklontz
*/
class lmatGallery : public Gallery
{
Q_OBJECT
QList<cv::Mat> mats;
~lmatGallery()
{
const likely_const_mat m = likelyFromOpenCVMat(OpenCVUtils::toMatByRow(mats));
likely_write(m, qPrintable(file.name));
likely_release_mat(m);
}
TemplateList readBlock(bool *done)
{
*done = true;
qFatal("Not supported.");
}
void write(const Template &t)
{
mats.append(t);
}
};
BR_REGISTER(Gallery, lmatGallery)
} // namespace br
#include "likely.moc"