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
Revision:
2:c7faef0ef374
Parent:
0:84e4649e7707
Child:
3:841987280a7f
--- a/rga_func.cpp	Wed Jan 20 02:35:42 2016 +0000
+++ b/rga_func.cpp	Thu Jan 21 10:10:19 2016 +0000
@@ -22,8 +22,10 @@
 #include "rga_func.h"
 #include "Images/BinaryImage_RZ_A1H.h"
 
-#define ZOOM_SRC_CENTER_X                   IMAGE_WIDTH_ZOOM_FUNC / 2
-#define ZOOM_SRC_CENTER_Y                   IMAGE_HEIGHT_ZOOM_FUNC / 2
+#define ZOOM_SRC_CENTER_X                   (IMAGE_WIDTH_ZOOM_FUNC / 2)
+#define ZOOM_SRC_CENTER_Y                   (IMAGE_HEIGHT_ZOOM_FUNC / 2)
+
+#define CRYSTAL_DIAMETER                    (93)
 
 Canvas2D_ContextClass canvas2d;
 
@@ -42,16 +44,10 @@
     }
 }
 
-void Get_AnimationTiming(char_t *timing_name) {
-    R_Get_AnimationTimingFunction(timing_name, &accelerator);
-}
+void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
+    /* Clear */
+    canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
 
-void RGA_Func_ClrScreen(frame_buffer_t* frmbuf_info) {
-    /* Clear the display in white */
-    canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
-}
-
-void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
     /* Draw a image */
     canvas2d.drawImage(TopScrn_jpg_File, 0, 0);
 
@@ -59,56 +55,54 @@
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
 
-void RGA_Func_DrawReturnButton(frame_buffer_t* frmbuf_info) {
-    /* Draw a image */
+void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info, draw_rectangle_pos_t * pos, int pos_num) {
+    int cnt;
+
+    /* Clear */
+    canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+    /* Draw description */
+    canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
+
+    /* Draw rectangle */
+    for (cnt = 0; cnt < pos_num; cnt++) {
+        canvas2d.fillStyle = pos->style;
+        canvas2d.fillRect(pos->x, pos->y, pos->w, pos->h);
+        pos++;
+    }
+
+    /* Draw return button */
     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
 
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
 
-void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info) {
+void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info, int x, int y) {
+    int draw_pos_x = x - (CRYSTAL_DIAMETER / 2);
+    int draw_pos_y = y - (CRYSTAL_DIAMETER / 2);
+
     /* Clear */
     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
-    /* Draw red rectangle */
-    canvas2d.fillStyle = "#FF0000";
-    canvas2d.fillRect(0, 0, 160, 240);
-    canvas2d.fillRect(160, 240, 160, 240);
-    /* Draw green rectangle */
-    canvas2d.fillStyle = "#00FF00";
-    canvas2d.fillRect(160, 0, 160, 240);
-    canvas2d.fillRect(320, 240, 160, 240);
-    /* Draw blue rectangle */
-    canvas2d.fillStyle = "#0000FF";
-    canvas2d.fillRect(320, 0, 160, 240);
-    canvas2d.fillRect(480, 240, 160, 240);
-    /* Draw black rectangle */
-    canvas2d.fillStyle = "#000000";
-    canvas2d.fillRect(480, 0, 160, 240);
-    canvas2d.fillRect(640, 240, 160, 240);
-    /* Draw write rectangle */
-    canvas2d.fillStyle = "#FFFFFF";
-    canvas2d.fillRect(640, 0, 160, 240);
-    canvas2d.fillRect(0, 240, 160, 240);
 
-    /* Complete drawing */
-    R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
-}
+    /* Draw description */
+    canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
 
-void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info) {
-    /* Clear */
-    canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
     /* Draw the first image */
     canvas2d.drawImage(Flower_jpg_File, 100, 100);
+
     /* Draw the second image */
     if ((frmbuf_info->pixel_format == PIXEL_FORMAT_ARGB8888) || (frmbuf_info->pixel_format == PIXEL_FORMAT_XRGB8888)) {
-        canvas2d.drawImage(Crystal_png_ARGB8888, 280, 70);
+        canvas2d.drawImage(Crystal_png_ARGB8888, draw_pos_x, draw_pos_y);
     } else if (frmbuf_info->pixel_format != PIXEL_FORMAT_YUV422) {
-        canvas2d.drawImage(Crystal_png_ARGB4444, 280, 70);
+        canvas2d.drawImage(Crystal_png_ARGB4444, draw_pos_x, draw_pos_y);
     } else {
-        canvas2d.drawImage(Crystal_png_File, 280, 70);
+        canvas2d.drawImage(Crystal_png_File, draw_pos_x, draw_pos_y);
     }
 
+    /* Draw return button */
+    canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
@@ -117,14 +111,23 @@
     /* Dissolve = Fade Out + Fade In */
     /* Clear */
     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+    /* Draw description */
+    canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
     /* fade Out */
     canvas2d.globalAlpha = 1.0f - global_alpha;
     canvas2d.drawImage(Flower_jpg_File, 100, 100);
+
     /* fade In */
     canvas2d.globalAlpha = global_alpha;
     canvas2d.drawImage(Landscape_jpg_File, 100, 100);
 
     canvas2d.globalAlpha = 1.0f;
+
+    /* Draw return button */
+    canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
@@ -132,11 +135,18 @@
 void RGA_Func_Scroll(frame_buffer_t* frmbuf_info, int src_width_pos) {
     /* Clear */
     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+    /* Draw description */
+    canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
     /* Scroll from left to right */
     canvas2d.drawImage(Landscape_wide_jpg_File,
                         /* src */       src_width_pos, 25, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT,
                         /* dst */       100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
 
+    /* Draw return button */
+    canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
@@ -144,6 +154,10 @@
 void RGA_Func_Zoom(frame_buffer_t* frmbuf_info, int src_height_pos) {
     /* Clear */
     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+    /* Draw description */
+    canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
     /* Zoom out */
     canvas2d.drawImage(Landscape_wide_jpg_File,
                         /* src X */     ZOOM_SRC_CENTER_X - (src_height_pos * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT),
@@ -152,6 +166,9 @@
                         /* src H */     src_height_pos * 2,
                         /* dst   */     100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
 
+    /* Draw return button */
+    canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
@@ -160,28 +177,86 @@
     /* Rotate the image to the right */
     /* Clear */
     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+    /* Draw description */
+    canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
     /* Move to drawing position */
     canvas2d.translate((100 + (IMG_DRAW_WIDTH / 2)), (100 + (IMG_DRAW_HEIGHT / 2)));
+
     /* Rotate */
     canvas2d.rotate(image_angle * (3.14159 / 180));
+
     /* Move to center to rotate */
     canvas2d.translate((-IMG_DRAW_WIDTH / 2), (-IMG_DRAW_HEIGHT / 2));
     canvas2d.drawImage(Flower_jpg_File, 0, 0);
     canvas2d.setTransform(1, 0, 0, 1, 0, 0);
 
+    /* Draw return button */
+    canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }
 
-void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, float32_t relative_pos) {
+void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, int animation_timing, float32_t relative_pos) {
     /* Do accelerated motion from right to left */
     int position;
 
     /* Clear */
     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+    if (relative_pos == 0.0f) {
+        switch (animation_timing) {
+            case ANIMATION_TIMING_EASE:
+                R_Get_AnimationTimingFunction("ease", &accelerator);
+                break;
+            case ANIMATION_TIMING_LINEAR:
+                R_Get_AnimationTimingFunction("linear", &accelerator);
+                break;
+            case ANIMATION_TIMING_EASE_IN:
+                R_Get_AnimationTimingFunction("ease-in", &accelerator);
+                break;
+            case ANIMATION_TIMING_EASE_OUT:
+                R_Get_AnimationTimingFunction("ease-out", &accelerator);
+                break;
+            case ANIMATION_TIMING_EASE_IN_OUT:
+            default:
+                R_Get_AnimationTimingFunction("ease-in-out", &accelerator);
+                break;
+        }
+    }
+
+    /* Draw rectangle */
+    canvas2d.fillStyle = "#0000FF";  /* blue */
+    switch (animation_timing) {
+        case ANIMATION_TIMING_EASE:
+            canvas2d.fillRect(17, 420, 136, 10);
+            break;
+        case ANIMATION_TIMING_LINEAR:
+            canvas2d.fillRect(173, 420, 136, 10);
+            break;
+        case ANIMATION_TIMING_EASE_IN:
+            canvas2d.fillRect(330, 420, 136, 10);
+            break;
+        case ANIMATION_TIMING_EASE_OUT:
+            canvas2d.fillRect(487, 420, 136, 10);
+            break;
+        case ANIMATION_TIMING_EASE_IN_OUT:
+        default:
+            canvas2d.fillRect(644, 420, 136, 10);
+            break;
+    }
+
+    /* Draw button */
+    canvas2d.drawImage(animetion_timing_jpg_File, 0, 370);
+
     position = R_ANIMATION_TIMING_FUNCTION_GetValue(accelerator, relative_pos, 550.0f, 10.0f);
     canvas2d.drawImage(Flower_jpg_File, position, 100);
 
+    /* Draw return button */
+    canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
     /* Complete drawing */
     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
 }