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
MovPlayer.hpp@1:3e638b9e91cd, 2017-03-12 (annotated)
- Committer:
- mtkrtk
- Date:
- Sun Mar 12 02:01:46 2017 +0000
- Revision:
- 1:3e638b9e91cd
- Parent:
- 0:d0f130e27d32
fixed lcd contrast pin
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mtkrtk | 0:d0f130e27d32 | 1 | #ifndef __MovPlayer__ |
mtkrtk | 0:d0f130e27d32 | 2 | #define __MovPlayer__ |
mtkrtk | 0:d0f130e27d32 | 3 | |
mtkrtk | 0:d0f130e27d32 | 4 | #include "rtos.h" |
mtkrtk | 0:d0f130e27d32 | 5 | #include "LCD.hpp" |
mtkrtk | 0:d0f130e27d32 | 6 | #include "R_BSP_Ssif.h" |
mtkrtk | 0:d0f130e27d32 | 7 | #include "MovFile.hpp" |
mtkrtk | 0:d0f130e27d32 | 8 | #include "CppStandardHelper.hpp" |
mtkrtk | 0:d0f130e27d32 | 9 | |
mtkrtk | 0:d0f130e27d32 | 10 | class MovPlayer { |
mtkrtk | 0:d0f130e27d32 | 11 | public: |
mtkrtk | 0:d0f130e27d32 | 12 | static constexpr int BufferLength = 20; |
mtkrtk | 0:d0f130e27d32 | 13 | typedef mbed::Callback<int32_t (void * const, uint32_t, const rbsp_data_conf_t *)> AudioCallback; |
mtkrtk | 0:d0f130e27d32 | 14 | |
mtkrtk | 0:d0f130e27d32 | 15 | private: |
mtkrtk | 0:d0f130e27d32 | 16 | struct VideoBuffer { |
mtkrtk | 0:d0f130e27d32 | 17 | char MBED_ALIGN(0x20) buf[65535]; |
mtkrtk | 0:d0f130e27d32 | 18 | }; |
mtkrtk | 0:d0f130e27d32 | 19 | struct AudioBuffer { |
mtkrtk | 0:d0f130e27d32 | 20 | char MBED_ALIGN(4) buf[0x1B90]; |
mtkrtk | 0:d0f130e27d32 | 21 | uint32_t size; |
mtkrtk | 0:d0f130e27d32 | 22 | }; |
mtkrtk | 0:d0f130e27d32 | 23 | static VideoBuffer videoBuf[BufferLength]; |
mtkrtk | 0:d0f130e27d32 | 24 | static AudioBuffer __attribute__((section("NC_BSS"))) audioBuf[BufferLength]; |
mtkrtk | 0:d0f130e27d32 | 25 | static MovPlayer singleton; |
mtkrtk | 0:d0f130e27d32 | 26 | static unsigned char audioThreadStack[DEFAULT_STACK_SIZE]; |
mtkrtk | 0:d0f130e27d32 | 27 | rtos::Thread audioThread; |
mtkrtk | 0:d0f130e27d32 | 28 | rtos::RtosTimer frameTimer; |
mtkrtk | 0:d0f130e27d32 | 29 | rtos::Semaphore frameSemaphore; |
mtkrtk | 0:d0f130e27d32 | 30 | rtos::Queue<VideoBuffer, BufferLength - 2> videoQueue; |
mtkrtk | 0:d0f130e27d32 | 31 | MovFile *mov; |
mtkrtk | 0:d0f130e27d32 | 32 | AudioCallback output; |
mtkrtk | 0:d0f130e27d32 | 33 | volatile uint32_t queueTimeout; |
mtkrtk | 0:d0f130e27d32 | 34 | MovPlayer(); |
mtkrtk | 0:d0f130e27d32 | 35 | void frameTimerCallback(); |
mtkrtk | 0:d0f130e27d32 | 36 | void audioProcessor(); |
mtkrtk | 0:d0f130e27d32 | 37 | |
mtkrtk | 0:d0f130e27d32 | 38 | public: |
mtkrtk | 0:d0f130e27d32 | 39 | static MovPlayer *defaultPlayer() { |
mtkrtk | 0:d0f130e27d32 | 40 | return &singleton; |
mtkrtk | 0:d0f130e27d32 | 41 | } |
mtkrtk | 0:d0f130e27d32 | 42 | void play(MovFile *mov, LCD *lcd, AudioCallback callback); |
mtkrtk | 0:d0f130e27d32 | 43 | }; |
mtkrtk | 0:d0f130e27d32 | 44 | |
mtkrtk | 0:d0f130e27d32 | 45 | #endif |
mtkrtk | 0:d0f130e27d32 | 46 |