OV7670_with_AL422B Color & Size Test Program

Dependencies:   mbed

Revision:
4:2c412c97678c
Parent:
3:e23726af9d38
--- a/main.cpp	Sun Feb 17 12:42:55 2013 +0000
+++ b/main.cpp	Mon Feb 18 07:53:46 2013 +0000
@@ -1,4 +1,5 @@
 #define BITMAPFILE
+#undef BAYERBITMAPFILE
 #undef HEXFILE
 #undef COLORBAR
 
@@ -19,7 +20,8 @@
 int sizex = 0;
 int sizey = 0;
 
-#ifdef BITMAPFILE
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE)
+
 #define FILEHEADERSIZE 14                   //ファイルヘッダのサイズ
 #define INFOHEADERSIZE 40                   //情報ヘッダのサイズ
 #define HEADERSIZE (FILEHEADERSIZE+INFOHEADERSIZE)
@@ -92,38 +94,31 @@
 
     pc.printf("Before Init...\r\n");
     camera.PrintRegister();
-    
-    camera.InitForFIFOWriteReset();
 
     pc.printf("Select color format.\r\n") ;
     pc.printf("1: RGB444.\r\n");
     pc.printf("2: RGB555.\r\n");
     pc.printf("3: RGB565.\r\n");
     pc.printf("4: YUV(UYVY).\r\n");
-    pc.printf("5: Bayer RGB(GBGB... RGRG...).\r\n");
+    pc.printf("5: Bayer RGB(BGBG... GRGR...).\r\n");
 
     while(!pc.readable());
     char color_format = pc.getc();
     switch (color_format) {
         case '1':
             camera.InitRGB444();
-            camera.InitDefaultReg();
             break;
         case '2':
             camera.InitRGB555();
-            camera.InitDefaultReg();
             break;
         case '3':
             camera.InitRGB565();
-            camera.InitDefaultReg();
             break;
         case '4':
             camera.InitYUV();
-            camera.InitDefaultReg();
             break;
         case '5':
             camera.InitBayerRGB();
-            camera.InitDefaultReg();
             break;
     }
     pc.printf("select %c\r\n", color_format);
@@ -174,6 +169,9 @@
     }
     pc.printf("select %c\r\n", screen_size);
 
+    camera.InitForFIFOWriteReset();
+    camera.InitDefaultReg();
+
 #ifdef COLORBAR
     camera.InitSetColorbar();
 #endif
@@ -184,7 +182,7 @@
     // CAPTURE and SEND LOOP
     while(1)
     {
-#if defined(BITMAPFILE) || defined(HEXFILE)
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE) || defined(HEXFILE)
         pc.printf("Hit Any Key %dx%d Capture Data.\r\n", sizex, sizey) ;
         while(!pc.readable());
         pc.printf("*\r\n");
@@ -203,7 +201,7 @@
             bmp_line_data[i] = 0;
         }
 #endif
-#ifdef BITMAPFILE
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE)
         FILE *fp;
         char *filename = "/local/test.bmp";
         if((fp = fopen(filename, "wb")) == NULL){
@@ -267,33 +265,6 @@
                         // RGB
                         pc.printf ("%2X%2X%2X", r, g, b) ;
 */
-#ifdef COLOR_TRACKING
-                        int colorR = 210, colorG = 120, colorB = 120;
-                        int diffR, diffG, diffB;
-                        diffR = abs(colorR - r);
-                        diffG = abs(colorG - g);
-                        diffB = abs(colorB - b);
-                        if(diffR < 50 && diffG < 120 && diffB < 120) {
-                            target = 1;
-                            
-                            xmin = min(xmin, x);
-                            xmax = max(xmax, x);
-                            ymin = min(ymin, y);
-                            ymax = max(ymax, y);
-#endif
-
-#ifdef DISPLAY
-                            if( oled_x_start < x && x < oled_x_end && oled_y_start < y && y < oled_y_end) {
-                                oled_color = r;
-                                oled_color = (oled_color << 8) | g;
-                                oled_color = (oled_color << 8) | b;
-                                oled.pixel(x-oled_x_start, y-oled_y_start, oled_color);
-                            }
-#endif
-
-#ifdef COLOR_TRACKING
-                        }
-#endif
                     }
 #ifdef BITMAPFILE
                     fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp);
@@ -340,14 +311,6 @@
                         // RGB
                         pc.printf ("%2X%2X%2X", r, g, b) ;
 */
-#ifdef DISPLAY
-                        if( oled_x_start < x && x < oled_x_end && oled_y_start < y && y < oled_y_end) {
-                            oled_color = r;
-                            oled_color = (oled_color << 8) | g;
-                            oled_color = (oled_color << 8) | b;
-                            oled.pixel(x-oled_x_start, y-oled_y_start, oled_color);
-                        }
-#endif
                         index++;
                     }
 #ifdef BITMAPFILE
@@ -373,50 +336,65 @@
                 }
 
                 for (int x=0; x<sizex; x++) {
-                    // odd line GBGB... even line RGRG...
+                    // odd line BGBG... even line GRGR...
                     bayer_line_data[0][x] = (unsigned char)camera.ReadOneByte();
+#ifdef BAYERBITMAPFILE
+                    bmp_line_data[x*3]     = (unsigned char)bayer_line_data[0][x];
+                    bmp_line_data[x*3 + 1] = (unsigned char)bayer_line_data[0][x];
+                    bmp_line_data[x*3 + 2] = (unsigned char)bayer_line_data[0][x];
+#endif
                 }
+#ifdef BAYERBITMAPFILE
+                fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp);
+#endif
                 bayer_line[1] = bayer_line_data[0];
 
                 for (int y=1; y<sizey; y++) {
                     int line = y%2;
 
                     for (int x=0; x<sizex; x++) {
-                        // odd line GBGB... even line RGRG...
+                        // odd line BGBG... even line GRGR...
                         bayer_line_data[line][x] = (unsigned char)camera.ReadOneByte();
+#ifdef BAYERBITMAPFILE
+                        bmp_line_data[x*3]     = (unsigned char)bayer_line_data[line][x];
+                        bmp_line_data[x*3 + 1] = (unsigned char)bayer_line_data[line][x];
+                        bmp_line_data[x*3 + 2] = (unsigned char)bayer_line_data[line][x];
+#endif
                     }
-
+#ifdef BAYERBITMAPFILE
+                    fwrite(bmp_line_data, sizeof(unsigned char), real_width, fp);
+#endif
                     bayer_line[0] = bayer_line[1];
                     bayer_line[1] = bayer_line_data[line];
 
                     for (int x=0; x<sizex - 1; x++) {
                         if(y%2==1) {
                             if(x%2==0) {
-                                // GB
-                                // RG
-                                b = bayer_line[0][x+1];
-                                g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
-                                r = bayer_line[1][x];
-                            } else {
                                 // BG
                                 // GR
                                 b = bayer_line[0][x];
                                 g = ((int)bayer_line[0][x+1] + bayer_line[1][x])>>1;
                                 r = bayer_line[1][x+1];
+                            } else {
+                                // GB
+                                // RG
+                                b = bayer_line[0][x+1];
+                                g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
+                                r = bayer_line[1][x];
                             }
                         } else {
                             if(x%2==0) {
+                                // GR
+                                // BG
+                                b = bayer_line[1][x];
+                                g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
+                                r = bayer_line[0][x+1];
+                            } else {
                                 // RG
                                 // GB
                                 b = bayer_line[1][x+1];
                                 g = ((int)bayer_line[0][x+1] + bayer_line[1][x])>>1;
                                 r = bayer_line[0][x];
-                            } else {
-                                // GR
-                                // BG
-                                b = bayer_line[1][x];
-                                g = ((int)bayer_line[0][x] + bayer_line[1][x+1])>>1;
-                                r = bayer_line[0][x+1];
                             }
                         }
 #if defined(BITMAPFILE) || defined(HEXFILE)
@@ -447,7 +425,7 @@
         }
         camera.ReadStop();
 
-#ifdef BITMAPFILE
+#if defined(BITMAPFILE) || defined(BAYERBITMAPFILE)
         free(bmp_line_data);
         fclose(fp);
 #endif