1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdint.h>
4 #include <string.h>
5 #include <rtthread.h>
6 #include <hal_mem.h>
7 #include <log.h>
8 #include <video/sunxi_display2.h>
9 #include "disp_layer_cfg.h"
10 #include "disp_mem.h"
11 
12 int msleep(unsigned int msecs);
13 
14 static u32 g_screen_index;
15 #define DELAY_MS 100
16 
show_vi_layer(struct test_layer_cfg * cfg,u32 alpha_mode,u32 alpha_value)17 static int show_vi_layer(struct test_layer_cfg *cfg, u32 alpha_mode, u32 alpha_value)
18 {
19     if (!cfg)
20         return -1;
21 
22     cfg->mem_id = 1;
23     cfg->screen_id = g_screen_index;
24     cfg->layer_cfg.channel = 0;
25     cfg->layer_id = 0;
26     cfg->layer_cfg.layer_id = 0;
27 
28     cfg->layer_cfg.info.fb.format = 72;
29     cfg->layer_cfg.info.fb.size[0].width = 1280;
30     cfg->layer_cfg.info.fb.size[0].height = 720;
31     cfg->layer_cfg.info.fb.crop.x = 0;
32     cfg->layer_cfg.info.fb.crop.y = 0;
33     cfg->layer_cfg.info.fb.crop.width = 1280;
34     cfg->layer_cfg.info.fb.crop.height = 720;
35     cfg->layer_cfg.info.fb.align[0] = 4;
36     cfg->layer_cfg.info.mode = 0;
37     cfg->layer_cfg.info.alpha_mode = alpha_mode;
38     cfg->layer_cfg.info.alpha_value = alpha_value;
39     cfg->layer_cfg.info.zorder = 0;
40     cfg->layer_cfg.info.screen_win.x = 0;
41     cfg->layer_cfg.info.screen_win.y = 0;
42 
43     return disp_layer_cfg(cfg);
44 }
45 
show_ui_layer(struct test_layer_cfg * cfg,u32 ch,u32 alpha_mode,u32 alpha_value)46 static int show_ui_layer(struct test_layer_cfg *cfg,u32 ch,  u32 alpha_mode, u32 alpha_value)
47 {
48     if (!cfg)
49         return -1;
50 
51     cfg->mem_id = 0;
52     cfg->screen_id = g_screen_index;
53     cfg->layer_cfg.channel = ch;
54     cfg->layer_id = 0;
55     cfg->layer_cfg.layer_id = 0;
56 
57     cfg->layer_cfg.info.fb.format = 0;
58     cfg->layer_cfg.info.fb.size[0].width = 800;
59     cfg->layer_cfg.info.fb.size[0].height = 480;
60     cfg->layer_cfg.info.fb.crop.x = 0;
61     cfg->layer_cfg.info.fb.crop.y = 0;
62     cfg->layer_cfg.info.fb.crop.width = 800;
63     cfg->layer_cfg.info.fb.crop.height = 480;
64     cfg->layer_cfg.info.fb.align[0] = 4;
65     cfg->layer_cfg.info.mode = 0;
66     cfg->layer_cfg.info.alpha_mode = alpha_mode;
67     cfg->layer_cfg.info.alpha_value = alpha_value;
68     cfg->layer_cfg.info.zorder = 1;
69     cfg->layer_cfg.info.screen_win.x = 0;
70     cfg->layer_cfg.info.screen_win.y = 0;
71 
72     return disp_layer_cfg(cfg);
73 }
74 
disp_layer_alpha_test(int argc,char ** argv)75 int disp_layer_alpha_test(int argc, char **argv)
76 {
77     struct test_layer_cfg test_cfg;
78     int ch_index = 0, i , j;
79     int ch_num = 3, vi_chn_num = 1;
80     /*main test start*/
81 
82     if (argc == 2) {
83         g_screen_index = atoi(argv[1]);
84     } else
85         g_screen_index = 0;
86 
87     disp_layer_clear_all(g_screen_index);
88 
89     printf("request mem_id 0\n");
90     disp_mem(0, 800, 480, 0, "./pic/ui_800x480_double_151.bin");
91 
92     disp_mem(1, 1280, 800, 0, "./pic/bike_1280x720_020.bin");
93 
94     printf("Start show layer\n");
95     memset(&test_cfg, 0, sizeof(struct test_layer_cfg));
96     show_vi_layer(&test_cfg, 0, 255);
97 
98     memset(&test_cfg, 0, sizeof(struct test_layer_cfg));
99     msleep(DELAY_MS);
100     ch_index = vi_chn_num;
101     while(ch_index < ch_num) {
102         show_ui_layer(&test_cfg, ch_index, 1, 255);
103         msleep(DELAY_MS);
104         /*pixel mode*/
105         for (i = 0; i < 255; i+=25) {
106             show_ui_layer(&test_cfg, ch_index, 1, i);
107             msleep(DELAY_MS);
108         }
109         msleep(DELAY_MS);
110         show_ui_layer(&test_cfg, ch_index, 1, 255);
111         msleep(DELAY_MS);
112         /*pixel mode*/
113         for (i = 0; i < 255; i+=25) {
114             show_ui_layer(&test_cfg, ch_index, 0, i);
115             msleep(DELAY_MS);
116         }
117         /*global pixel mode*/
118         for (i = 0; i < 255; i+=25) {
119             show_ui_layer(&test_cfg, ch_index, 2, i);
120             msleep(DELAY_MS);
121         }
122         ++ch_index;
123     }
124 
125 
126 
127     disp_layer_clear_all(g_screen_index);
128     msleep(100);
129     disp_mem_clear(0);
130     disp_mem_clear(1);
131     return 0;
132 }
133 
134 FINSH_FUNCTION_EXPORT_ALIAS(disp_layer_alpha_test, __cmd_disp_layer_alpha_test, disp_layer_alpha_test);
135