Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 1 | /*
|
| 2 | * Copyright (c) 2014 Amlogic, Inc. All rights reserved.
|
| 3 | *
|
| 4 | * This source code is subject to the terms and conditions defined in the
|
| 5 | * file 'LICENSE' which is part of this source code package.
|
| 6 | *
|
| 7 | * Description:
|
| 8 | */
|
| 9 | libge2d user guide
|
| 10 | API:
|
| 11 | int ge2d_open(void);
|
| 12 | int ge2d_close(int fd);
|
| 13 | int ge2d_process(int fd,aml_ge2d_info_t *pge2dinfo);
|
| 14 |
|
| 15 |
|
| 16 | typedef struct aml_ge2d_info {
|
| 17 | unsigned int offset;
|
| 18 | unsigned int blend_mode;
|
| 19 | GE2DOP ge2d_op;
|
| 20 | buffer_info_t src_info[2];
|
| 21 | buffer_info_t dst_info;
|
| 22 | unsigned int color;
|
| 23 | unsigned int gl_alpha;
|
| 24 | unsigned int const_color;
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 25 | unsigned int dst_op_cnt;
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 26 | unsigned int reserved;
|
| 27 | } aml_ge2d_info_t;
|
| 28 |
|
| 29 | some bits of struct aml_ge2d_info:
|
| 30 | unsigned int offset: y_offset of osd
|
| 31 | unsigned int blend_mode: only valid when work under blend operation
|
| 32 | unsigned int color: only valid when fillrectangle operation
|
| 33 | GE2DOP ge2d_op: supported ge2d operation
|
| 34 | supported ge2d operation include:
|
| 35 | AML_GE2D_FILLRECTANGLE,
|
| 36 | AML_GE2D_BLEND,
|
| 37 | AML_GE2D_STRETCHBLIT,
|
| 38 | AML_GE2D_BLIT,
|
| 39 |
|
| 40 | typedef struct buffer_info {
|
| 41 | unsigned int mem_alloc_type;
|
| 42 | unsigned int memtype;
|
| 43 | char* vaddr;
|
| 44 | unsigned long offset;
|
| 45 | unsigned int canvas_w;
|
| 46 | unsigned int canvas_h;
|
| 47 | rectangle_t rect;
|
| 48 | int format;
|
| 49 | unsigned int rotation;
|
| 50 | int shared_fd;
|
| 51 | unsigned char plane_alpha;
|
| 52 | unsigned char layer_mode;
|
| 53 | unsigned char fill_color_en;
|
| 54 | unsigned int def_color;
|
| 55 | } buffer_info_t;
|
| 56 | some bits of struct buffer_info:
|
| 57 | mem_alloc_type: if used as ion alloc or dma_buf alloc
|
| 58 | memtype: if used as mem alloc:CANVAS_ALLOC
|
| 59 | if used as OSD0/OSD1:CANVAS_OSD0/CANVAS_OSD1
|
| 60 | char* vaddr: not need set,for debug
|
| 61 | int shared_fd: shared buffer fd, alloc by ion or dma_buf
|
| 62 | unsigned offset: buffer offset, default is 0
|
| 63 | unsigned int canvas_w,
|
| 64 | unsigned int canvas_h: if used as mem alloc,for src1, set it to rect.w, rect.h;
|
| 65 | for dst, set it to canvas width,canvas height,
|
| 66 | related to mem size.
|
| 67 | if used as OSD0/OSD1,leave it unset,it will set by kernel;
|
| 68 | int format: if used as mem alloc,set pixel format
|
| 69 | if used as OSD0/OSD1,leave it unset,it will set by kernel;
|
| 70 | rectangle_t rect: must be set,set it according real rect value.
|
| 71 | unsigned int rotation: it can be set GE2D_ROTATION,rotation 0/90/180/270;
|
| 72 |
|
| 73 | 1. AML_GE2D_FILLRECTANGLE need set content:
|
| 74 | src_info[0];
|
| 75 | dst_info;
|
| 76 | color;
|
| 77 | offset;
|
| 78 |
|
| 79 | 2.AML_GE2D_BLEND need set content:
|
| 80 | src_info[0];
|
| 81 | src_info[1];
|
| 82 | dst_info;
|
| 83 | blend_mode;
|
| 84 | offset;
|
| 85 |
|
| 86 | 3.AML_GE2D_STRETCHBLIT need set content:
|
| 87 | src_info[0];
|
| 88 | dst_info;
|
| 89 | offset;
|
| 90 |
|
| 91 | 3.AML_GE2D_BLIT need set content:
|
| 92 | src_info[0];
|
| 93 | dst_info;
|
| 94 | offset;
|
| 95 |
|
| 96 | /////////////////////////////////////////////////////////////////
|
| 97 | The test application include ge2d_load_test and ge2d_feature test.
|
| 98 | ge2d_load_test provide ge2d loading test.
|
| 99 | ge2d_load_test --op 2 --duration 3000 --size 1920x1080 --pixelformat 0
|
| 100 | --op <0:fillrect, 1:blend, 2:strechblit, 3:blit> ge2d operation case.
|
| 101 | --size <WxH> define src1/src2/dst size.
|
| 102 | --src1_memtype <0: ion, 1: dmabuf> define memory alloc type.
|
| 103 | --src2_memtype <0: ion, 1: dmabuf> define memory alloc type.
|
| 104 | --dst_memtype <0: ion, 1: dmabuf> define memory alloc type.
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 105 | --src1_format <num> define src1 format.
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 106 | --src2_format <num> define src2 format.
|
| 107 | --dst_format <num> define dst format.
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 108 | --src1_size <WxH> define src1 size.
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 109 | --src2_size <WxH> define src2 size.
|
| 110 | --dst_size <WxH> define dst size.
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 111 | --src1_file <name> define src1 file.
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 112 | --src2_file <name> define src2 file.
|
| 113 | --dst_file <name> define dst file.
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 114 | --src1_canvas_alloc <num> define whether src1 need alloc mem 0:GE2D_CANVAS_OSD0 1:GE2D_CANVAS_ALLOC.
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 115 | --src2_canvas_alloc <num> defien whether src2 need alloc mem 0:GE2D_CANVAS_OSD0 1:GE2D_CANVAS_ALLOC.
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 116 | --src1_rect <x_y_w_h> define src1 rect.
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 117 | --src2_rect <x_y_w_h> define src2 rect.
|
| 118 | --dst_rect <x_y_w_h> define dst rect.
|
| 119 | --bo1 <layer_mode_num> define src1_layer_mode.
|
| 120 | --bo2 <layer_mode_num> define src2_layer_mode.
|
| 121 | --gb1 <gb1_alpha> define src1 global alpha.
|
| 122 | --gb2 <gb2_alpha> define src2 global alpha.
|
| 123 | --strechblit <x0_y0_w_h-x1_y1_w1_h1> define strechblit info.
|
| 124 | --fillrect <color_x_y_w_h> define fillrect info, color in rgba format.
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 125 | --src2_planenumber <num> define src2 plane number.
|
| 126 | --src1_planenumber <num> define src1 plane number.
|
| 127 | --dst_planenumber <num> define dst plane number.
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 128 | --help Print usage information.
|
| 129 | note: tester can change memtype to GE2D_CANVAS_ALLOC/GE2D_CANVAS_OSD0/GE2D_CANVAS_OSD1 as your requirement
|
| 130 | if src1 memtype is GE2D_CANVAS_ALLOC, it can read data from file via aml_read_file.
|
| 131 |
|
| 132 | note: tester can change memtype to GE2D_CANVAS_ALLOC/GE2D_CANVAS_OSD0/GE2D_CANVAS_OSD1 as your requirement
|
| 133 | if src1 memtype is GE2D_CANVAS_ALLOC, you can read data from file via aml_read_file_src1
|
| 134 | if src2 memtype is GE2D_CANVAS_ALLOC, you can read data from file via aml_read_file_src2
|
| 135 | if dst memtype is GE2D_CANVAS_ALLOC, you can write data to file aml_write_file
|
| 136 |
|
| 137 | ge2d_feature_test provide ge2d operation example.
|
| 138 | //src used ion alloc, dst used osd
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 139 | ./ge2d_feature_test --op 2 --src1_memtype 0 --dst_memtype 0 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 140 | //src used dma_buf alloc, dst used osd
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 141 | ./ge2d_feature_test --op 2 --src1_memtype 1 --dst_memtype 1 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 142 |
|
| 143 | //src used ion alloc, dst used dma_buf alloc
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 144 | ./ge2d_feature_test --op 2 --src1_memtype 0 --dst_memtype 1 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32 --dst_file out_dma.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 145 |
|
| 146 | //src used dma_buf alloc, dst used ion alloc
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 147 | ./ge2d_feature_test --op 2 --src1_memtype 1 --dst_memtype 0 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32 --dst_file out_ion.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 148 |
|
| 149 | //src used dma_buf alloc, dst used dma_buf alloc
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 150 | ./ge2d_feature_test --op 2 --src1_memtype 1 --dst_memtype 1--size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32 --dst_file out_ion.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 151 |
|
| 152 |
|
| 153 |
|
| 154 |
|
| 155 | if dma buffer is allocated by ge2d, please add content blow in DTS:
|
| 156 |
|
| 157 | / {
|
| 158 | /* ...... */
|
| 159 | reserved-memory {
|
| 160 | /* ...... */
|
| 161 | ge2d_cma_reserved:linux,ge2d_cma {
|
| 162 | compatible = "shared-dma-pool";
|
| 163 | reusable;
|
| 164 | status = "okay";
|
| 165 | size = <0x0 0x1800000>;
|
| 166 | alignment = <0x0 0x400000>;
|
| 167 | };
|
| 168 | }
|
| 169 | /* ...... */
|
| 170 | ge2d {
|
| 171 | /* ...... */
|
| 172 | memory-region = <&ge2d_cma_reserved>;
|
| 173 | };
|
| 174 | }
|
| 175 |
|
| 176 |
|
| 177 | usage examples:
|
| 178 | fillrect ---
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 179 | ./ge2d_feature_test --op 0 --dst_size 1920x1080 --src1_format 1 --dst_format 1 --fillrect 0x00ff00ff_50_50_100_100 --dst_file fillrect.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 180 |
|
| 181 | blend ---
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 182 | ./ge2d_feature_test --op 1 --dst_size 1920x1080 --dst_rect 100_100_400_400 --src1_size 1920x1080 --src1_rect 100_100_400_400 --src2_size 400x400 --src2_rect 0_0_400_400 --dst_format 1 --src1_format 1 --src2_format 1 --src1_file 1080P_RGBA8888.rgb32 --src2_file 400x400_RGBA8888.rgb32 --bo1 2 --bo2 2 --gb1 150 --gb2 255 --dst_file blend.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 183 |
|
| 184 | strechblit ---
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 185 | ./ge2d_feature_test --op 2 --size 1920x1080 --src1_format 1 --dst_format 1 --strechblit 0_0_1920_100-50_50_200_300 --src1_file 1080P_RGBA8888.rgb32 --dst_file strechblit.rgb32
|
Jian Cao | b9fb3ed | 2019-04-16 16:51:27 +0800 | [diff] [blame] | 186 |
|
| 187 | blit ---
|
Cao Jian | 6533147 | 2019-11-01 21:01:49 +0800 | [diff] [blame] | 188 | ./ge2d_feature_test --op 3 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_rect 0_0_1920_100 --dst_rect 0_0_1920_100 --src1_file 1080P_RGBA8888.rgb32 --dst_file blit.rgb32
|
| 189 | multiplane fd support:
|
| 190 | add options para if needed:
|
| 191 | --src1_planenumber 1 src2_planenumber 1 --dst_planenumber 1
|
| 192 | --src1_planenumber 2 src2_planenumber 2 --dst_planenumber 2
|