Files
2026-08-24 10:03:24 +08:00
..
2026-08-24 10:03:24 +08:00
2026-08-24 10:03:24 +08:00
2026-08-24 10:03:24 +08:00
2026-08-24 10:03:24 +08:00
2026-08-24 10:03:24 +08:00
2026-08-24 10:03:24 +08:00

/*

 * Copyright (c) 2014 Amlogic, Inc. All rights reserved.

 *

 * This source code is subject to the terms and conditions defined in the

 * file 'LICENSE' which is part of this source code package.

 *

 * Description:

 */

libge2d user guide

API:

int ge2d_open(void);

int ge2d_close(int fd);

int ge2d_process(int fd,aml_ge2d_info_t *pge2dinfo);





typedef struct aml_ge2d_info {

    unsigned int offset;

    unsigned int blend_mode;

    GE2DOP ge2d_op;

    buffer_info_t src_info[2];

    buffer_info_t dst_info;

    unsigned int color;

    unsigned int gl_alpha;

    unsigned int const_color;

    unsigned int dst_op_cnt;

    unsigned int reserved;

} aml_ge2d_info_t;



some bits of struct aml_ge2d_info:

unsigned int offset:        y_offset of osd

unsigned int blend_mode:    only valid when work under blend operation

unsigned int color:         only valid when fillrectangle operation

GE2DOP ge2d_op:             supported ge2d operation

supported ge2d operation include:

    AML_GE2D_FILLRECTANGLE,

    AML_GE2D_BLEND,

    AML_GE2D_STRETCHBLIT,

    AML_GE2D_BLIT,



typedef struct buffer_info {

    unsigned int mem_alloc_type;

    unsigned int memtype;

    char* vaddr;

    unsigned long offset;

    unsigned int canvas_w;

    unsigned int canvas_h;

    rectangle_t rect;

    int format;

    unsigned int rotation;

    int shared_fd;

    unsigned char plane_alpha;

    unsigned char layer_mode;

    unsigned char fill_color_en;

    unsigned int  def_color;

} buffer_info_t;

some bits of struct buffer_info:

mem_alloc_type:         if used as ion alloc or dma_buf alloc

memtype:                if used as mem alloc:CANVAS_ALLOC

                        if used as OSD0/OSD1:CANVAS_OSD0/CANVAS_OSD1

char* vaddr:            not need set,for debug

int shared_fd:          shared buffer fd, alloc by ion or dma_buf

unsigned offset:        buffer offset, default is 0

unsigned int canvas_w,

unsigned int canvas_h:  if used as mem alloc,for src1, set it to rect.w, rect.h;

                                             for dst, set it to canvas width,canvas height, 

                                             related to mem size.

                        if used as OSD0/OSD1,leave it unset,it will set by kernel;

int format:             if used as mem alloc,set pixel format

                        if used as OSD0/OSD1,leave it unset,it will set by kernel;

rectangle_t rect:       must be set,set it according real rect value.

unsigned int rotation:  it can be set GE2D_ROTATION,rotation 0/90/180/270;



1.  AML_GE2D_FILLRECTANGLE need set content:

src_info[0];

dst_info;

color;

offset;



2.AML_GE2D_BLEND need set content:

src_info[0];

src_info[1];

dst_info;

blend_mode;

offset;



3.AML_GE2D_STRETCHBLIT need set content:

src_info[0];

dst_info;

offset;



3.AML_GE2D_BLIT need set content:

src_info[0];

dst_info;

offset;



/////////////////////////////////////////////////////////////////

The test application include ge2d_load_test and ge2d_feature test.

ge2d_load_test provide ge2d loading test.

    ge2d_load_test --op 2 --duration 3000 --size 1920x1080 --pixelformat 0

	--op <0:fillrect, 1:blend, 2:strechblit, 3:blit>  ge2d operation case.

	--size <WxH>                                      define src1/src2/dst size.

	--src1_memtype <0: ion, 1: dmabuf>                define memory alloc type.

	--src2_memtype <0: ion, 1: dmabuf>                define memory alloc type.

	--dst_memtype <0: ion, 1: dmabuf>                 define memory alloc type.

	--src1_format  <num>                              define src1 format.

	--src2_format <num>                               define src2 format.

	--dst_format  <num>                               define dst format.

	--src1_size  <WxH>                                define src1 size.

	--src2_size <WxH>                                 define src2 size.

	--dst_size  <WxH>                                 define dst size.

	--src1_file  <name>                               define src1 file.

	--src2_file <name>                                define src2 file.

	--dst_file  <name>                                define dst file.

	--src1_canvas_alloc  <num>                        define whether src1 need alloc mem   0:GE2D_CANVAS_OSD0 1:GE2D_CANVAS_ALLOC.

	--src2_canvas_alloc <num>                         defien whether src2 need alloc mem  0:GE2D_CANVAS_OSD0 1:GE2D_CANVAS_ALLOC.

	--src1_rect  <x_y_w_h>                            define src1 rect.

	--src2_rect <x_y_w_h>                             define src2 rect.

	--dst_rect  <x_y_w_h>                             define dst rect.

	--bo1 <layer_mode_num>                            define src1_layer_mode.

	--bo2 <layer_mode_num>                            define src2_layer_mode.

	--gb1 <gb1_alpha>                                 define src1 global alpha.

	--gb2 <gb2_alpha>                                 define src2 global alpha.

	--strechblit <x0_y0_w_h-x1_y1_w1_h1>              define strechblit info.

	--fillrect <color_x_y_w_h>                        define fillrect info, color in rgba format.

	--src2_planenumber <num>                          define src2 plane number.

	--src1_planenumber <num>                          define src1 plane number.

	--dst_planenumber <num>                           define dst plane number.

	--help                                            Print usage information.

note: tester can change memtype to GE2D_CANVAS_ALLOC/GE2D_CANVAS_OSD0/GE2D_CANVAS_OSD1 as your requirement

      if src1 memtype is GE2D_CANVAS_ALLOC, it can read data from file via aml_read_file.



note: tester can change memtype to GE2D_CANVAS_ALLOC/GE2D_CANVAS_OSD0/GE2D_CANVAS_OSD1 as your requirement

      if src1 memtype is GE2D_CANVAS_ALLOC, you can read data from file via aml_read_file_src1

      if src2 memtype is GE2D_CANVAS_ALLOC, you can read data from file via aml_read_file_src2

      if dst memtype is GE2D_CANVAS_ALLOC, you can write data to file aml_write_file



ge2d_feature_test provide ge2d operation example.

//src used ion alloc, dst used osd

./ge2d_feature_test --op 2 --src1_memtype 0 --dst_memtype 0 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32

//src used dma_buf alloc, dst used osd

./ge2d_feature_test --op 2 --src1_memtype 1 --dst_memtype 1 --size 1920x1080 --src1_format 1 --dst_format 1 --src1_file 1080P_RGBA8888.rgb32



//src used ion alloc, dst used dma_buf alloc

./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



//src used dma_buf alloc, dst used ion alloc

./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



//src used dma_buf alloc, dst used dma_buf alloc

./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









if dma buffer is allocated by ge2d, please add content blow in DTS:



/ {

    /* ...... */

    reserved-memory {

        /* ...... */

            ge2d_cma_reserved:linux,ge2d_cma {

                compatible = "shared-dma-pool";

                reusable;

                status = "okay";

                size = <0x0 0x1800000>;

                alignment = <0x0 0x400000>;

            };

    }

    /* ...... */

    ge2d {

        /* ...... */

        memory-region = <&ge2d_cma_reserved>;

    };

}





usage examples:

fillrect ---

./ge2d_feature_test --op 0 --dst_size 1920x1080 --src1_format 1 --dst_format 1 --fillrect 0x00ff00ff_50_50_100_100 --dst_file fillrect.rgb32



blend ---

./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



strechblit ---

./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



blit ---

./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

multiplane fd support:

add options para if needed:

--src1_planenumber 1 src2_planenumber 1 --dst_planenumber 1

--src1_planenumber 2 src2_planenumber 2 --dst_planenumber 2