blob: eafad3a524404d95fd404d9d86aa39edac660525 [file] [log] [blame]
Jian Caob9fb3ed2019-04-16 16:51:27 +08001/*
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
10#include <stdio.h>
11#include <stdlib.h>
12#include <unistd.h>
13#include <fcntl.h>
14#include <malloc.h>
15#include <string.h>
16#include <sys/time.h> /* for gettimeofday() */
17#include "ge2d_port.h"
18#include "aml_ge2d.h"
19
20/* #define FILE_DATA */
21static char SRC1_FILE_NAME[64] = "./fb1.rgb32";
22static char SRC2_FILE_NAME[64] = "./fb2.rgb32";
23static char DST_FILE_NAME[64] = "./out1.rgb32";
24
25static int SX_SRC1 = 1920;
26static int SY_SRC1 = 1080;
27static int SX_SRC2 = 1920;
28static int SY_SRC2 = 1080;
29static int SX_DST = 1920;
30static int SY_DST = 1080;
31
32static int src1_rect_x = 0;
33static int src1_rect_y = 0;
34static int src1_rect_w = 1920;
35static int src1_rect_h = 1080;
36static int src2_rect_x = 0;
37static int src2_rect_y = 0;
38static int src2_rect_w = 1920;
39static int src2_rect_h = 1080;
40static int dst_rect_x = 0;
41static int dst_rect_y = 0;
42static int dst_rect_w = 1920;
43static int dst_rect_h = 1080;
44static int rect_color = 0xff0000ff;
45static int SRC1_PIXFORMAT = PIXEL_FORMAT_RGBA_8888;
46static int SRC2_PIXFORMAT = PIXEL_FORMAT_RGBA_8888;
47static int DST_PIXFORMAT = PIXEL_FORMAT_YV12;
48static int src1_mem_alloc_type = AML_GE2D_MEM_DMABUF;
49static int src2_mem_alloc_type = AML_GE2D_MEM_DMABUF;
50static int dst_mem_alloc_type = AML_GE2D_MEM_DMABUF;
51static int dst_canvas_alloc = 0;
52static int src1_canvas_alloc = 1;
53static int src2_canvas_alloc = 1;
54static int OP = AML_GE2D_STRETCHBLIT;
55static int src1_layer_mode = 0;
56static int src2_layer_mode = 0;
57static int gb1_alpha = 0xff;
58static int gb2_alpha = 0xff;
Jian Caob9fb3ed2019-04-16 16:51:27 +080059aml_ge2d_t amlge2d;
60
61static void set_ge2dinfo(aml_ge2d_info_t *pge2dinfo)
62{
63 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
64 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
65 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
66
67 pge2dinfo->src_info[1].canvas_w = SX_SRC2;
68 pge2dinfo->src_info[1].canvas_h = SY_SRC2;
69 pge2dinfo->src_info[1].format = SRC2_PIXFORMAT;
70
71 pge2dinfo->dst_info.canvas_w = SX_DST;
72 pge2dinfo->dst_info.canvas_h = SY_DST;
73 pge2dinfo->dst_info.format = DST_PIXFORMAT;
74 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
75 pge2dinfo->offset = 0;
76 pge2dinfo->ge2d_op = OP;
77 pge2dinfo->blend_mode = BLEND_MODE_PREMULTIPLIED;
78
79 switch (pge2dinfo->ge2d_op)
80 {
81 case AML_GE2D_FILLRECTANGLE:
82 pge2dinfo->src_info[0].memtype = GE2D_CANVAS_TYPE_INVALID;
83 pge2dinfo->src_info[1].memtype = GE2D_CANVAS_TYPE_INVALID;
84 pge2dinfo->dst_info.memtype = dst_canvas_alloc == 1 ? GE2D_CANVAS_ALLOC : GE2D_CANVAS_OSD0;
85 break;
86 case AML_GE2D_BLIT:
87 case AML_GE2D_STRETCHBLIT:
88 /* if not need alloc, set to GE2D_CANVAS_TYPE_INVALID
89 * otherwise set to GE2D_CANVAS_ALLOC
90 */
91 pge2dinfo->src_info[0].memtype = src1_canvas_alloc == 1 ? GE2D_CANVAS_ALLOC : GE2D_CANVAS_OSD0;;
92 pge2dinfo->src_info[1].memtype = GE2D_CANVAS_TYPE_INVALID;
93 pge2dinfo->dst_info.memtype = dst_canvas_alloc == 1 ? GE2D_CANVAS_ALLOC : GE2D_CANVAS_OSD0;
94 break;
95 case AML_GE2D_BLEND:
96 pge2dinfo->src_info[0].memtype = src1_canvas_alloc == 1 ? GE2D_CANVAS_ALLOC : GE2D_CANVAS_OSD0;;
97 pge2dinfo->src_info[1].memtype = src2_canvas_alloc == 1 ? GE2D_CANVAS_ALLOC : GE2D_CANVAS_OSD0;;
98 pge2dinfo->dst_info.memtype = dst_canvas_alloc == 1 ? GE2D_CANVAS_ALLOC : GE2D_CANVAS_OSD0;
99 break;
100 default:
101 E_GE2D("not support ge2d op,exit test!\n");
102 break;
103 }
104 /*set to AML_GE2D_MEM_DMABUF or AML_GE2D_MEM_ION*/
105 pge2dinfo->src_info[0].mem_alloc_type = src1_mem_alloc_type;
106 pge2dinfo->src_info[1].mem_alloc_type = src2_mem_alloc_type;
107 pge2dinfo->dst_info.mem_alloc_type = dst_mem_alloc_type;
108}
109
110static void print_usage(void)
111{
112 int i;
113 printf ("Usage: ge2d_feature_test [options]\n\n");
114 printf ("Options:\n\n");
115 printf (" --op <0:fillrect, 1:blend, 2:strechblit, 3:blit> ge2d operation case.\n");
116 printf (" --size <WxH> define src1/src2/dst size.\n");
117 printf (" --src1_memtype <0: ion, 1: dmabuf> define memory alloc type.\n");
118 printf (" --src2_memtype <0: ion, 1: dmabuf> define memory alloc type.\n");
119 printf (" --dst_memtype <0: ion, 1: dmabuf> define memory alloc type.\n");
120 printf (" --src1_format <num> define src format.\n");
121 printf (" --src2_format <num> define src2 format.\n");
122 printf (" --dst_format <num> define dst format.\n");
123 printf (" --src1_size <WxH> define src size.\n");
124 printf (" --src2_size <WxH> define src2 size.\n");
125 printf (" --dst_size <WxH> define dst size.\n");
126 printf (" --src1_file <name> define src file.\n");
127 printf (" --src2_file <name> define src2 file.\n");
128 printf (" --dst_file <name> define dst file.\n");
129 printf (" --src1_canvas_alloc <num> define whether src need alloc mem 0:GE2D_CANVAS_OSD0 1:GE2D_CANVAS_ALLOC.\n");
130 printf (" --src2_canvas_alloc <num> defien whether src2 need alloc mem 0:GE2D_CANVAS_OSD0 1:GE2D_CANVAS_ALLOC.\n");
131 printf (" --src1_rect <x_y_w_h> define src rect.\n");
132 printf (" --src2_rect <x_y_w_h> define src2 rect.\n");
133 printf (" --dst_rect <x_y_w_h> define dst rect.\n");
134 printf (" --bo1 <layer_mode_num> define src1_layer_mode.\n");
135 printf (" --bo2 <layer_mode_num> define src2_layer_mode.\n");
136 printf (" --gb1 <gb1_alpha> define src1 global alpha.\n");
137 printf (" --gb2 <gb2_alpha> define src2 global alpha.\n");
138 printf (" --strechblit <x0_y0_w_h-x1_y1_w1_h1> define strechblit info.\n");
139 printf (" --fillrect <color_x_y_w_h> define fillrect info, color in rgba format.\n");
140 printf (" --help Print usage information.\n");
141 printf ("\n");
142}
143
144static int parse_command_line(int argc, char *argv[])
145{
146 int i;
147 /* parse command line */
148 for (i = 1; i < argc; i++) {
149 if (strncmp (argv[i], "--", 2) == 0) {
150 if (strcmp (argv[i] + 2, "help") == 0) {
151 print_usage();
152 return ge2d_fail;
153 }
154 else if (strcmp (argv[i] + 2, "op") == 0 && ++i < argc &&
155 sscanf (argv[i], "%d", &OP) == 1) {
156 continue;
157 }
158 else if (strcmp (argv[i] + 2, "src1_memtype") == 0 && ++i < argc &&
159 sscanf (argv[i], "%d", &src1_mem_alloc_type) == 1) {
160 continue;
161 }
162 else if (strcmp (argv[i] + 2, "src2_memtype") == 0 && ++i < argc &&
163 sscanf (argv[i], "%d", &src2_mem_alloc_type) == 1) {
164 continue;
165 }
166 else if (strcmp (argv[i] + 2, "dst_memtype") == 0 && ++i < argc &&
167 sscanf (argv[i], "%d", &dst_mem_alloc_type) == 1) {
168 continue;
169 }
170 else if (strcmp (argv[i] + 2, "bo1") == 0 && ++i < argc &&
171 sscanf (argv[i], "%d", &src1_layer_mode) == 1) {
172 continue;
173 }
174 else if (strcmp (argv[i] + 2, "bo2") == 0 && ++i < argc &&
175 sscanf (argv[i], "%d", &src2_layer_mode) == 1) {
176 continue;
177 }
178 else if (strcmp (argv[i] + 2, "gb1") == 0 && ++i < argc &&
179 sscanf (argv[i], "%d", &gb1_alpha) == 1) {
180 continue;
181 }
182 else if (strcmp (argv[i] + 2, "gb2") == 0 && ++i < argc &&
183 sscanf (argv[i], "%d", &gb2_alpha) == 1) {
184 continue;
185 }
186 else if (strcmp (argv[i] + 2, "src1_format") == 0 && ++i < argc &&
187 sscanf (argv[i], "%d", &SRC1_PIXFORMAT) == 1) {
188 continue;
189 }
190 else if (strcmp (argv[i] + 2, "src2_format") == 0 && ++i < argc &&
191 sscanf (argv[i], "%d", &SRC2_PIXFORMAT) == 1) {
192 continue;
193 }
194 else if (strcmp (argv[i] + 2, "dst_format") == 0 && ++i < argc &&
195 sscanf (argv[i], "%d", &DST_PIXFORMAT) == 1) {
196 continue;
197 }
198 else if (strcmp (argv[i] + 2, "size") == 0 && ++i < argc &&
199 sscanf (argv[i], "%dx%d", &SX_SRC1, &SY_SRC1) == 2) {
200 SX_SRC2 = SX_DST = SX_SRC1;
201 SY_SRC2 = SY_DST = SY_SRC1;
202 continue;
203 }
204 else if (strcmp (argv[i] + 2, "dst_size") == 0 && ++i < argc &&
205 sscanf (argv[i], "%dx%d", &SX_DST, &SY_DST) == 2) {
206 continue;
207 }
208 else if (strcmp (argv[i] + 2, "src1_size") == 0 && ++i < argc &&
209 sscanf (argv[i], "%dx%d", &SX_SRC1, &SY_SRC1) == 2) {
210 continue;
211 }
212 else if (strcmp (argv[i] + 2, "src2_size") == 0 && ++i < argc &&
213 sscanf (argv[i], "%dx%d", &SX_SRC2, &SY_SRC2) == 2) {
214 continue;
215 }
216 else if (strcmp (argv[i] + 2, "src1_rect") == 0 && ++i < argc &&
217 sscanf (argv[i], "%d_%d_%d_%d",
218 &src1_rect_x, &src1_rect_y, &src1_rect_w, &src1_rect_h) == 4) {
219 continue;
220 }
221 else if (strcmp (argv[i] + 2, "src2_rect") == 0 && ++i < argc &&
222 sscanf (argv[i], "%d_%d_%d_%d",
223 &src2_rect_x, &src2_rect_y, &src2_rect_w, &src2_rect_h) == 4) {
224 continue;
225 }
226 else if (strcmp (argv[i] + 2, "dst_rect") == 0 && ++i < argc &&
227 sscanf (argv[i], "%d_%d_%d_%d",
228 &dst_rect_x, &dst_rect_y, &dst_rect_w, &dst_rect_h) == 4) {
229 continue;
230 }
231 else if (strcmp (argv[i] + 2, "strechblit") == 0 && ++i < argc &&
232 sscanf (argv[i], "%d_%d_%d_%d-%d_%d_%d_%d",
233 &src1_rect_x, &src1_rect_y, &src1_rect_w, &src1_rect_h,
234 &dst_rect_x, &dst_rect_y, &dst_rect_w, &dst_rect_h) == 8) {
235 continue;
236 }
237 else if (strcmp (argv[i] + 2, "fillrect") == 0 && ++i < argc &&
238 sscanf (argv[i], "%x_%d_%d_%d_%d",
239 &rect_color, &dst_rect_x, &dst_rect_y, &dst_rect_w, &dst_rect_h) == 5) {
240 continue;
241 }
242 else if (strcmp (argv[i] + 2, "src1_file") == 0 && ++i < argc &&
243 sscanf (argv[i], "%s", &SRC1_FILE_NAME) == 1) {
244 continue;
245 }
246 else if (strcmp (argv[i] + 2, "src2_file") == 0 && ++i < argc &&
247 sscanf (argv[i], "%s", &SRC2_FILE_NAME) == 1) {
248 continue;
249 }
250 else if (strcmp (argv[i] + 2, "dst_file") == 0 && ++i < argc &&
251 sscanf (argv[i], "%s", &DST_FILE_NAME) == 1) {
252 dst_canvas_alloc = 1;
253 continue;
254 }
255 else if (strcmp (argv[i] + 2, "src1_canvas_alloc") == 0 && ++i < argc &&
256 sscanf (argv[i], "%d", &src1_canvas_alloc) == 1) {
257 continue;
258 }
259 else if (strcmp (argv[i] + 2, "src2_canvas_alloc") == 0 && ++i < argc &&
260 sscanf (argv[i], "%d", &src2_canvas_alloc) == 1) {
261 continue;
262 }
263 }
264 }
265 return ge2d_success;
266}
267
268
269int aml_read_file_src1(const char* url , aml_ge2d_info_t *pge2dinfo)
270{
271 int fd = -1;
272 int length = 0;
273 int read_num = 0;
274 if (amlge2d.src_size == 0)
275 return 0;
276
277 fd = open(url,O_RDONLY );
278 if (fd < 0) {
279 E_GE2D("read source file:%s open error\n",url);
280 return ge2d_fail;
281 }
282
283 amlge2d.src_data = (char*)malloc(amlge2d.src_size);
284 if (!amlge2d.src_data) {
285 E_GE2D("malloc for src_data failed\n");
286 return ge2d_fail;
287 }
288
289 read_num = read(fd,amlge2d.src_data,amlge2d.src_size);
290 if (read_num <= 0) {
291 E_GE2D("read file read_num=%d error\n",read_num);
292 return ge2d_fail;
293 }
294
295 memcpy(pge2dinfo->src_info[0].vaddr, amlge2d.src_data, amlge2d.src_size);
296 close(fd);
297 return ge2d_success;
298}
299
300int aml_read_file_src2(const char* url , aml_ge2d_info_t *pge2dinfo)
301{
302 int fd = -1;
303 int length = 0;
304 int read_num = 0;
305 if (amlge2d.src2_size == 0)
306 return 0;
307
308 fd = open(url,O_RDONLY );
309 if (fd < 0) {
310 E_GE2D("read source file:%s open error\n",url);
311 return ge2d_fail;
312 }
313
314 amlge2d.src2_data = (char*)malloc(amlge2d.src2_size);
315 if (!amlge2d.src2_data) {
316 E_GE2D("malloc for src_data failed\n");
317 return ge2d_fail;
318 }
319
320 read_num = read(fd,amlge2d.src2_data,amlge2d.src2_size);
321 if (read_num <= 0) {
322 E_GE2D("read file read_num=%d error\n",read_num);
323 return ge2d_fail;
324 }
325
326 memcpy(pge2dinfo->src_info[1].vaddr, amlge2d.src2_data, amlge2d.src2_size);
327 close(fd);
328 return ge2d_success;
329}
330
331int aml_write_file(const char* url , aml_ge2d_info_t *pge2dinfo)
332{
333 int fd = -1;
334 int length = 0;
335 int write_num = 0;
336 unsigned int *value;
337 if (amlge2d.dst_size == 0)
338 return 0;
339 if ((GE2D_CANVAS_OSD0 == pge2dinfo->dst_info.memtype)
340 || (GE2D_CANVAS_OSD1 == pge2dinfo->dst_info.memtype))
341 return 0;
342
343 fd = open(url,O_RDWR | O_CREAT,0660);
344 if (fd < 0) {
345 E_GE2D("write file:%s open error\n",url);
346 return ge2d_fail;
347 }
348
349 amlge2d.dst_data = (char*)malloc(amlge2d.dst_size);
350 if (!amlge2d.dst_data) {
351 E_GE2D("malloc for dst_data failed\n");
352 return ge2d_fail;
353 }
354
355 memcpy(amlge2d.dst_data,pge2dinfo->dst_info.vaddr,amlge2d.dst_size);
356 printf("pixel: 0x%2x, 0x%2x,0x%2x,0x%2x, 0x%2x,0x%2x,0x%2x,0x%2x\n",
357 amlge2d.dst_data[0],
358 amlge2d.dst_data[1],
359 amlge2d.dst_data[2],
360 amlge2d.dst_data[3],
361 amlge2d.dst_data[4],
362 amlge2d.dst_data[5],
363 amlge2d.dst_data[6],
364 amlge2d.dst_data[7]);
365 write_num = write(fd,amlge2d.dst_data,amlge2d.dst_size);
366 if (write_num <= 0) {
367 E_GE2D("write file write_num=%d error\n",write_num);
368 }
369 close(fd);
370 return ge2d_success;
371}
372
373
374static int do_fill_rectangle(aml_ge2d_info_t *pge2dinfo)
375{
376 int ret = -1;
377 char code;
378
379 printf("do_fill_rectangle test case:\n");
380
381 pge2dinfo->color = rect_color;
382 pge2dinfo->dst_info.rect.x = dst_rect_x;
383 pge2dinfo->dst_info.rect.y = dst_rect_x;
384 pge2dinfo->dst_info.rect.w = dst_rect_w;
385 pge2dinfo->dst_info.rect.h = dst_rect_h;
386 ret = aml_ge2d_process(pge2dinfo);
387 #if 0
388 sleep(5);
389
390 printf("please enter any key do rotation test[90]\n");
391 code = getc(stdin);
392 pge2dinfo->dst_info.rotation = GE2D_ROTATION_180;
393 ret = aml_ge2d_process(pge2dinfo);
394 #endif
395 if (ret < 0)
396 printf("%s failed\n", __func__);
397 return ret;
398}
399
400
401static int do_blend(aml_ge2d_info_t *pge2dinfo)
402{
403 int ret = -1;
404 char code = 0;
405 int shared_fd_bakup;
406 unsigned long offset_bakup = 0;
407 printf("do_blend test case:\n");
408
Jian Cao49c82bd2019-06-04 12:49:10 +0800409 if (pge2dinfo->cap_attr == 0x1) {
Jian Caob9fb3ed2019-04-16 16:51:27 +0800410 /* do blend src1 blend src2(dst) to dst */
411 printf("one step blend\n");
412 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
413 if (ret < 0)
414 return ge2d_fail;
415 ret = aml_read_file_src2(SRC2_FILE_NAME,pge2dinfo);
416 if (ret < 0)
417 return ge2d_fail;
418
419 pge2dinfo->src_info[0].rect.x = src1_rect_x;
420 pge2dinfo->src_info[0].rect.y = src1_rect_y;
421 pge2dinfo->src_info[0].rect.w = src1_rect_w;
422 pge2dinfo->src_info[0].rect.h = src1_rect_h;
423 pge2dinfo->src_info[0].fill_color_en = 0;
424
425 pge2dinfo->src_info[1].rect.x = src2_rect_x;
426 pge2dinfo->src_info[1].rect.y = src2_rect_y;
427 pge2dinfo->src_info[1].rect.w = src2_rect_w;
428 pge2dinfo->src_info[1].rect.h = src2_rect_h;
429 pge2dinfo->src_info[1].fill_color_en = 0;
430 if ((src2_layer_mode == LAYER_MODE_NON) && (src1_layer_mode == LAYER_MODE_PREMULTIPLIED))
431 pge2dinfo->src_info[0].format = PIXEL_FORMAT_RGBX_8888;
432
433 pge2dinfo->dst_info.rect.x = dst_rect_x;
434 pge2dinfo->dst_info.rect.y = dst_rect_y;
435 pge2dinfo->dst_info.rect.w = dst_rect_w;
436 pge2dinfo->dst_info.rect.h = dst_rect_h;
437 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
438
439 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
440 pge2dinfo->src_info[1].layer_mode = src2_layer_mode;
441 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
442 pge2dinfo->src_info[1].plane_alpha = gb2_alpha;
443 ret = aml_ge2d_process(pge2dinfo);
444 } else {
445 if (((gb1_alpha != 0xff)
446 && (gb2_alpha != 0xff))){
447 printf("two steps blend,two plane alpha\n");
448
449 if (src2_layer_mode == LAYER_MODE_COVERAGE) {
450 printf("two steps blend,src2 LAYER_MODE_COVERAGE\n");
451 ret = aml_read_file_src1(SRC2_FILE_NAME,pge2dinfo);
452 if (ret < 0)
453 return ge2d_fail;
454
455 /* both plane alpha, do 2 steps */
456 /* step 1: strechbilt */
457 pge2dinfo->ge2d_op = AML_GE2D_BLEND;
458 /* src2 do strechbilt to dst */
459 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
460 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
461 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
462 pge2dinfo->src_info[0].rect.x = 0;
463 pge2dinfo->src_info[0].rect.y = 0;
464 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
465 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
466 pge2dinfo->src_info[0].fill_color_en = 0;
467
468 pge2dinfo->src_info[1].canvas_w = SX_DST;
469 pge2dinfo->src_info[1].canvas_h = SY_DST;
470 pge2dinfo->src_info[1].format = DST_PIXFORMAT;
471 pge2dinfo->src_info[1].rect.x = 0;
472 pge2dinfo->src_info[1].rect.y = 0;
473 pge2dinfo->src_info[1].rect.w = pge2dinfo->src_info[0].canvas_w;
474 pge2dinfo->src_info[1].rect.h = pge2dinfo->src_info[0].canvas_h;
475 pge2dinfo->src_info[1].fill_color_en = 1;
476 pge2dinfo->src_info[1].def_color = 0x00;
477
478 pge2dinfo->dst_info.canvas_w = SX_DST;
479 pge2dinfo->dst_info.canvas_h = SY_DST;
480 pge2dinfo->dst_info.format = DST_PIXFORMAT;
481 pge2dinfo->dst_info.rect.x = 0;
482 pge2dinfo->dst_info.rect.y = 0;
483 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
484 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
485 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
486
487 pge2dinfo->src_info[0].layer_mode = LAYER_MODE_COVERAGE;
488 pge2dinfo->src_info[1].layer_mode = LAYER_MODE_COVERAGE;
489 pge2dinfo->src_info[0].plane_alpha = gb2_alpha;
490 pge2dinfo->src_info[1].plane_alpha = 0xff;
491 ret = aml_ge2d_process(pge2dinfo);
492 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
493 if (ret < 0)
494 return ge2d_fail;
495
496 /* step2: blend src1 blend src2(dst) to dst */
497 pge2dinfo->ge2d_op = AML_GE2D_BLEND;
498
499 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
500 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
501 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
502 pge2dinfo->src_info[0].rect.x = 0;
503 pge2dinfo->src_info[0].rect.y = 0;
504 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
505 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
506 pge2dinfo->src_info[0].fill_color_en = 0;
507
508 pge2dinfo->src_info[1].canvas_w = pge2dinfo->dst_info.canvas_w;
509 pge2dinfo->src_info[1].canvas_h = pge2dinfo->dst_info.canvas_h;
510 pge2dinfo->src_info[1].format = pge2dinfo->dst_info.format;
511 pge2dinfo->src_info[1].rect.x = pge2dinfo->dst_info.rect.x;
512 pge2dinfo->src_info[1].rect.y = pge2dinfo->dst_info.rect.y;
513 pge2dinfo->src_info[1].rect.w = pge2dinfo->dst_info.rect.w;
514 pge2dinfo->src_info[1].rect.h = pge2dinfo->dst_info.rect.h;
515 pge2dinfo->src_info[1].shared_fd = pge2dinfo->dst_info.shared_fd;
516 pge2dinfo->src_info[1].offset = pge2dinfo->dst_info.offset;
517 pge2dinfo->src_info[1].fill_color_en = 0;
518
519 pge2dinfo->dst_info.canvas_w = SX_DST;
520 pge2dinfo->dst_info.canvas_h = SY_DST;
521 pge2dinfo->dst_info.format = DST_PIXFORMAT;
522 pge2dinfo->dst_info.rect.x = 0;
523 pge2dinfo->dst_info.rect.y = 0;
524 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
525 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
526 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
527
528 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
529 pge2dinfo->src_info[1].layer_mode = src2_layer_mode;
530 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
531 pge2dinfo->src_info[1].plane_alpha = gb2_alpha;
532 ret = aml_ge2d_process(pge2dinfo);
533 } else {
534 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
535 if (ret < 0)
536 return ge2d_fail;
537 ret = aml_read_file_src2(SRC2_FILE_NAME,pge2dinfo);
538 if (ret < 0)
539 return ge2d_fail;
540 printf("two step: strechbilt+blend\n");
541 /* both plane alpha, do 2 steps */
542 /* step 1: strechbilt */
543 pge2dinfo->ge2d_op = AML_GE2D_STRETCHBLIT;
544 /* src2 do strechbilt to dst */
545 pge2dinfo->src_info[0].canvas_w = SX_SRC2;
546 pge2dinfo->src_info[0].canvas_h = SY_SRC2;
547 pge2dinfo->src_info[0].format = SRC2_PIXFORMAT;
548 pge2dinfo->src_info[0].rect.x = 0;
549 pge2dinfo->src_info[0].rect.y = 0;
550 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
551 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
552
553 shared_fd_bakup = pge2dinfo->src_info[0].shared_fd;
554 offset_bakup = pge2dinfo->src_info[0].offset;
555 pge2dinfo->src_info[0].shared_fd = pge2dinfo->src_info[1].shared_fd;
556 pge2dinfo->src_info[0].offset = pge2dinfo->src_info[1].offset;
557
558 pge2dinfo->src_info[0].layer_mode = src2_layer_mode;
559 pge2dinfo->src_info[0].plane_alpha = gb2_alpha;
560 pge2dinfo->dst_info.canvas_w = SX_DST;
561 pge2dinfo->dst_info.canvas_h = SY_DST;
562 pge2dinfo->dst_info.format = DST_PIXFORMAT;
563 pge2dinfo->dst_info.rect.x = 0;
564 pge2dinfo->dst_info.rect.y = 0;
565 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
566 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
567 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
568 ret = aml_ge2d_process(pge2dinfo);
569
570 /* step2: blend src1 blend src2(dst) to dst */
571 pge2dinfo->ge2d_op = AML_GE2D_BLEND;
572
573 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
574 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
575 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
576 pge2dinfo->src_info[0].rect.x = 0;
577 pge2dinfo->src_info[0].rect.y = 0;
578 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
579 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
580 pge2dinfo->src_info[0].shared_fd = shared_fd_bakup;
581 pge2dinfo->src_info[0].offset = offset_bakup;
582 pge2dinfo->src_info[0].fill_color_en = 0;
583
584 pge2dinfo->src_info[1].canvas_w = pge2dinfo->dst_info.canvas_w;
585 pge2dinfo->src_info[1].canvas_h = pge2dinfo->dst_info.canvas_h;
586 pge2dinfo->src_info[1].format = pge2dinfo->dst_info.format;
587 pge2dinfo->src_info[1].rect.x = pge2dinfo->dst_info.rect.x;
588 pge2dinfo->src_info[1].rect.y = pge2dinfo->dst_info.rect.y;
589 pge2dinfo->src_info[1].rect.w = pge2dinfo->dst_info.rect.w;
590 pge2dinfo->src_info[1].rect.h = pge2dinfo->dst_info.rect.h;
591 pge2dinfo->src_info[1].shared_fd = pge2dinfo->dst_info.shared_fd;
592 pge2dinfo->src_info[1].offset = pge2dinfo->dst_info.offset;
593 pge2dinfo->src_info[1].fill_color_en = 0;
594
595 pge2dinfo->dst_info.canvas_w = SX_DST;
596 pge2dinfo->dst_info.canvas_h = SY_DST;
597 pge2dinfo->dst_info.format = DST_PIXFORMAT;
598 pge2dinfo->dst_info.rect.x = 0;
599 pge2dinfo->dst_info.rect.y = 0;
600 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
601 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
602 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
603
604 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
605 pge2dinfo->src_info[1].layer_mode = src2_layer_mode;
606 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
607 pge2dinfo->src_info[1].plane_alpha = gb2_alpha;
608 ret = aml_ge2d_process(pge2dinfo);
609 }
610 } else if (src2_layer_mode == LAYER_MODE_COVERAGE){
611 printf("two steps blend,src2 LAYER_MODE_COVERAGE: two blend\n");
612 ret = aml_read_file_src1(SRC2_FILE_NAME,pge2dinfo);
613 if (ret < 0)
614 return ge2d_fail;
615 /* both plane alpha, do 2 steps */
616 /* step 1: strechbilt */
617 pge2dinfo->ge2d_op = AML_GE2D_BLEND;
618 /* src2 do strechbilt to dst */
619 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
620 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
621 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
622 pge2dinfo->src_info[0].rect.x = 0;
623 pge2dinfo->src_info[0].rect.y = 0;
624 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
625 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
626 pge2dinfo->src_info[0].fill_color_en = 0;
627
628 pge2dinfo->src_info[1].canvas_w = SX_DST;
629 pge2dinfo->src_info[1].canvas_h = SY_DST;
630 pge2dinfo->src_info[1].format = DST_PIXFORMAT;
631 pge2dinfo->src_info[1].rect.x = 0;
632 pge2dinfo->src_info[1].rect.y = 0;
633 pge2dinfo->src_info[1].rect.w = pge2dinfo->src_info[0].canvas_w;
634 pge2dinfo->src_info[1].rect.h = pge2dinfo->src_info[0].canvas_h;
635 pge2dinfo->src_info[1].fill_color_en = 1;
636 pge2dinfo->src_info[1].def_color = 0x00;
637
638 pge2dinfo->dst_info.canvas_w = SX_DST;
639 pge2dinfo->dst_info.canvas_h = SY_DST;
640 pge2dinfo->dst_info.format = DST_PIXFORMAT;
641 pge2dinfo->dst_info.rect.x = 0;
642 pge2dinfo->dst_info.rect.y = 0;
643 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
644 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
645 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
646
647 pge2dinfo->src_info[0].layer_mode = LAYER_MODE_COVERAGE;
648 pge2dinfo->src_info[1].layer_mode = LAYER_MODE_COVERAGE;
649 pge2dinfo->src_info[0].plane_alpha = gb2_alpha;
650 pge2dinfo->src_info[1].plane_alpha = 0xff;
651 ret = aml_ge2d_process(pge2dinfo);
652 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
653 if (ret < 0)
654 return ge2d_fail;
655 /* step2: blend src1 blend src2(dst) to dst */
656 pge2dinfo->ge2d_op = AML_GE2D_BLEND;
657
658 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
659 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
660 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
661 pge2dinfo->src_info[0].rect.x = 0;
662 pge2dinfo->src_info[0].rect.y = 0;
663 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
664 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
665 pge2dinfo->src_info[0].fill_color_en = 0;
666
667 pge2dinfo->src_info[1].canvas_w = pge2dinfo->dst_info.canvas_w;
668 pge2dinfo->src_info[1].canvas_h = pge2dinfo->dst_info.canvas_h;
669 pge2dinfo->src_info[1].format = pge2dinfo->dst_info.format;
670 pge2dinfo->src_info[1].rect.x = pge2dinfo->dst_info.rect.x;
671 pge2dinfo->src_info[1].rect.y = pge2dinfo->dst_info.rect.y;
672 pge2dinfo->src_info[1].rect.w = pge2dinfo->dst_info.rect.w;
673 pge2dinfo->src_info[1].rect.h = pge2dinfo->dst_info.rect.h;
674 pge2dinfo->src_info[1].shared_fd = pge2dinfo->dst_info.shared_fd;
675 pge2dinfo->src_info[1].offset = pge2dinfo->dst_info.offset;
676 pge2dinfo->src_info[1].fill_color_en = 0;
677
678 pge2dinfo->dst_info.canvas_w = SX_DST;
679 pge2dinfo->dst_info.canvas_h = SY_DST;
680 pge2dinfo->dst_info.format = DST_PIXFORMAT;
681 pge2dinfo->dst_info.rect.x = 0;
682 pge2dinfo->dst_info.rect.y = 0;
683 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
684 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
685 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
686
687 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
688 pge2dinfo->src_info[1].layer_mode = src2_layer_mode;
689 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
690 pge2dinfo->src_info[1].plane_alpha = gb2_alpha;
691 ret = aml_ge2d_process(pge2dinfo);
692 } else if ((src2_layer_mode == LAYER_MODE_NON)
693 && (src1_layer_mode != LAYER_MODE_PREMULTIPLIED)){
694 printf("two steps blend,src2 LAYER_MODE_NON:strechbilt+blend\n");
695 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
696 if (ret < 0)
697 return ge2d_fail;
698 ret = aml_read_file_src2(SRC2_FILE_NAME,pge2dinfo);
699 if (ret < 0)
700 return ge2d_fail;
701 /* both plane alpha, do 2 steps */
702 /* step 1: strechbilt */
703 pge2dinfo->ge2d_op = AML_GE2D_STRETCHBLIT;
704 /* src2 do strechbilt to dst */
705 pge2dinfo->src_info[0].canvas_w = SX_SRC2;
706 pge2dinfo->src_info[0].canvas_h = SY_SRC2;
707 pge2dinfo->src_info[0].format = SRC2_PIXFORMAT;
708 pge2dinfo->src_info[0].rect.x = 0;
709 pge2dinfo->src_info[0].rect.y = 0;
710 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
711 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
712
713 shared_fd_bakup = pge2dinfo->src_info[0].shared_fd;
714 offset_bakup = pge2dinfo->src_info[0].offset;
715 pge2dinfo->src_info[0].shared_fd = pge2dinfo->src_info[1].shared_fd;
716 pge2dinfo->src_info[0].offset = pge2dinfo->src_info[1].offset;
717 pge2dinfo->src_info[0].layer_mode = src2_layer_mode;
718 pge2dinfo->src_info[0].plane_alpha = 0xff;
719 pge2dinfo->src_info[0].format = PIXEL_FORMAT_RGBX_8888;
720
721 pge2dinfo->dst_info.canvas_w = SX_DST;
722 pge2dinfo->dst_info.canvas_h = SY_DST;
723 pge2dinfo->dst_info.format = DST_PIXFORMAT;
724 pge2dinfo->dst_info.rect.x = 0;
725 pge2dinfo->dst_info.rect.y = 0;
726 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
727 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
728 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
729 ret = aml_ge2d_process(pge2dinfo);
730
731 /* step2: blend src1 blend src2(dst) to dst */
732 pge2dinfo->ge2d_op = AML_GE2D_BLEND;
733
734 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
735 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
736 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
737 pge2dinfo->src_info[0].rect.x = 0;
738 pge2dinfo->src_info[0].rect.y = 0;
739 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
740 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
741 pge2dinfo->src_info[0].shared_fd = shared_fd_bakup;
742 pge2dinfo->src_info[0].offset = offset_bakup;
743 pge2dinfo->src_info[0].fill_color_en = 0;
744
745 pge2dinfo->src_info[1].canvas_w = pge2dinfo->dst_info.canvas_w;
746 pge2dinfo->src_info[1].canvas_h = pge2dinfo->dst_info.canvas_h;
747 pge2dinfo->src_info[1].format = pge2dinfo->dst_info.format;
748 pge2dinfo->src_info[1].rect.x = pge2dinfo->dst_info.rect.x;
749 pge2dinfo->src_info[1].rect.y = pge2dinfo->dst_info.rect.y;
750 pge2dinfo->src_info[1].rect.w = pge2dinfo->dst_info.rect.w;
751 pge2dinfo->src_info[1].rect.h = pge2dinfo->dst_info.rect.h;
752 pge2dinfo->src_info[1].shared_fd = pge2dinfo->dst_info.shared_fd;
753 pge2dinfo->src_info[1].offset = pge2dinfo->dst_info.offset;
754 pge2dinfo->src_info[1].fill_color_en = 0;
755
756 pge2dinfo->dst_info.canvas_w = SX_DST;
757 pge2dinfo->dst_info.canvas_h = SY_DST;
758 pge2dinfo->dst_info.format = DST_PIXFORMAT;
759 pge2dinfo->dst_info.rect.x = 0;
760 pge2dinfo->dst_info.rect.y = 0;
761 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
762 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
763 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
764 printf("two steps blend,src1_layer_mode=%d,src2_layer_mode=%d\n",src1_layer_mode,src2_layer_mode);
765
766 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
767 pge2dinfo->src_info[1].layer_mode = src2_layer_mode;
768 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
769 pge2dinfo->src_info[1].plane_alpha = gb2_alpha;
770 ret = aml_ge2d_process(pge2dinfo);
771 } else {
772 /* do blend src1 blend src2(dst) to dst */
773 printf("one step blend\n");
774 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
775 if (ret < 0)
776 return ge2d_fail;
777 ret = aml_read_file_src2(SRC2_FILE_NAME,pge2dinfo);
778 if (ret < 0)
779 return ge2d_fail;
780 pge2dinfo->src_info[0].canvas_w = SX_SRC1;
781 pge2dinfo->src_info[0].canvas_h = SY_SRC1;
782 pge2dinfo->src_info[0].format = SRC1_PIXFORMAT;
783 pge2dinfo->src_info[0].rect.x = 0;
784 pge2dinfo->src_info[0].rect.y = 0;
785 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
786 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
787 pge2dinfo->src_info[0].fill_color_en = 0;
788
789 pge2dinfo->src_info[1].canvas_w = SX_SRC2;
790 pge2dinfo->src_info[1].canvas_h = SY_SRC2;
791 pge2dinfo->src_info[1].format = SRC2_PIXFORMAT;
792 pge2dinfo->src_info[1].rect.x = 0;
793 pge2dinfo->src_info[1].rect.y = 0;
794 pge2dinfo->src_info[1].rect.w = pge2dinfo->src_info[0].canvas_w;
795 pge2dinfo->src_info[1].rect.h = pge2dinfo->src_info[0].canvas_h;
796 pge2dinfo->src_info[1].fill_color_en = 0;
797 if (src2_layer_mode == LAYER_MODE_NON)
798 pge2dinfo->src_info[0].format = PIXEL_FORMAT_RGBX_8888;
799 pge2dinfo->dst_info.canvas_w = SX_DST;
800 pge2dinfo->dst_info.canvas_h = SY_DST;
801 pge2dinfo->dst_info.format = DST_PIXFORMAT;
802 pge2dinfo->dst_info.rect.x = 0;
803 pge2dinfo->dst_info.rect.y = 0;
804 pge2dinfo->dst_info.rect.w = pge2dinfo->src_info[0].canvas_w;
805 pge2dinfo->dst_info.rect.h = pge2dinfo->src_info[0].canvas_h;
806 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
807
808 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
809 pge2dinfo->src_info[1].layer_mode = src2_layer_mode;
810 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
811 pge2dinfo->src_info[1].plane_alpha = gb2_alpha;
812 ret = aml_ge2d_process(pge2dinfo);
813 }
814 }
815 if (ret < 0)
816 printf("%s failed\n", __func__);
817 return ret;
818}
819
820
821static int do_strechblit(aml_ge2d_info_t *pge2dinfo)
822{
823 int ret = -1;
824 char code = 0;
825 printf("do_strechblit test case:\n");
826 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
827 if (ret < 0)
828 return ge2d_fail;
829
830 pge2dinfo->src_info[0].rect.x = src1_rect_x;
831 pge2dinfo->src_info[0].rect.y = src1_rect_y;
832 pge2dinfo->src_info[0].rect.w = src1_rect_w;
833 pge2dinfo->src_info[0].rect.h = src1_rect_h;
834 pge2dinfo->dst_info.rect.x = dst_rect_x;
835 pge2dinfo->dst_info.rect.y = dst_rect_y;
836 pge2dinfo->dst_info.rect.w = dst_rect_w;
837 pge2dinfo->dst_info.rect.h = dst_rect_h;
838 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
839 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
840 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
841
842 ret = aml_ge2d_process(pge2dinfo);
843 #if 0
844 sleep(5);
845
846 printf("please enter any key do rotation test[90]\n");
847 code = getc(stdin);
848 pge2dinfo->dst_info.rotation = GE2D_ROTATION_90;
849 ret = aml_ge2d_process(pge2dinfo);
850 #endif
851 if (ret < 0)
852 printf("%s failed\n", __func__);
853 return ret;
854
855}
856
857static int do_blit(aml_ge2d_info_t *pge2dinfo)
858{
859 int ret = -1;
860 char code = 0;
861 printf("do_blit test case:\n");
862 ret = aml_read_file_src1(SRC1_FILE_NAME,pge2dinfo);
863 if (ret < 0)
864 return ge2d_fail;
865
866 pge2dinfo->src_info[0].rect.x = src1_rect_x;
867 pge2dinfo->src_info[0].rect.y = src1_rect_y;
868 pge2dinfo->src_info[0].rect.w = src1_rect_w;
869 pge2dinfo->src_info[0].rect.h = src1_rect_h;
870 pge2dinfo->dst_info.rect.x = dst_rect_x;
871 pge2dinfo->dst_info.rect.y = dst_rect_y;
872
873 pge2dinfo->dst_info.rotation = GE2D_ROTATION_0;
874 pge2dinfo->src_info[0].layer_mode = src1_layer_mode;
875 pge2dinfo->src_info[0].plane_alpha = gb1_alpha;
876
877 ret = aml_ge2d_process(pge2dinfo);
878 #if 0
879 sleep(5);
880
881 printf("please enter any key do rotation test[90]\n");
882 code = getc(stdin);
883 pge2dinfo->dst_info.rotation = GE2D_ROTATION_90;
884 pge2dinfo->src_info[0].rect.x = 0;
885 pge2dinfo->src_info[0].rect.y = 0;
886 pge2dinfo->src_info[0].rect.w = pge2dinfo->src_info[0].canvas_w;
887 pge2dinfo->src_info[0].rect.h = pge2dinfo->src_info[0].canvas_h;
888 pge2dinfo->dst_info.rect.x = 0;
889 pge2dinfo->dst_info.rect.y = 0;
890
891 ret = aml_ge2d_process(pge2dinfo);
892 #endif
893 if (ret < 0)
894 printf("%s failed\n", __func__);
895 return ret;
896}
897
898int main(int argc, char **argv)
899{
900 int ret = -1;
901 int i = 0;
902 unsigned long stime;
903 memset(&amlge2d,0x0,sizeof(aml_ge2d_t));
904 memset(&(amlge2d.ge2dinfo.src_info[0]), 0, sizeof(buffer_info_t));
905 memset(&(amlge2d.ge2dinfo.src_info[1]), 0, sizeof(buffer_info_t));
906 memset(&(amlge2d.ge2dinfo.dst_info), 0, sizeof(buffer_info_t));
Jian Cao49c82bd2019-06-04 12:49:10 +0800907
Jian Caob9fb3ed2019-04-16 16:51:27 +0800908 ret = parse_command_line(argc,argv);
909 if (ret == ge2d_fail)
910 return ge2d_success;
911
912 set_ge2dinfo(&amlge2d.ge2dinfo);
913
Jian Cao49c82bd2019-06-04 12:49:10 +0800914 ret = aml_ge2d_init(&amlge2d);
Jian Caob9fb3ed2019-04-16 16:51:27 +0800915 if (ret < 0)
916 return ge2d_fail;
Jian Caob9fb3ed2019-04-16 16:51:27 +0800917
918 ret = aml_ge2d_mem_alloc(&amlge2d);
919 if (ret < 0)
920 goto exit;
921#if 0
922 /* if dma_buf and used fd alloc other driver */
923 /* set dma buf fd */
924 amlge2d.ge2dinfo.src_info[0].shared_fd = dma_fd;
925 amlge2d.ge2dinfo.src_info[0].memtype = GE2D_CANVAS_ALLOC;
926#endif
927
928 switch (amlge2d.ge2dinfo.ge2d_op)
929 {
930 case AML_GE2D_FILLRECTANGLE:
931 ret = do_fill_rectangle(&amlge2d.ge2dinfo);
932 break;
933 case AML_GE2D_BLEND:
934 ret = do_blend(&amlge2d.ge2dinfo);
935 break;
936 case AML_GE2D_STRETCHBLIT:
937 ret = do_strechblit(&amlge2d.ge2dinfo);
938 break;
939 case AML_GE2D_BLIT:
940 ret = do_blit(&amlge2d.ge2dinfo);
941 break;
942 default:
943 E_GE2D("not support ge2d op,exit test!\n");
944 break;
945 }
Jian Cao49c82bd2019-06-04 12:49:10 +0800946 if (ret < 0)
947 goto exit;
Jian Caob9fb3ed2019-04-16 16:51:27 +0800948 ret = aml_write_file(DST_FILE_NAME,&amlge2d.ge2dinfo);
Jian Cao49c82bd2019-06-04 12:49:10 +0800949 if (ret < 0)
950 goto exit;
Jian Caob9fb3ed2019-04-16 16:51:27 +0800951exit:
952 if (amlge2d.src_data) {
953 free(amlge2d.src_data);
954 amlge2d.src_data = NULL;
955 }
956 if (amlge2d.src2_data) {
957 free(amlge2d.src2_data);
958 amlge2d.src2_data = NULL;
959 }
960 if (amlge2d.dst_data) {
961 free(amlge2d.dst_data);
962 amlge2d.dst_data = NULL;
963 }
964 aml_ge2d_mem_free(&amlge2d);
Jian Cao49c82bd2019-06-04 12:49:10 +0800965 aml_ge2d_exit(&amlge2d);
Jian Caob9fb3ed2019-04-16 16:51:27 +0800966 printf("ge2d feature_test exit!!!\n");
967 return ge2d_success;
968}