Browse Source

[Renesas]Modify player output buffer to dynamic malloc

Rbb666 2 years ago
parent
commit
22a7bf8711

+ 19 - 15
bsp/renesas/ra6m3-hmi-board/board/lvgl/demo/lv_demo_video.c

@@ -19,7 +19,6 @@
 
 #define JPEG_WIDTH  400
 #define JPEG_HEIGHT 240
-#define DCODE_BUFFER_SIZE   (35 * 1024)
 
 #define MY_CLASS &lv_media_class
 
@@ -34,6 +33,9 @@ lv_obj_t *ui_ImgButton3;
 lv_obj_t *ui_Indicator_Left;
 lv_obj_t *ui_Audio_Wave;
 
+static decode_drv_t decode;
+static uint8_t *jpeg_outbuffer;
+
 const lv_obj_class_t lv_media_class =
 {
     .width_def = LV_SIZE_CONTENT,
@@ -379,6 +381,21 @@ static void auto_run_video_timer_cb(lv_timer_t *timer)
     lv_timer_del(timer);
 }
 
+int player_init(void)
+{
+    jpeg_outbuffer = rt_malloc_align(DCODE_BUFFER_SIZE, 8);
+    RT_ASSERT(jpeg_outbuffer != NULL)
+    rt_memset(jpeg_outbuffer, 0x00, DCODE_BUFFER_SIZE);
+
+    v_player.decode = &decode;
+    v_player.decode->jpeg_out_buf = jpeg_outbuffer;
+    v_player.decode->decode_read = lv_avi_player_draw;
+
+    player_start(&v_player);
+
+    return 0;
+}
+
 void lv_video_gui_init(void)
 {
     win_obj = lv_media_page_create(lv_scr_act());
@@ -390,19 +407,6 @@ void lv_video_gui_init(void)
 
     lv_timer_t *t = lv_timer_create(auto_run_video_timer_cb, 2000, NULL);
     lv_timer_ready(t);
-}
-
-static uint8_t jpeg_outbuffer[DCODE_BUFFER_SIZE] BSP_ALIGN_VARIABLE(8);
-static decode_drv_t decode;
-
-int player_init(void)
-{
-    v_player.decode = &decode;
-    v_player.decode->jpeg_out_buf = &jpeg_outbuffer;
-    v_player.decode->decode_read = lv_avi_player_draw;
 
-    player_start(&v_player);
-
-    return 0;
+    player_init();
 }
-INIT_APP_EXPORT(player_init);

+ 4 - 6
bsp/renesas/ra6m3-hmi-board/board/ports/avi/player/player.c

@@ -19,8 +19,6 @@
 #define __Map(x, in_min, in_max, out_min, out_max) \
     (((x) - (in_min)) * ((out_max) - (out_min)) / ((in_max) - (in_min)) + (out_min))
 
-#define v_pbuffer_size 35 * 1024
-
 struct avi_file_info
 {
     uint32_t Strsize;
@@ -101,7 +99,7 @@ static int video_start_parser(player_t player, int fd, char *filename)
     LOG_I("video total time:%02d:%02d:%02d\n", alltime / 3600, (alltime % 3600) / 60, alltime % 60);
 
     lseek(fd, AVI_file.movi_start, SEEK_SET);
-    avi_file.Strsize = read_video_frame(fd, v_pbuffer, v_pbuffer_size, &avi_file.Strtype);
+    avi_file.Strsize = read_video_frame(fd, v_pbuffer, DCODE_BUFFER_SIZE, &avi_file.Strtype);
     avi_file.BytesRD = avi_file.Strsize + 8;
 
     return fd;
@@ -426,7 +424,7 @@ static void player_entry(void *parameter)
             }
 
             /* read frame */
-            avi_file.Strsize = read_video_frame(fd, v_pbuffer, v_pbuffer_size, &avi_file.Strtype);
+            avi_file.Strsize = read_video_frame(fd, v_pbuffer, DCODE_BUFFER_SIZE, &avi_file.Strtype);
             avi_file.BytesRD += avi_file.Strsize + 8;
             player->song_time_pass = ((double)avi_file.BytesRD / AVI_file.movi_size) * player->song_time_all;
 
@@ -488,9 +486,9 @@ int player_start(player_t player)
         return -RT_ERROR;
     }
 
-    v_pbuffer = rt_malloc(v_pbuffer_size);
+    v_pbuffer = rt_malloc(DCODE_BUFFER_SIZE);
     RT_ASSERT(v_pbuffer != NULL)
-    rt_memset(v_pbuffer, 0x00, v_pbuffer_size);
+    rt_memset(v_pbuffer, 0x00, DCODE_BUFFER_SIZE);
 
     /* read filesystem */
     search_files(player, "/", ".avi");

+ 0 - 3
bsp/renesas/ra6m3-hmi-board/board/ports/drv_jpeg.c

@@ -15,9 +15,6 @@
 
 #ifdef BSP_USING_JPEG
 
-#define DCODE_BUFFER_SIZE           (35 * 1024)
-#define JPEG_TIMEOUT                (100)
-
 static rt_sem_t _SemaphoreJPEG = RT_NULL;
 volatile static jpeg_status_t g_jpeg_status = JPEG_STATUS_NONE;
 

+ 3 - 0
bsp/renesas/ra6m3-hmi-board/board/ports/drv_jpeg.h

@@ -4,6 +4,9 @@
 #include <rtthread.h>
 #include "hal_data.h"
 
+#define DCODE_BUFFER_SIZE           (30 * 1024)
+#define JPEG_TIMEOUT                (100)
+
 typedef struct _decode_drv_t
 {
     void *jpeg_out_buf;