@@ -22,13 +22,11 @@ Camera cam(himax);
22
22
OV7675 ov767x;
23
23
Camera cam (ov767x);
24
24
#define IMAGE_MODE CAMERA_RGB565
25
- #error "Unsupported camera (at the moment :) )"
26
25
#elif defined(ARDUCAM_CAMERA_GC2145)
27
26
#include " GC2145/gc2145.h"
28
27
GC2145 galaxyCore;
29
28
Camera cam (galaxyCore);
30
29
#define IMAGE_MODE CAMERA_RGB565
31
- #error "Unsupported camera (at the moment :) )"
32
30
#endif
33
31
34
32
// The buffer used to capture the frame
@@ -63,9 +61,11 @@ void setup() {
63
61
}
64
62
65
63
Display.begin ();
66
- dsi_configueCLUT ((uint32_t *)palette);
67
64
68
- outfb.setBuffer ((uint8_t *)SDRAM.malloc (1024 *1024 ));
65
+ if (IMAGE_MODE == CAMERA_GRAYSCALE) {
66
+ dsi_configueCLUT ((uint32_t *)palette);
67
+ }
68
+ outfb.setBuffer ((uint8_t *)SDRAM.malloc (1024 * 1024 ));
69
69
70
70
// clear the display (gives a nice black background)
71
71
dsi_lcdClear (0 );
@@ -74,6 +74,8 @@ void setup() {
74
74
dsi_drawCurrentFrameBuffer ();
75
75
}
76
76
77
+ #define HTONS (x ) (((x >> 8 ) & 0x00FF ) | ((x << 8 ) & 0xFF00 ))
78
+
77
79
void loop () {
78
80
79
81
// Grab frame and write to another framebuffer
@@ -83,13 +85,20 @@ void loop() {
83
85
// this only works if the camera feed is 320x240 and the area where we want to display is 640x480
84
86
for (int i = 0 ; i < 320 ; i++) {
85
87
for (int j = 0 ; j < 240 ; j++) {
86
- ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 ) * 480 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
87
- ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 ) * 480 + 1 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
88
- ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 + 1 ) * 480 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
89
- ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 + 1 ) * 480 + 1 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
88
+ if (IMAGE_MODE == CAMERA_GRAYSCALE) {
89
+ ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 ) * 480 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
90
+ ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 ) * 480 + 1 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
91
+ ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 + 1 ) * 480 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
92
+ ((uint8_t *)outfb.getBuffer ())[j * 2 + (i * 2 + 1 ) * 480 + 1 ] = ((uint8_t *)fb.getBuffer ())[i + j * 320 ];
93
+ } else {
94
+ ((uint16_t *)outfb.getBuffer ())[j * 2 + (i * 2 ) * 480 ] = HTONS (((uint16_t *)fb.getBuffer ())[i + j * 320 ]);
95
+ ((uint16_t *)outfb.getBuffer ())[j * 2 + (i * 2 ) * 480 + 1 ] = HTONS (((uint16_t *)fb.getBuffer ())[i + j * 320 ]);
96
+ ((uint16_t *)outfb.getBuffer ())[j * 2 + (i * 2 + 1 ) * 480 ] = HTONS (((uint16_t *)fb.getBuffer ())[i + j * 320 ]);
97
+ ((uint16_t *)outfb.getBuffer ())[j * 2 + (i * 2 + 1 ) * 480 + 1 ] = HTONS (((uint16_t *)fb.getBuffer ())[i + j * 320 ]);
98
+ }
90
99
}
91
100
}
92
- dsi_lcdDrawImage ((void *)outfb.getBuffer (), (void *)dsi_getCurrentFrameBuffer (), 480 , 640 , DMA2D_INPUT_L8);
101
+ dsi_lcdDrawImage ((void *)outfb.getBuffer (), (void *)dsi_getCurrentFrameBuffer (), 480 , 640 , IMAGE_MODE == CAMERA_GRAYSCALE ? DMA2D_INPUT_L8 : DMA2D_INPUT_RGB565 );
93
102
dsi_drawCurrentFrameBuffer ();
94
103
} else {
95
104
blinkLED (20 );
0 commit comments