@@ -22,13 +22,11 @@ Camera cam(himax);
2222OV7675 ov767x;
2323Camera cam (ov767x);
2424#define IMAGE_MODE CAMERA_RGB565
25- #error "Unsupported camera (at the moment :) )"
2625#elif defined(ARDUCAM_CAMERA_GC2145)
2726#include " GC2145/gc2145.h"
2827GC2145 galaxyCore;
2928Camera cam (galaxyCore);
3029#define IMAGE_MODE CAMERA_RGB565
31- #error "Unsupported camera (at the moment :) )"
3230#endif
3331
3432// The buffer used to capture the frame
@@ -63,9 +61,11 @@ void setup() {
6361 }
6462
6563 Display.begin ();
66- dsi_configueCLUT ((uint32_t *)palette);
6764
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 ));
6969
7070 // clear the display (gives a nice black background)
7171 dsi_lcdClear (0 );
@@ -74,6 +74,8 @@ void setup() {
7474 dsi_drawCurrentFrameBuffer ();
7575}
7676
77+ #define HTONS (x ) (((x >> 8 ) & 0x00FF ) | ((x << 8 ) & 0xFF00 ))
78+
7779void loop () {
7880
7981 // Grab frame and write to another framebuffer
@@ -83,13 +85,20 @@ void loop() {
8385 // this only works if the camera feed is 320x240 and the area where we want to display is 640x480
8486 for (int i = 0 ; i < 320 ; i++) {
8587 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+ }
9099 }
91100 }
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 );
93102 dsi_drawCurrentFrameBuffer ();
94103 } else {
95104 blinkLED (20 );
0 commit comments