michael kosinski / Mbed OS RGA-MJPEG_VideoDemo

Dependencies:   GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP SDBlockDevice_GR_PEACH TLV320_RBSP USBHost_custom

Fork of RGA_HelloWorld by Renesas

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers rga_func.cpp Source File

rga_func.cpp

00001 /*
00002 Permission is hereby granted, free of charge, to any person obtaining a copy
00003 of this software and associated documentation files (the "Software"), to deal
00004 in the Software without restriction, including without limitation the rights
00005 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00006 copies of the Software, and to permit persons to whom the Software is
00007 furnished to do so, subject to the following conditions:
00008 
00009 The above copyright notice and this permission notice shall be included in
00010 all copies or substantial portions of the Software.
00011 
00012 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00013 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00014 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00015 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00016 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00017 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00018 THE SOFTWARE.
00019 */
00020 
00021 #include "mbed.h"
00022 #include "rga_func.h"
00023 #include "Images/BinaryImage_RZ_A1H.h"
00024 
00025 
00026 #define ZOOM_SRC_CENTER_X                   (IMAGE_WIDTH_ZOOM_FUNC / 2)
00027 #define ZOOM_SRC_CENTER_Y                   (IMAGE_HEIGHT_ZOOM_FUNC / 2)
00028 
00029 #define CRYSTAL_DIAMETER                    (93)
00030 
00031 #define VIDEO_WIDTH                        (480u)
00032 #define VIDEO_HEIGHT                       (272u)
00033 
00034 Canvas2D_ContextClass canvas2d;
00035 
00036 static animation_timing_function_t* accelerator;
00037 
00038 void Set_RGAObject(frame_buffer_t* frmbuf_info) {
00039     errnum_t err;
00040     Canvas2D_ContextConfigClass config;
00041 
00042     config.frame_buffer = frmbuf_info;
00043     canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
00044     err = R_OSPL_GetErrNum();
00045     if (err != 0) {
00046         printf("Line %d, error %d\n", __LINE__, err);
00047         while (1);
00048     }
00049 }
00050 
00051 void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
00052     /* Clear */
00053     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00054 
00055     /* Draw a image */
00056     canvas2d.drawImage(TopScrn_jpg_File, 0, 0);
00057 
00058     /* Complete drawing */
00059     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00060 }
00061 
00062 void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info, draw_rectangle_pos_t * pos, int pos_num) {
00063     int cnt;
00064 
00065     /* Clear */
00066     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00067 
00068     /* Draw description */
00069     canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
00070 
00071     /* Draw rectangle */
00072     for (cnt = 0; cnt < pos_num; cnt++) {
00073         canvas2d.fillStyle = pos->style;
00074         canvas2d.fillRect(pos->x, pos->y, pos->w, pos->h);
00075         pos++;
00076     }
00077 
00078     /* Draw return button */
00079     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00080 
00081     /* Complete drawing */
00082     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00083 }
00084 
00085 void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info, int x, int y) {
00086     int draw_pos_x = x - (CRYSTAL_DIAMETER / 2);
00087     int draw_pos_y = y - (CRYSTAL_DIAMETER / 2);
00088 
00089     /* Clear */
00090     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00091 
00092     /* Draw description */
00093     canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
00094 
00095     /* Draw the first image */
00096     canvas2d.drawImage(Flower_jpg_File, 100, 100);
00097 
00098     /* Draw the second image */
00099     if ((frmbuf_info->pixel_format == PIXEL_FORMAT_ARGB8888) || (frmbuf_info->pixel_format == PIXEL_FORMAT_XRGB8888)) {
00100         canvas2d.drawImage(Crystal_png_ARGB8888, draw_pos_x, draw_pos_y);
00101     } else if (frmbuf_info->pixel_format != PIXEL_FORMAT_YUV422) {
00102         canvas2d.drawImage(Crystal_png_ARGB4444, draw_pos_x, draw_pos_y);
00103     } else {
00104         canvas2d.drawImage(Crystal_png_File, draw_pos_x, draw_pos_y);
00105     }
00106 
00107     /* Draw return button */
00108     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00109 
00110     /* Complete drawing */
00111     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00112 }
00113 
00114 void RGA_Func_VideoPlayer(frame_buffer_t* frmbuf_info, uint8_t *jpeg_buffer1, uint8_t *jpeg_buffer2) {
00115     
00116     /* Clear */
00117     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00118     
00119     /* Draw Backgound */
00120     canvas2d.drawImage((graphics_image_t*)jpeg_buffer1, 0, 0);
00121 
00122     /* Draw video */
00123     canvas2d.drawImage((graphics_image_t*)jpeg_buffer2, 30, 120, VIDEO_WIDTH, VIDEO_HEIGHT);
00124     //canvas2d.drawImage((graphics_image_t*)jpeg_buffer2, 30, 120 );
00125 
00126     
00127     /* Complete drawing */
00128     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00129 }
00130 void RGA_Func_Dissolve(frame_buffer_t* frmbuf_info, float32_t global_alpha) {
00131     /* Dissolve = Fade Out + Fade In */
00132     /* Clear */
00133     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00134 
00135     /* Draw description */
00136     canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
00137 
00138     /* fade Out */
00139     canvas2d.globalAlpha = 1.0f - global_alpha;
00140     canvas2d.drawImage(Flower_jpg_File, 100, 100);
00141 
00142     /* fade In */
00143     canvas2d.globalAlpha = global_alpha;
00144     canvas2d.drawImage(Landscape_jpg_File, 100, 100);
00145 
00146     canvas2d.globalAlpha = 1.0f;
00147 
00148     /* Draw return button */
00149     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00150 
00151     /* Complete drawing */
00152     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00153 }
00154 
00155 void RGA_Func_Scroll(frame_buffer_t* frmbuf_info, int src_width_pos) {
00156     /* Clear */
00157     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00158 
00159     /* Draw description */
00160     canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
00161 
00162     /* Scroll from left to right */
00163     canvas2d.drawImage(Landscape_wide_jpg_File,
00164                         /* src */       src_width_pos, 25, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT,
00165                         /* dst */       100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
00166 
00167     /* Draw return button */
00168     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00169 
00170     /* Complete drawing */
00171     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00172 }
00173 
00174 void RGA_Func_Zoom(frame_buffer_t* frmbuf_info, int src_height_pos) {
00175     /* Clear */
00176     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00177 
00178     /* Draw description */
00179     canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
00180 
00181     /* Zoom out */
00182     canvas2d.drawImage(Landscape_wide_jpg_File,
00183                         /* src X */     ZOOM_SRC_CENTER_X - (src_height_pos * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT),
00184                         /* src Y */     ZOOM_SRC_CENTER_Y - src_height_pos,
00185                         /* src W */     src_height_pos * 2 * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT,
00186                         /* src H */     src_height_pos * 2,
00187                         /* dst   */     100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
00188 
00189     /* Draw return button */
00190     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00191 
00192     /* Complete drawing */
00193     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00194 }
00195 
00196 void RGA_Func_Rotation(frame_buffer_t* frmbuf_info, graphics_matrix_float_t image_angle) {
00197     /* Rotate the image to the right */
00198     /* Clear */
00199     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00200 
00201     /* Draw description */
00202     canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
00203 
00204     /* Move to drawing position */
00205     canvas2d.translate((100 + (IMG_DRAW_WIDTH / 2)), (100 + (IMG_DRAW_HEIGHT / 2)));
00206 
00207     /* Rotate */
00208     canvas2d.rotate(image_angle * (3.14159 / 180));
00209 
00210     /* Move to center to rotate */
00211     canvas2d.translate((-IMG_DRAW_WIDTH / 2), (-IMG_DRAW_HEIGHT / 2));
00212     canvas2d.drawImage(Flower_jpg_File, 0, 0);
00213     canvas2d.setTransform(1, 0, 0, 1, 0, 0);
00214 
00215     /* Draw return button */
00216     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00217 
00218     /* Complete drawing */
00219     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00220 }
00221 
00222 void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, int animation_timing, float32_t relative_pos) {
00223     /* Do accelerated motion from right to left */
00224     int position;
00225 
00226     /* Clear */
00227     canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
00228 
00229     if (relative_pos == 0.0f) {
00230         switch (animation_timing) {
00231             case ANIMATION_TIMING_EASE:
00232                 R_Get_AnimationTimingFunction("ease", &accelerator);
00233                 break;
00234             case ANIMATION_TIMING_LINEAR:
00235                 R_Get_AnimationTimingFunction("linear", &accelerator);
00236                 break;
00237             case ANIMATION_TIMING_EASE_IN:
00238                 R_Get_AnimationTimingFunction("ease-in", &accelerator);
00239                 break;
00240             case ANIMATION_TIMING_EASE_OUT:
00241                 R_Get_AnimationTimingFunction("ease-out", &accelerator);
00242                 break;
00243             case ANIMATION_TIMING_EASE_IN_OUT:
00244             default:
00245                 R_Get_AnimationTimingFunction("ease-in-out", &accelerator);
00246                 break;
00247         }
00248     }
00249 
00250     /* Draw rectangle */
00251     canvas2d.fillStyle = "#0000FF";  /* blue */
00252     switch (animation_timing) {
00253         case ANIMATION_TIMING_EASE:
00254             canvas2d.fillRect(17, 420, 136, 10);
00255             break;
00256         case ANIMATION_TIMING_LINEAR:
00257             canvas2d.fillRect(173, 420, 136, 10);
00258             break;
00259         case ANIMATION_TIMING_EASE_IN:
00260             canvas2d.fillRect(330, 420, 136, 10);
00261             break;
00262         case ANIMATION_TIMING_EASE_OUT:
00263             canvas2d.fillRect(487, 420, 136, 10);
00264             break;
00265         case ANIMATION_TIMING_EASE_IN_OUT:
00266         default:
00267             canvas2d.fillRect(644, 420, 136, 10);
00268             break;
00269     }
00270 
00271     /* Draw button */
00272     canvas2d.drawImage(animetion_timing_jpg_File, 0, 370);
00273 
00274     position = R_ANIMATION_TIMING_FUNCTION_GetValue(accelerator, relative_pos, 550.0f, 10.0f);
00275     canvas2d.drawImage(Flower_jpg_File, position, 100);
00276 
00277     /* Draw return button */
00278     canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
00279 
00280     /* Complete drawing */
00281     R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
00282 }