-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOV3660.cpp
More file actions
138 lines (119 loc) · 2.67 KB
/
Copy pathOV3660.cpp
File metadata and controls
138 lines (119 loc) · 2.67 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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include "OV3660.h"
esp_err_t OV3660::init(camera_config_t config) {
_cam_config = config;
esp_err_t err = esp_camera_init(&_cam_config);
if (err != ESP_OK) {
return err;
}
// 初始化后立即获取传感器并设置翻转
sensor_t *s = esp_camera_sensor_get();
if (s) {
s->set_hmirror(s, 1); // 水平翻转
s->set_vflip(s, 1); // 垂直翻转
}
return ESP_OK;
}
void OV3660::run(void) {
// 如果已经有帧,先返回给驱动
if (fb) {
esp_camera_fb_return(fb);
fb = NULL;
}
// 获取新帧
fb = esp_camera_fb_get();
}
void OV3660::returnFrame() {
if (fb) {
esp_camera_fb_return(fb);
fb = NULL;
}
}
size_t OV3660::getSize(void) {
runIfNeeded();
if (fb) {
return fb->len;
}
return 0;
}
uint8_t *OV3660::getfb(void) {
runIfNeeded();
if (fb) {
return fb->buf;
}
return NULL;
}
int OV3660::getWidth(void) {
runIfNeeded();
if (fb) {
return fb->width;
}
return 0;
}
int OV3660::getHeight(void) {
runIfNeeded();
if (fb) {
return fb->height;
}
return 0;
}
framesize_t OV3660::getFrameSize(void) {
return _cam_config.frame_size;
}
pixformat_t OV3660::getPixelFormat(void) {
return _cam_config.pixel_format;
}
void OV3660::setFrameSize(framesize_t size) {
_cam_config.frame_size = size;
sensor_t *s = esp_camera_sensor_get();
if (s) {
s->set_framesize(s, size);
}
}
void OV3660::setPixelFormat(pixformat_t format) {
_cam_config.pixel_format = format;
sensor_t *s = esp_camera_sensor_get();
if (s) {
s->set_pixformat(s, format);
}
}
// 添加的摄像头控制方法
bool OV3660::setHmirror(bool enable) {
sensor_t *s = esp_camera_sensor_get();
if (s) {
return s->set_hmirror(s, enable ? 1 : 0) == 0;
}
return false;
}
bool OV3660::setVflip(bool enable) {
sensor_t *s = esp_camera_sensor_get();
if (s) {
return s->set_vflip(s, enable ? 1 : 0) == 0;
}
return false;
}
bool OV3660::setSaturation(int saturation) {
sensor_t *s = esp_camera_sensor_get();
if (s) {
return s->set_saturation(s, saturation) == 0;
}
return false;
}
bool OV3660::setBrightness(int brightness) {
sensor_t *s = esp_camera_sensor_get();
if (s) {
return s->set_brightness(s, brightness) == 0;
}
return false;
}
bool OV3660::setContrast(int contrast) {
sensor_t *s = esp_camera_sensor_get();
if (s) {
return s->set_contrast(s, contrast) == 0;
}
return false;
}
void OV3660::runIfNeeded() {
if (!fb) {
fb = esp_camera_fb_get();
}
}