-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathtransform.cpp
More file actions
93 lines (74 loc) · 2.78 KB
/
transform.cpp
File metadata and controls
93 lines (74 loc) · 2.78 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
#include "transform.h"
#include <cstring>
extern "C" {
static inline libcamera::Transform to_cpp(libcamera_transform_t t) {
libcamera::Transform result;
std::memcpy(&result, &t, sizeof(result));
return result;
}
static inline libcamera_transform_t from_cpp(const libcamera::Transform &t) {
libcamera_transform_t result;
std::memcpy(&result, &t, sizeof(result));
return result;
}
libcamera_transform_t libcamera_transform_identity() {
return from_cpp(libcamera::Transform::Identity);
}
libcamera_transform_t libcamera_transform_from_rotation(int angle, bool hflip, bool *success) {
bool ok = false;
libcamera::Transform t = libcamera::transformFromRotation(angle, &ok);
if (!ok) {
if (success)
*success = false;
return from_cpp(libcamera::Transform::Identity);
}
if (hflip)
t = libcamera::Transform::HFlip * t;
if (success)
*success = ok;
return from_cpp(t);
}
libcamera_transform_t libcamera_transform_inverse(libcamera_transform_t transform) {
return from_cpp(-to_cpp(transform));
}
libcamera_transform_t libcamera_transform_combine(libcamera_transform_t a, libcamera_transform_t b) {
return from_cpp(to_cpp(a) * to_cpp(b));
}
char *libcamera_transform_to_string(libcamera_transform_t transform) {
return ::strdup(libcamera::transformToString(to_cpp(transform)));
}
libcamera_transform_t libcamera_transform_between_orientations(libcamera_orientation_t from, libcamera_orientation_t to) {
return from_cpp(from / to);
}
libcamera_orientation_t libcamera_transform_apply_orientation(libcamera_orientation_t orientation, libcamera_transform_t transform) {
return orientation * to_cpp(transform);
}
libcamera_orientation_t libcamera_orientation_from_rotation(int angle, bool *success) {
bool ok = false;
libcamera_orientation_t ori = libcamera::orientationFromRotation(angle, &ok);
if (success)
*success = ok;
return ori;
}
libcamera_transform_t libcamera_transform_hflip() {
return from_cpp(libcamera::Transform::HFlip);
}
libcamera_transform_t libcamera_transform_vflip() {
return from_cpp(libcamera::Transform::VFlip);
}
libcamera_transform_t libcamera_transform_transpose() {
return from_cpp(libcamera::Transform::Transpose);
}
libcamera_transform_t libcamera_transform_or(libcamera_transform_t a, libcamera_transform_t b) {
return from_cpp(to_cpp(a) | to_cpp(b));
}
libcamera_transform_t libcamera_transform_and(libcamera_transform_t a, libcamera_transform_t b) {
return from_cpp(to_cpp(a) & to_cpp(b));
}
libcamera_transform_t libcamera_transform_xor(libcamera_transform_t a, libcamera_transform_t b) {
return from_cpp(to_cpp(a) ^ to_cpp(b));
}
libcamera_transform_t libcamera_transform_not(libcamera_transform_t t) {
return from_cpp(~to_cpp(t));
}
}