Plays MJPEG Video using the RGA. THe RGA allows resize of the JPEG file.

Dependencies:   GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP SDBlockDevice_GR_PEACH TLV320_RBSP USBHost_custom

Fork of RGA_HelloWorld by Renesas

Overview

This demo shows how play a MJPEG and WAV file video using the RZA1 hardware RGA, JCU and SSIF. The JCU decodes each MJPEG frame. The SSIF plays the raw WAV file, and the RGA supplies the GUI and resize of the JPEG image.

MJPEG Creation

Requirements

Python Script

SD Card

  • Rename the jpg file to Renesas.jpg and audio file Renesas.wav
  • Download this image file and rename is Background.jpg /media/uploads/zkimike/background.jpg
Committer:
zkimike
Date:
Wed Jan 17 19:02:00 2018 +0000
Revision:
13:0a5bd13f6e7f
Parent:
12:9a413bec6673
Plays MJPEG Video on GR-PEACH

Who changed what in which revision?

UserRevisionLine numberNew contents of line
1050186 0:84e4649e7707 1 /*
1050186 0:84e4649e7707 2 Permission is hereby granted, free of charge, to any person obtaining a copy
1050186 0:84e4649e7707 3 of this software and associated documentation files (the "Software"), to deal
1050186 0:84e4649e7707 4 in the Software without restriction, including without limitation the rights
1050186 0:84e4649e7707 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1050186 0:84e4649e7707 6 copies of the Software, and to permit persons to whom the Software is
1050186 0:84e4649e7707 7 furnished to do so, subject to the following conditions:
1050186 0:84e4649e7707 8
1050186 0:84e4649e7707 9 The above copyright notice and this permission notice shall be included in
1050186 0:84e4649e7707 10 all copies or substantial portions of the Software.
1050186 0:84e4649e7707 11
1050186 0:84e4649e7707 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1050186 0:84e4649e7707 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1050186 0:84e4649e7707 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1050186 0:84e4649e7707 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1050186 0:84e4649e7707 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1050186 0:84e4649e7707 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1050186 0:84e4649e7707 18 THE SOFTWARE.
1050186 0:84e4649e7707 19 */
1050186 0:84e4649e7707 20
1050186 0:84e4649e7707 21 #include "mbed.h"
1050186 0:84e4649e7707 22 #include "rga_func.h"
1050186 0:84e4649e7707 23 #include "Images/BinaryImage_RZ_A1H.h"
1050186 0:84e4649e7707 24
zkimike 12:9a413bec6673 25
1050186 1:a07212e32dcb 26 #define ZOOM_SRC_CENTER_X (IMAGE_WIDTH_ZOOM_FUNC / 2)
1050186 1:a07212e32dcb 27 #define ZOOM_SRC_CENTER_Y (IMAGE_HEIGHT_ZOOM_FUNC / 2)
1050186 0:84e4649e7707 28
dkato 2:c7faef0ef374 29 #define CRYSTAL_DIAMETER (93)
1050186 0:84e4649e7707 30
zkimike 12:9a413bec6673 31 #define VIDEO_WIDTH (480u)
zkimike 12:9a413bec6673 32 #define VIDEO_HEIGHT (272u)
zkimike 12:9a413bec6673 33
1050186 0:84e4649e7707 34 Canvas2D_ContextClass canvas2d;
1050186 0:84e4649e7707 35
1050186 0:84e4649e7707 36 static animation_timing_function_t* accelerator;
1050186 0:84e4649e7707 37
1050186 0:84e4649e7707 38 void Set_RGAObject(frame_buffer_t* frmbuf_info) {
1050186 0:84e4649e7707 39 errnum_t err;
1050186 0:84e4649e7707 40 Canvas2D_ContextConfigClass config;
1050186 0:84e4649e7707 41
1050186 0:84e4649e7707 42 config.frame_buffer = frmbuf_info;
1050186 0:84e4649e7707 43 canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
1050186 0:84e4649e7707 44 err = R_OSPL_GetErrNum();
1050186 0:84e4649e7707 45 if (err != 0) {
1050186 0:84e4649e7707 46 printf("Line %d, error %d\n", __LINE__, err);
1050186 0:84e4649e7707 47 while (1);
1050186 0:84e4649e7707 48 }
1050186 0:84e4649e7707 49 }
1050186 0:84e4649e7707 50
dkato 2:c7faef0ef374 51 void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
dkato 2:c7faef0ef374 52 /* Clear */
dkato 2:c7faef0ef374 53 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
1050186 0:84e4649e7707 54
1050186 0:84e4649e7707 55 /* Draw a image */
1050186 0:84e4649e7707 56 canvas2d.drawImage(TopScrn_jpg_File, 0, 0);
1050186 0:84e4649e7707 57
1050186 0:84e4649e7707 58 /* Complete drawing */
1050186 0:84e4649e7707 59 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 60 }
1050186 0:84e4649e7707 61
dkato 2:c7faef0ef374 62 void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info, draw_rectangle_pos_t * pos, int pos_num) {
dkato 2:c7faef0ef374 63 int cnt;
dkato 2:c7faef0ef374 64
dkato 2:c7faef0ef374 65 /* Clear */
dkato 2:c7faef0ef374 66 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 2:c7faef0ef374 67
dkato 2:c7faef0ef374 68 /* Draw description */
dkato 2:c7faef0ef374 69 canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
dkato 2:c7faef0ef374 70
dkato 2:c7faef0ef374 71 /* Draw rectangle */
dkato 2:c7faef0ef374 72 for (cnt = 0; cnt < pos_num; cnt++) {
dkato 2:c7faef0ef374 73 canvas2d.fillStyle = pos->style;
dkato 2:c7faef0ef374 74 canvas2d.fillRect(pos->x, pos->y, pos->w, pos->h);
dkato 2:c7faef0ef374 75 pos++;
dkato 2:c7faef0ef374 76 }
dkato 2:c7faef0ef374 77
dkato 2:c7faef0ef374 78 /* Draw return button */
1050186 0:84e4649e7707 79 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
1050186 0:84e4649e7707 80
1050186 0:84e4649e7707 81 /* Complete drawing */
1050186 0:84e4649e7707 82 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 83 }
1050186 0:84e4649e7707 84
dkato 2:c7faef0ef374 85 void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info, int x, int y) {
dkato 2:c7faef0ef374 86 int draw_pos_x = x - (CRYSTAL_DIAMETER / 2);
dkato 2:c7faef0ef374 87 int draw_pos_y = y - (CRYSTAL_DIAMETER / 2);
dkato 2:c7faef0ef374 88
1050186 0:84e4649e7707 89 /* Clear */
1050186 0:84e4649e7707 90 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
1050186 0:84e4649e7707 91
dkato 2:c7faef0ef374 92 /* Draw description */
dkato 2:c7faef0ef374 93 canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
1050186 0:84e4649e7707 94
1050186 0:84e4649e7707 95 /* Draw the first image */
1050186 0:84e4649e7707 96 canvas2d.drawImage(Flower_jpg_File, 100, 100);
dkato 2:c7faef0ef374 97
1050186 0:84e4649e7707 98 /* Draw the second image */
1050186 0:84e4649e7707 99 if ((frmbuf_info->pixel_format == PIXEL_FORMAT_ARGB8888) || (frmbuf_info->pixel_format == PIXEL_FORMAT_XRGB8888)) {
dkato 2:c7faef0ef374 100 canvas2d.drawImage(Crystal_png_ARGB8888, draw_pos_x, draw_pos_y);
1050186 0:84e4649e7707 101 } else if (frmbuf_info->pixel_format != PIXEL_FORMAT_YUV422) {
dkato 2:c7faef0ef374 102 canvas2d.drawImage(Crystal_png_ARGB4444, draw_pos_x, draw_pos_y);
1050186 0:84e4649e7707 103 } else {
dkato 2:c7faef0ef374 104 canvas2d.drawImage(Crystal_png_File, draw_pos_x, draw_pos_y);
1050186 0:84e4649e7707 105 }
1050186 0:84e4649e7707 106
dkato 2:c7faef0ef374 107 /* Draw return button */
dkato 2:c7faef0ef374 108 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
dkato 2:c7faef0ef374 109
1050186 0:84e4649e7707 110 /* Complete drawing */
1050186 0:84e4649e7707 111 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 112 }
1050186 0:84e4649e7707 113
zkimike 12:9a413bec6673 114 void RGA_Func_VideoPlayer(frame_buffer_t* frmbuf_info, uint8_t *jpeg_buffer1, uint8_t *jpeg_buffer2) {
zkimike 12:9a413bec6673 115
zkimike 12:9a413bec6673 116 /* Clear */
zkimike 12:9a413bec6673 117 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
zkimike 12:9a413bec6673 118
zkimike 12:9a413bec6673 119 /* Draw Backgound */
zkimike 12:9a413bec6673 120 canvas2d.drawImage((graphics_image_t*)jpeg_buffer1, 0, 0);
zkimike 12:9a413bec6673 121
zkimike 12:9a413bec6673 122 /* Draw video */
zkimike 12:9a413bec6673 123 canvas2d.drawImage((graphics_image_t*)jpeg_buffer2, 30, 120, VIDEO_WIDTH, VIDEO_HEIGHT);
zkimike 12:9a413bec6673 124 //canvas2d.drawImage((graphics_image_t*)jpeg_buffer2, 30, 120 );
zkimike 12:9a413bec6673 125
zkimike 12:9a413bec6673 126
zkimike 12:9a413bec6673 127 /* Complete drawing */
zkimike 12:9a413bec6673 128 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
zkimike 12:9a413bec6673 129 }
1050186 0:84e4649e7707 130 void RGA_Func_Dissolve(frame_buffer_t* frmbuf_info, float32_t global_alpha) {
1050186 0:84e4649e7707 131 /* Dissolve = Fade Out + Fade In */
1050186 0:84e4649e7707 132 /* Clear */
1050186 0:84e4649e7707 133 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 2:c7faef0ef374 134
dkato 2:c7faef0ef374 135 /* Draw description */
dkato 2:c7faef0ef374 136 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
dkato 2:c7faef0ef374 137
1050186 0:84e4649e7707 138 /* fade Out */
1050186 0:84e4649e7707 139 canvas2d.globalAlpha = 1.0f - global_alpha;
1050186 0:84e4649e7707 140 canvas2d.drawImage(Flower_jpg_File, 100, 100);
dkato 2:c7faef0ef374 141
1050186 0:84e4649e7707 142 /* fade In */
1050186 0:84e4649e7707 143 canvas2d.globalAlpha = global_alpha;
1050186 0:84e4649e7707 144 canvas2d.drawImage(Landscape_jpg_File, 100, 100);
1050186 0:84e4649e7707 145
1050186 0:84e4649e7707 146 canvas2d.globalAlpha = 1.0f;
dkato 2:c7faef0ef374 147
dkato 2:c7faef0ef374 148 /* Draw return button */
dkato 2:c7faef0ef374 149 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
dkato 2:c7faef0ef374 150
1050186 0:84e4649e7707 151 /* Complete drawing */
1050186 0:84e4649e7707 152 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 153 }
1050186 0:84e4649e7707 154
1050186 0:84e4649e7707 155 void RGA_Func_Scroll(frame_buffer_t* frmbuf_info, int src_width_pos) {
1050186 0:84e4649e7707 156 /* Clear */
1050186 0:84e4649e7707 157 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 2:c7faef0ef374 158
dkato 2:c7faef0ef374 159 /* Draw description */
dkato 2:c7faef0ef374 160 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
dkato 2:c7faef0ef374 161
1050186 0:84e4649e7707 162 /* Scroll from left to right */
1050186 0:84e4649e7707 163 canvas2d.drawImage(Landscape_wide_jpg_File,
1050186 0:84e4649e7707 164 /* src */ src_width_pos, 25, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT,
1050186 0:84e4649e7707 165 /* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
1050186 0:84e4649e7707 166
dkato 2:c7faef0ef374 167 /* Draw return button */
dkato 2:c7faef0ef374 168 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
dkato 2:c7faef0ef374 169
1050186 0:84e4649e7707 170 /* Complete drawing */
1050186 0:84e4649e7707 171 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 172 }
1050186 0:84e4649e7707 173
1050186 0:84e4649e7707 174 void RGA_Func_Zoom(frame_buffer_t* frmbuf_info, int src_height_pos) {
1050186 0:84e4649e7707 175 /* Clear */
1050186 0:84e4649e7707 176 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 2:c7faef0ef374 177
dkato 2:c7faef0ef374 178 /* Draw description */
dkato 2:c7faef0ef374 179 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
dkato 2:c7faef0ef374 180
1050186 0:84e4649e7707 181 /* Zoom out */
1050186 0:84e4649e7707 182 canvas2d.drawImage(Landscape_wide_jpg_File,
1050186 0:84e4649e7707 183 /* src X */ ZOOM_SRC_CENTER_X - (src_height_pos * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT),
1050186 0:84e4649e7707 184 /* src Y */ ZOOM_SRC_CENTER_Y - src_height_pos,
1050186 0:84e4649e7707 185 /* src W */ src_height_pos * 2 * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT,
1050186 0:84e4649e7707 186 /* src H */ src_height_pos * 2,
1050186 0:84e4649e7707 187 /* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
1050186 0:84e4649e7707 188
dkato 2:c7faef0ef374 189 /* Draw return button */
dkato 2:c7faef0ef374 190 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
dkato 2:c7faef0ef374 191
1050186 0:84e4649e7707 192 /* Complete drawing */
1050186 0:84e4649e7707 193 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 194 }
1050186 0:84e4649e7707 195
1050186 0:84e4649e7707 196 void RGA_Func_Rotation(frame_buffer_t* frmbuf_info, graphics_matrix_float_t image_angle) {
1050186 0:84e4649e7707 197 /* Rotate the image to the right */
1050186 0:84e4649e7707 198 /* Clear */
1050186 0:84e4649e7707 199 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 2:c7faef0ef374 200
dkato 2:c7faef0ef374 201 /* Draw description */
dkato 2:c7faef0ef374 202 canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
dkato 2:c7faef0ef374 203
1050186 0:84e4649e7707 204 /* Move to drawing position */
1050186 0:84e4649e7707 205 canvas2d.translate((100 + (IMG_DRAW_WIDTH / 2)), (100 + (IMG_DRAW_HEIGHT / 2)));
dkato 2:c7faef0ef374 206
1050186 0:84e4649e7707 207 /* Rotate */
1050186 0:84e4649e7707 208 canvas2d.rotate(image_angle * (3.14159 / 180));
dkato 2:c7faef0ef374 209
1050186 0:84e4649e7707 210 /* Move to center to rotate */
1050186 0:84e4649e7707 211 canvas2d.translate((-IMG_DRAW_WIDTH / 2), (-IMG_DRAW_HEIGHT / 2));
1050186 0:84e4649e7707 212 canvas2d.drawImage(Flower_jpg_File, 0, 0);
1050186 0:84e4649e7707 213 canvas2d.setTransform(1, 0, 0, 1, 0, 0);
1050186 0:84e4649e7707 214
dkato 2:c7faef0ef374 215 /* Draw return button */
dkato 2:c7faef0ef374 216 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
dkato 2:c7faef0ef374 217
1050186 0:84e4649e7707 218 /* Complete drawing */
1050186 0:84e4649e7707 219 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 220 }
1050186 0:84e4649e7707 221
dkato 2:c7faef0ef374 222 void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, int animation_timing, float32_t relative_pos) {
1050186 0:84e4649e7707 223 /* Do accelerated motion from right to left */
1050186 0:84e4649e7707 224 int position;
1050186 0:84e4649e7707 225
1050186 0:84e4649e7707 226 /* Clear */
1050186 0:84e4649e7707 227 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 2:c7faef0ef374 228
dkato 2:c7faef0ef374 229 if (relative_pos == 0.0f) {
dkato 2:c7faef0ef374 230 switch (animation_timing) {
dkato 2:c7faef0ef374 231 case ANIMATION_TIMING_EASE:
dkato 2:c7faef0ef374 232 R_Get_AnimationTimingFunction("ease", &accelerator);
dkato 2:c7faef0ef374 233 break;
dkato 2:c7faef0ef374 234 case ANIMATION_TIMING_LINEAR:
dkato 2:c7faef0ef374 235 R_Get_AnimationTimingFunction("linear", &accelerator);
dkato 2:c7faef0ef374 236 break;
dkato 2:c7faef0ef374 237 case ANIMATION_TIMING_EASE_IN:
dkato 2:c7faef0ef374 238 R_Get_AnimationTimingFunction("ease-in", &accelerator);
dkato 2:c7faef0ef374 239 break;
dkato 2:c7faef0ef374 240 case ANIMATION_TIMING_EASE_OUT:
dkato 2:c7faef0ef374 241 R_Get_AnimationTimingFunction("ease-out", &accelerator);
dkato 2:c7faef0ef374 242 break;
dkato 2:c7faef0ef374 243 case ANIMATION_TIMING_EASE_IN_OUT:
dkato 2:c7faef0ef374 244 default:
dkato 2:c7faef0ef374 245 R_Get_AnimationTimingFunction("ease-in-out", &accelerator);
dkato 2:c7faef0ef374 246 break;
dkato 2:c7faef0ef374 247 }
dkato 2:c7faef0ef374 248 }
dkato 2:c7faef0ef374 249
dkato 2:c7faef0ef374 250 /* Draw rectangle */
dkato 2:c7faef0ef374 251 canvas2d.fillStyle = "#0000FF"; /* blue */
dkato 2:c7faef0ef374 252 switch (animation_timing) {
dkato 2:c7faef0ef374 253 case ANIMATION_TIMING_EASE:
dkato 2:c7faef0ef374 254 canvas2d.fillRect(17, 420, 136, 10);
dkato 2:c7faef0ef374 255 break;
dkato 2:c7faef0ef374 256 case ANIMATION_TIMING_LINEAR:
dkato 2:c7faef0ef374 257 canvas2d.fillRect(173, 420, 136, 10);
dkato 2:c7faef0ef374 258 break;
dkato 2:c7faef0ef374 259 case ANIMATION_TIMING_EASE_IN:
dkato 2:c7faef0ef374 260 canvas2d.fillRect(330, 420, 136, 10);
dkato 2:c7faef0ef374 261 break;
dkato 2:c7faef0ef374 262 case ANIMATION_TIMING_EASE_OUT:
dkato 2:c7faef0ef374 263 canvas2d.fillRect(487, 420, 136, 10);
dkato 2:c7faef0ef374 264 break;
dkato 2:c7faef0ef374 265 case ANIMATION_TIMING_EASE_IN_OUT:
dkato 2:c7faef0ef374 266 default:
dkato 2:c7faef0ef374 267 canvas2d.fillRect(644, 420, 136, 10);
dkato 2:c7faef0ef374 268 break;
dkato 2:c7faef0ef374 269 }
dkato 2:c7faef0ef374 270
dkato 2:c7faef0ef374 271 /* Draw button */
dkato 2:c7faef0ef374 272 canvas2d.drawImage(animetion_timing_jpg_File, 0, 370);
dkato 2:c7faef0ef374 273
1050186 0:84e4649e7707 274 position = R_ANIMATION_TIMING_FUNCTION_GetValue(accelerator, relative_pos, 550.0f, 10.0f);
1050186 0:84e4649e7707 275 canvas2d.drawImage(Flower_jpg_File, position, 100);
1050186 0:84e4649e7707 276
dkato 2:c7faef0ef374 277 /* Draw return button */
dkato 2:c7faef0ef374 278 canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
dkato 2:c7faef0ef374 279
1050186 0:84e4649e7707 280 /* Complete drawing */
1050186 0:84e4649e7707 281 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
1050186 0:84e4649e7707 282 }