This program plays QuickTime movies on GR-Peach

Dependencies:   AsciiFont GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP TLV320_RBSP mbed-rtos mbed

Requirements

  • GR-Peach
  • GR-Peach Audio Camera Shield or I²S compatible audio DAC
  • GR-Peach LCD Shield
  • USB memory stick

How to play movie files

  • Encode movie files

encode movies with ffmpeg

$ ffmpeg -i <input -ar 44100 -acodec pcm_s16le -s 480x270 -vcodec mjpeg -q:v 3 -movflags faststart -threads 4 -vf fps=30 <output>.mov
  • Copy movies to the root directory of USB memory
  • Build and upload this program
  • Run it

Files at this revision

API Documentation at this revision

Comitter:
mtkrtk
Date:
Sun Mar 12 02:01:46 2017 +0000
Parent:
0:d0f130e27d32
Commit message:
fixed lcd contrast pin

Changed in this revision

LCD.cpp Show annotated file Show diff for this revision Revisions of this file
LCD.hpp Show annotated file Show diff for this revision Revisions of this file
--- a/LCD.cpp	Fri Mar 10 11:30:02 2017 +0000
+++ b/LCD.cpp	Sun Mar 12 02:01:46 2017 +0000
@@ -1,126 +1,126 @@
-#include "LCD.hpp"
-#include "rtos.h"
-
-#define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB565)
-#define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32_16BIT)
-
-volatile int32_t LCD::vsync_count = 0;
-uint8_t LCD::user_frame_buffer1[];
-uint8_t LCD::user_frame_buffer2[];
-frame_buffer_t LCD::frame_buffer_info;
-LCD LCD::instance;
-
-void LCD::IntCallbackFunc_LoVsync(DisplayBase::int_type_t MBED_UNUSED int_type) {
-    /* Interrupt callback function for Vsync interruption */
-    if (vsync_count > 0) {
-        vsync_count--;
-    }
-}
-
-LCD::LCD() : lcd_pwon(P7_15), lcd_blon(P8_1), lcd_cntrst(P8_14), lcd_nctrst_dummy(P8_15)
-{
-}
-
-void LCD::start()
-{
-    DisplayBase::graphics_error_t error;
-    DisplayBase::lcd_config_t lcd_config;
-    PinName lvds_pin[8] = {
-        /* data pin */
-        P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
-    };
-    
-    lcd_pwon = 0;
-    lcd_blon = 0;
-    rtos::Thread::wait(100);
-    lcd_pwon = 1;
-    lcd_blon = 1;
-    
-    Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
-    
-    /* Graphics initialization process */
-    lcd_config = LcdCfgTbl_LCD_shield;
-    error = Display.Graphics_init(&lcd_config);
-    if (error != DisplayBase::GRAPHICS_OK) {
-        printf("Line %d, error %d\n", __LINE__, error);
-        mbed_die();
-    }
-    
-    /* Interrupt callback function setting (Vsync signal output from scaler 0) */
-    error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, LCD::IntCallbackFunc_LoVsync);
-    if (error != DisplayBase::GRAPHICS_OK) {
-        printf("Line %d, error %d\n", __LINE__, error);
-        mbed_die();
-    }
-    
-    memset(user_frame_buffer1, 0, sizeof(user_frame_buffer1));
-    memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
-    frame_buffer_info.buffer_address[0] = user_frame_buffer1;
-    frame_buffer_info.buffer_address[1] = user_frame_buffer2;
-    frame_buffer_info.buffer_count      = 2;
-    frame_buffer_info.show_buffer_index = 0;
-    frame_buffer_info.draw_buffer_index = 0;
-    frame_buffer_info.width             = LCD_PIXEL_WIDTH;
-    frame_buffer_info.byte_per_pixel    = FRAME_BUFFER_BYTE_PER_PIXEL;
-    frame_buffer_info.stride            = LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
-    frame_buffer_info.height            = LCD_PIXEL_HEIGHT;
-    frame_buffer_info.pixel_format      = PIXEL_FORMAT_RGB565;
-    
-    DisplayBase::rect_t rect;
-    
-    rect.vs = 0;
-    rect.vw = LCD_PIXEL_HEIGHT;
-    rect.hs = 0;
-    rect.hw = LCD_PIXEL_WIDTH;
-    Display.Graphics_Read_Setting(DisplayBase::GRAPHICS_LAYER_0, (void *)frame_buffer_info.buffer_address[0],
-                                  FRAME_BUFFER_STRIDE, GRAPHICS_FORMAT, WR_RD_WRSWA, &rect);
-    Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
-    
-    rtos::Thread::wait(200);
-    lcd_cntrst.period_us(491);
-    lcd_cntrst = 0.1;
-    
-    errnum_t err;
-    Canvas2D_ContextConfigClass config;
-    config.frame_buffer = &frame_buffer_info;
-    canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
-    err = R_OSPL_GetErrNum();
-    if (err != 0) {
-        printf("Line %d, error %d\n", __LINE__, err);
-        while (1);
-    }
-    
-    graphics = canvas2d.c_LanguageContext;
-}
-
-void LCD::stop()
-{
-    lcd_pwon = 0;
-    lcd_blon = 0;
-}
-
-void LCD::Wait_Vsync(const int32_t wait_count)
-{
-    /* Wait for the specified number of times Vsync occurs */
-    vsync_count = wait_count;
-    while (vsync_count > 0) {
-        /* Do nothing */
-    }
-}
-
-void LCD::Swap_FrameBuffer()
-{
-    if (frame_buffer_info.draw_buffer_index == 1) {
-        frame_buffer_info.draw_buffer_index = 0;
-    } else {
-        frame_buffer_info.draw_buffer_index = 1;
-    }
-}
-
-void LCD::Update_LCD_Display()
-{
-    Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
-                                 (void *)frame_buffer_info.buffer_address[frame_buffer_info.draw_buffer_index]);
-    Wait_Vsync(1);
-}
+#include "LCD.hpp"
+#include "rtos.h"
+
+#define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB565)
+#define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32_16BIT)
+
+volatile int32_t LCD::vsync_count = 0;
+uint8_t LCD::user_frame_buffer1[];
+uint8_t LCD::user_frame_buffer2[];
+frame_buffer_t LCD::frame_buffer_info;
+LCD LCD::instance;
+
+void LCD::IntCallbackFunc_LoVsync(DisplayBase::int_type_t MBED_UNUSED int_type) {
+    /* Interrupt callback function for Vsync interruption */
+    if (vsync_count > 0) {
+        vsync_count--;
+    }
+}
+
+LCD::LCD() : lcd_pwon(P7_15), lcd_blon(P8_1), lcd_cntrst(P8_15)
+{
+}
 
+void LCD::start()
+{
+    DisplayBase::graphics_error_t error;
+    DisplayBase::lcd_config_t lcd_config;
+    PinName lvds_pin[8] = {
+        /* data pin */
+        P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
+    };
+    
+    lcd_pwon = 0;
+    lcd_blon = 0;
+    rtos::Thread::wait(100);
+    lcd_pwon = 1;
+    lcd_blon = 1;
+    
+    Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
+    
+    /* Graphics initialization process */
+    lcd_config = LcdCfgTbl_LCD_shield;
+    error = Display.Graphics_init(&lcd_config);
+    if (error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        mbed_die();
+    }
+    
+    /* Interrupt callback function setting (Vsync signal output from scaler 0) */
+    error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, LCD::IntCallbackFunc_LoVsync);
+    if (error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        mbed_die();
+    }
+    
+    memset(user_frame_buffer1, 0, sizeof(user_frame_buffer1));
+    memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
+    frame_buffer_info.buffer_address[0] = user_frame_buffer1;
+    frame_buffer_info.buffer_address[1] = user_frame_buffer2;
+    frame_buffer_info.buffer_count      = 2;
+    frame_buffer_info.show_buffer_index = 0;
+    frame_buffer_info.draw_buffer_index = 0;
+    frame_buffer_info.width             = LCD_PIXEL_WIDTH;
+    frame_buffer_info.byte_per_pixel    = FRAME_BUFFER_BYTE_PER_PIXEL;
+    frame_buffer_info.stride            = LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
+    frame_buffer_info.height            = LCD_PIXEL_HEIGHT;
+    frame_buffer_info.pixel_format      = PIXEL_FORMAT_RGB565;
+    
+    DisplayBase::rect_t rect;
+    
+    rect.vs = 0;
+    rect.vw = LCD_PIXEL_HEIGHT;
+    rect.hs = 0;
+    rect.hw = LCD_PIXEL_WIDTH;
+    Display.Graphics_Read_Setting(DisplayBase::GRAPHICS_LAYER_0, (void *)frame_buffer_info.buffer_address[0],
+                                  FRAME_BUFFER_STRIDE, GRAPHICS_FORMAT, WR_RD_WRSWA, &rect);
+    Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
+    
+    rtos::Thread::wait(200);
+    lcd_cntrst.period_us(491);
+    lcd_cntrst = 0.1;
+    
+    errnum_t err;
+    Canvas2D_ContextConfigClass config;
+    config.frame_buffer = &frame_buffer_info;
+    canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
+    err = R_OSPL_GetErrNum();
+    if (err != 0) {
+        printf("Line %d, error %d\n", __LINE__, err);
+        while (1);
+    }
+    
+    graphics = canvas2d.c_LanguageContext;
+}
+
+void LCD::stop()
+{
+    lcd_pwon = 0;
+    lcd_blon = 0;
+}
+
+void LCD::Wait_Vsync(const int32_t wait_count)
+{
+    /* Wait for the specified number of times Vsync occurs */
+    vsync_count = wait_count;
+    while (vsync_count > 0) {
+        /* Do nothing */
+    }
+}
+
+void LCD::Swap_FrameBuffer()
+{
+    if (frame_buffer_info.draw_buffer_index == 1) {
+        frame_buffer_info.draw_buffer_index = 0;
+    } else {
+        frame_buffer_info.draw_buffer_index = 1;
+    }
+}
+
+void LCD::Update_LCD_Display()
+{
+    Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
+                                 (void *)frame_buffer_info.buffer_address[frame_buffer_info.draw_buffer_index]);
+    Wait_Vsync(1);
+}
+
--- a/LCD.hpp	Fri Mar 10 11:30:02 2017 +0000
+++ b/LCD.hpp	Sun Mar 12 02:01:46 2017 +0000
@@ -1,52 +1,51 @@
-#ifndef __LCD__
-#define __LCD__
-
-#include "mbed.h"
-#include "DisplayBace.h"
-#include "LCD_shield_config_4_3inch.h"
-#include "RGA.h"
-#include "CppStandardHelper.hpp"
-
-class LCD {
-    static constexpr int FRAME_BUFFER_BYTE_PER_PIXEL = 2;
-    static constexpr int FRAME_BUFFER_STRIDE = ((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u;
-    static volatile int32_t vsync_count;
-    static void IntCallbackFunc_LoVsync(DisplayBase::int_type_t int_type);
-    static frame_buffer_t frame_buffer_info;
-    static uint8_t MBED_ALIGN(32) user_frame_buffer1[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
-    static uint8_t MBED_ALIGN(32) user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
-    mbed::DigitalOut lcd_pwon;
-    mbed::DigitalOut lcd_blon;
-    mbed::PwmOut     lcd_cntrst;
-    mbed::DigitalIn  lcd_nctrst_dummy;
-    DisplayBase Display;
-    Canvas2D_ContextClass canvas2d;
-    graphics_t *graphics;
-    LCD();
-    static LCD instance;
-    void Wait_Vsync(const int32_t wait_count);
-    void Swap_FrameBuffer();
-    void Update_LCD_Display();
-    
-public:
-    static LCD *singleton() {
-        return &instance;
-    }
-    void start();
-    void stop();
-    void drawImage(const graphics_image_t *image, int_t minX, int_t minY) {
-//        Swap_FrameBuffer();
-        frame_buffer_info.draw_buffer_index ^= 1;
-        R_GRAPHICS_DrawImage(graphics, image, minX, minY);
-        R_GRAPHICS_Finish(graphics);
-        Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
-                                     (void *)frame_buffer_info.buffer_address[frame_buffer_info.draw_buffer_index]);
-//        Update_LCD_Display();
-    }
-    void drawImage(const graphics_image_t *image) {
-        drawImage(image, 0, 0);
-    }
-};
-
-#endif
+#ifndef __LCD__
+#define __LCD__
+
+#include "mbed.h"
+#include "DisplayBace.h"
+#include "LCD_shield_config_4_3inch.h"
+#include "RGA.h"
+#include "CppStandardHelper.hpp"
 
+class LCD {
+    static constexpr int FRAME_BUFFER_BYTE_PER_PIXEL = 2;
+    static constexpr int FRAME_BUFFER_STRIDE = ((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u;
+    static volatile int32_t vsync_count;
+    static void IntCallbackFunc_LoVsync(DisplayBase::int_type_t int_type);
+    static frame_buffer_t frame_buffer_info;
+    static uint8_t MBED_ALIGN(32) user_frame_buffer1[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
+    static uint8_t MBED_ALIGN(32) user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
+    mbed::DigitalOut lcd_pwon;
+    mbed::DigitalOut lcd_blon;
+    mbed::PwmOut     lcd_cntrst;
+    DisplayBase Display;
+    Canvas2D_ContextClass canvas2d;
+    graphics_t *graphics;
+    LCD();
+    static LCD instance;
+    void Wait_Vsync(const int32_t wait_count);
+    void Swap_FrameBuffer();
+    void Update_LCD_Display();
+    
+public:
+    static LCD *singleton() {
+        return &instance;
+    }
+    void start();
+    void stop();
+    void drawImage(const graphics_image_t *image, int_t minX, int_t minY) {
+//        Swap_FrameBuffer();
+        frame_buffer_info.draw_buffer_index ^= 1;
+        R_GRAPHICS_DrawImage(graphics, image, minX, minY);
+        R_GRAPHICS_Finish(graphics);
+        Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
+                                     (void *)frame_buffer_info.buffer_address[frame_buffer_info.draw_buffer_index]);
+//        Update_LCD_Display();
+    }
+    void drawImage(const graphics_image_t *image) {
+        drawImage(image, 0, 0);
+    }
+};
+
+#endif
+