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:
- 6:3cb7758c3f17
- Parent:
- 5:f6df6a4c32a7
- Child:
- 7:2fb4359e5ea6
--- a/main.cpp Sun Sep 11 13:38:32 2016 +0000 +++ b/main.cpp Wed Sep 14 10:53:51 2016 +0000 @@ -1,5 +1,5 @@ #include "mbed.h" -#include "SDFileSystem.h" +#include "SDFileSystem_GR_PEACH.h" #include "FATFileSystem.h" #include "JPEG_Converter.h" #include "DisplayBace.h" @@ -7,7 +7,9 @@ DigitalOut led1(LED1); Serial pc(USBTX, USBRX); -SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd"); +// SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd"); +SDFileSystem_GR_PEACH sd( "sd" ); + FILE *rd_fp = NULL; FILE *wr_fp = NULL; long fsize = 0; @@ -167,7 +169,6 @@ printf("Line %d, error %d\n", __LINE__, error); mbed_die(); } - } else { ; } @@ -189,7 +190,6 @@ } } - /****** Video ******/ static void Init_Video(void) { DisplayBase::graphics_error_t error; @@ -282,12 +282,28 @@ } } +// キャッシュインバリデート関数を追加 +static void dcache_invalid(void * p_buf, uint32_t size){ + uint32_t start_addr = (uint32_t)p_buf & 0xFFFFFFE0; + uint32_t end_addr = (uint32_t)p_buf + size; + uint32_t addr; + + /* Data cache invalid */ + for (addr = start_addr; addr < end_addr; addr += 0x20) { + __v7_inv_dcache_mva((void *)addr); + } +} + /****** main ******/ int main(void) { JPEG_Converter decoder; JPEG_Converter::bitmap_buff_info_t aBitmapData; DisplayBase::graphics_error_t error; size_t EncodeSize; + + while( !sd.connected() ) { + Thread::wait(500); + } /* Initialization of LCD */ Init_LCD_Display(); /* When using LCD, please call before than Init_Video(). */ @@ -335,6 +351,7 @@ Thread::wait(200); lcd_cntrst.write(1.0); + dir = opendir( "/sd" ); for ( imgCnt=0; ; imgCnt++) { dp = readdir( dir ); @@ -353,12 +370,10 @@ #if 1 for ( vfield_count_0=0; vfield_count_0 == 0; ) { } + for ( vfield_count_1=0; vfield_count_1 == 0; ) { } - #if 1 - dcache_clean(user_frame_buffer0, sizeof(user_frame_buffer0)); - dcache_clean(user_frame_buffer1, sizeof(user_frame_buffer1)); Thread::wait(500); @@ -369,7 +384,8 @@ aBitmapData.buffer_address = (void *)user_frame_buffer0; pc.printf("File encode start\n"); // JPEG_Converter - + + dcache_invalid(user_frame_buffer1, sizeof(user_frame_buffer1)); if (decoder.encode(&aBitmapData, user_frame_buffer1, &EncodeSize) == JPEG_Converter::JPEG_CONV_OK) { pc.printf("File encode done %dbyte, %d\n", EncodeSize, imgCnt ); @@ -390,7 +406,7 @@ #endif Thread::wait(500); - NVIC_SystemReset(); + // NVIC_SystemReset(); /* Video write process start */ error = Display.Video_Start( DisplayBase::VIDEO_INPUT_CHANNEL_0 ); @@ -423,9 +439,14 @@ } } + sprintf( fname, "/sd/img_%04d.jpg", viewCnt++ ); if ( viewCnt >= imgCnt ) viewCnt = 0; pc.printf("File read start %s v=%d, i=%d\n", fname, viewCnt, imgCnt ); + + // dcache_invalid(user_frame_buffer1, sizeof(user_frame_buffer1)); + // dcache_invalid(user_frame_buffer0, sizeof(user_frame_buffer0)); + rd_fp = fopen( fname, "r" ); if (rd_fp == NULL ) { pc.printf("can't open the file\n" ); @@ -448,12 +469,13 @@ user_frame_buffer1[i] = (unsigned char)cc; } #else - size_t len = fread(user_frame_buffer1, sizeof(char), (LCD_PIXEL_WIDTH * LCD_PIXEL_HEIGHT * 4), rd_fp); + size_t len = fread(user_frame_buffer1, sizeof(char), sizeof(user_frame_buffer1), rd_fp); pc.printf( "len = %d\n", len ); #endif fclose(rd_fp); pc.printf("File read done\n"); + //YCbCr setting aBitmapData.width = LCD_PIXEL_WIDTH; aBitmapData.height = LCD_PIXEL_HEIGHT;