MY TRAIAL (1)

Dependencies:   FATFileSystem GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP mbed-rtos mbed

Fork of GR-PEACH_NTSC_in_2ch_MOD_try by Hirofumi Inomata

I put an OVERVIEW in the blow URL. https://developer.mbed.org/users/digiponta/notebook/my-trial-ar--vr-2-eyes-display-goes-by-a-gr-peach/

Revision:
4:2bea25cf1883
Parent:
3:1daadbe91b49
Child:
5:f6df6a4c32a7
--- a/main.cpp	Thu Sep 08 12:18:45 2016 +0000
+++ b/main.cpp	Sun Sep 11 06:58:40 2016 +0000
@@ -140,28 +140,44 @@
     Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
 }
 
-static volatile int32_t vfield_count_0 = 0;
-static volatile int32_t vfield_count_1 = 0;
+static volatile int32_t vfield_count_0 = 1;
+static volatile int32_t vfield_count_1 = 1;
 
 /** Video and Grapics (GRAPHICS_LAYER_0) parameter **/
 /* video input */
 #define VIDEO_INPUT_CH_0       (DisplayBase::VIDEO_INPUT_CHANNEL_0)
+#define VIDEO_INPUT_CH_1       (DisplayBase::VIDEO_INPUT_CHANNEL_1)
 #define VIDEO_INT_TYPE_0       (DisplayBase::INT_TYPE_S0_VFIELD)
-#define VIDEO_INPUT_CH_1       (DisplayBase::VIDEO_INPUT_CHANNEL_1)
 #define VIDEO_INT_TYPE_1       (DisplayBase::INT_TYPE_S1_VFIELD)
 
 static void IntCallbackFunc_Vfield_0(DisplayBase::int_type_t int_type) {
+    DisplayBase::graphics_error_t error;
+
     /* Interrupt callback function */
     if (vfield_count_0 == 0) {
         vfield_count_0 = 1;
+        error = Display.Video_Stop( DisplayBase::VIDEO_INPUT_CHANNEL_0 );
+        if (error != DisplayBase::GRAPHICS_OK) {
+            printf("Line %d, error %d\n", __LINE__, error);
+            mbed_die();
+        }
+
     } else {
         ;
     }
 }
+
 static void IntCallbackFunc_Vfield_1(DisplayBase::int_type_t int_type) {
+    DisplayBase::graphics_error_t error;
+
     /* Interrupt callback function */
     if (vfield_count_1 == 0) {
         vfield_count_1 = 1;
+        error = Display.Video_Stop( DisplayBase::VIDEO_INPUT_CHANNEL_1 );
+        if (error != DisplayBase::GRAPHICS_OK) {
+            printf("Line %d, error %d\n", __LINE__, error);
+            mbed_die();
+        }
     } else {
         ;
     }
@@ -262,6 +278,11 @@
 
 /****** main ******/
 int main(void) {
+    JPEG_Converter  decoder;
+    JPEG_Converter::bitmap_buff_info_t  aBitmapData;
+    DisplayBase::graphics_error_t error;
+    size_t EncodeSize;
+    
     /* Initialization of LCD */
     Init_LCD_Display();    /* When using LCD, please call before than Init_Video(). */
 
@@ -276,8 +297,10 @@
     }
 #else
     memset(user_frame_buffer0, 0, sizeof(user_frame_buffer0));
+    memset(user_frame_buffer1, 0, sizeof(user_frame_buffer1));
 #endif
     dcache_clean(user_frame_buffer0, sizeof(user_frame_buffer0));
+    dcache_clean(user_frame_buffer1, sizeof(user_frame_buffer1));
 
     /* Start of Video ch0 */
     Start_Video(
@@ -306,32 +329,33 @@
     Thread::wait(200);
     lcd_cntrst.write(1.0);
 
+    DIR *dir = opendir( "/sd/" );
+    for ( imgCnt=0; ; imgCnt++) {
+        struct dirent *dp;
+        dp = readdir( dir );
+        if ( dp == NULL) break;
+    }
+    closedir( dir );
+
     while (1) {
-        DisplayBase::graphics_error_t error;
 
         led_blue = !led_blue;
         Thread::wait(100);
 
         if ((mode == 0) && (prev_sw0 != 0) && (sw0 == 0)) 
         {
+            
 #if 1
-             /* Video write process stop */
-            error = Display.Video_Stop( DisplayBase::VIDEO_INPUT_CHANNEL_0 );
-            if (error != DisplayBase::GRAPHICS_OK) {
-                printf("Line %d, error %d\n", __LINE__, error);
-                mbed_die();
+            for ( vfield_count_0=0; vfield_count_0 == 0; ) {
+            }
+            for ( vfield_count_1=0; vfield_count_1 == 0; ) {
             }
-            error = Display.Video_Stop( DisplayBase::VIDEO_INPUT_CHANNEL_1 );
-            if (error != DisplayBase::GRAPHICS_OK) {
-                printf("Line %d, error %d\n", __LINE__, error);
-                mbed_die();
-            }
-            
-            
- #if 1
-            JPEG_Converter  decoder;
-            JPEG_Converter::bitmap_buff_info_t  aBitmapData;
-            size_t EncodeSize;
+          
+#if 1
+            dcache_clean(user_frame_buffer0, sizeof(user_frame_buffer0));
+            dcache_clean(user_frame_buffer1, sizeof(user_frame_buffer1));
+
+            Thread::wait(500);
            
             //YCbCr setting 
             aBitmapData.width           = LCD_PIXEL_WIDTH;
@@ -342,11 +366,15 @@
             // JPEG_Converter
 
             if (decoder.encode(&aBitmapData, user_frame_buffer1, &EncodeSize) == JPEG_Converter::JPEG_CONV_OK) {
-                pc.printf("File encode done %dbyte\n", EncodeSize);
+                pc.printf("File encode done %dbyte, %d\n", EncodeSize, imgCnt );
+                                
                 pc.printf("File write start\n");
                 sprintf( fname, "/sd/img_%04d.jpg", imgCnt++ );
                 FILE *wr_fp = fopen( fname, "w");
-                fwrite( user_frame_buffer1, sizeof(char), EncodeSize, wr_fp);
+                for( long i=0; i < EncodeSize;i++) {
+                    putc( user_frame_buffer1[i], wr_fp );
+                }
+                fflush(wr_fp);
                 fclose(wr_fp);
                 pc.printf("File write done\n");
                 led1 = 0;
@@ -354,9 +382,10 @@
                 pc.printf("Error:JCU encode error\n");
                 led1 = 0;
             }
- #endif
- 
-            Thread::wait(500);           
+#endif
+
+            Thread::wait(500); 
+            NVIC_SystemReset();          
         
             /* Video write process start */
             error = Display.Video_Start( DisplayBase::VIDEO_INPUT_CHANNEL_0 );
@@ -372,20 +401,16 @@
             }           
 #endif
         }
-        
+
         if (((mode == 0) || (mode == 1)) && (prev_sw2 != 0) && (sw2 == 0)) {
              if ( mode == 0 ){
                  
-                for( vfield_count_0=0; vfield_count_0 == 0; ) {
-                }
                  /* Video write process stop */
                 error = Display.Video_Stop( DisplayBase::VIDEO_INPUT_CHANNEL_0 );
                 if (error != DisplayBase::GRAPHICS_OK) {
                     printf("Line %d, error %d\n", __LINE__, error);
                     mbed_die();
                 }
-                for( vfield_count_1=0; vfield_count_1 == 0; ) {
-                }
                 error = Display.Video_Stop( DisplayBase::VIDEO_INPUT_CHANNEL_1 );
                 if (error != DisplayBase::GRAPHICS_OK) {
                     printf("Line %d, error %d\n", __LINE__, error);
@@ -395,21 +420,30 @@
             
             sprintf( fname, "/sd/img_%04d.jpg", viewCnt++ );
             if ( viewCnt >= imgCnt ) viewCnt = 0;
-            pc.printf("File write start\n");
+            pc.printf("File read start %s v=%d, i=%d\n", fname, viewCnt, imgCnt );
             FILE *rd_fp = fopen( fname, "r" );
-            for( long i=0; i < sizeof(user_frame_buffer1) ;i++) {
+            if (rd_fp == NULL) {
+                pc.printf("can't open the file\n" ); 
+                mode = 1;
+                continue;
+            }
+            size_t fsize = ftell( rd_fp );
+             if (fsize == 0) {
+                pc.printf("fsize = 0\n" ); 
+                mode = 1;
+                continue;                
+            }           
+            pc.printf("fsize=%d\n", fsize );
+            fseek( rd_fp, 0, SEEK_SET );
+            for( long i=0; i < fsize ;i++) {
                 char cc = getc( rd_fp );
-                if ( cc == EOF ) break;
+                // if ( cc == EOF ) break;
                 user_frame_buffer1[i] = (unsigned char)cc;
                 
             //  size_t len = fread(user_frame_buffer1, sizeof(char), (LCD_PIXEL_WIDTH * LCD_PIXEL_HEIGHT * 4), rd_fp);
             }
             fclose(rd_fp);
-            pc.printf("File write done\n");
-
-            JPEG_Converter  decoder;
-            JPEG_Converter::bitmap_buff_info_t  aBitmapData;
-//            size_t EncodeSize;
+            pc.printf("File read done\n");
 
              //YCbCr setting
             aBitmapData.width           = LCD_PIXEL_WIDTH;