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
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/
Diff: main.cpp
- Revision:
- 4:2bea25cf1883
- Parent:
- 3:1daadbe91b49
- Child:
- 5:f6df6a4c32a7
diff -r 1daadbe91b49 -r 2bea25cf1883 main.cpp --- 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;