-
Notifications
You must be signed in to change notification settings - Fork 94
/
Camera.h
96 lines (83 loc) · 2.67 KB
/
Camera.h
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
#ifndef __CAMERA_H
#define __CAMERA_H
#include <stdint.h>
#include <stdbool.h>
typedef enum {
PIXFORMAT_INVLAID = 0,
PIXFORMAT_BAYER, // RAW
PIXFORMAT_RGB565, // RGB565
PIXFORMAT_YUV422, // YUV422
PIXFORMAT_GRAYSCALE, // GRAYSCALE
PIXFORMAT_JPEG, // JPEG/COMPRESSED
} pixformat_t;
typedef enum {
FRAMESIZE_INVALID = 0,
// C/SIF Resolutions
FRAMESIZE_QQCIF, // 88x72
FRAMESIZE_QCIF, // 176x144
FRAMESIZE_CIF, // 352x288
FRAMESIZE_QQSIF, // 88x60
FRAMESIZE_QSIF, // 176x120
FRAMESIZE_SIF, // 352x240
// VGA Resolutions
FRAMESIZE_QQQQVGA, // 40x30
FRAMESIZE_QQQVGA, // 80x60
FRAMESIZE_QQVGA, // 160x120
FRAMESIZE_QVGA, // 320x240
FRAMESIZE_VGA, // 640x480
FRAMESIZE_HQQQVGA, // 60x40
FRAMESIZE_HQQVGA, // 120x80
FRAMESIZE_HQVGA, // 240x160
// FFT Resolutions
FRAMESIZE_64X32, // 64x32
FRAMESIZE_64X64, // 64x64
FRAMESIZE_128X64, // 128x64
FRAMESIZE_128X128, // 128x128
// Other
FRAMESIZE_LCD, // 128x160
FRAMESIZE_QQVGA2, // 128x160
FRAMESIZE_WVGA, // 720x480
FRAMESIZE_WVGA2, // 752x480
FRAMESIZE_SVGA, // 800x600
FRAMESIZE_SXGA, // 1280x1024
FRAMESIZE_UXGA, // 1600x1200
FRAMESIZE_CUSTOM,
} framesize_t;
class Camera{
public:
Camera(framesize_t frameSize, pixformat_t pixFormat);
Camera(int16_t width, uint16_t height, pixformat_t pixFormat);
~Camera();
virtual bool begin( ) = 0;
virtual void end() = 0;
// virtual bool reset() = 0;
// virtual bool setPixFormat(int pixFormat) = 0;
// virtual bool setFrameSize(int frameSize) = 0;
virtual bool run(bool run) = 0;
virtual int id() = 0;
/**
* @return pixels
* If pixels format is RGB565: return RGB565 pixels with every uint16_t one pixel, e.g. RED: 0xF800
*/
virtual uint8_t* snapshot() = 0;
/**
* @return pixels with RGB565 format, every uint16_t one pixel, e.g. RED: 0xF800, so two pixels: {0xF800, 0xF800}
*/
virtual uint16_t* getRGB565(){ return nullptr; };
/**
*
* @return pixels with RGB888 format, for n pixels: {{R0,R1,...,Rn-1,},{G0,G1,...,Gn-1},{B0,B1,...,Bn-1}}
* e.g. two RED pixel: {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}
*/
virtual uint8_t* getRGB888(){ return nullptr; };
virtual void setRotation(uint8_t rotation) = 0;
virtual void setInvert(bool invert) = 0;
virtual int width(){ return _width; }
virtual int height(){ return _height; }
protected:
pixformat_t _pixFormat;
framesize_t _frameSize;
int _width;
int _height;
};
#endif