csi_g2d.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. #ifndef __CSI_G2D_H__
  2. #define __CSI_G2D_H__
  3. #include <csi_g2d_types.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. struct _g2d_surface;
  8. typedef struct _g2d_surface g2d_surface;
  9. struct _g2d_context;
  10. typedef struct _g2d_context g2d_context;
  11. typedef enum _csi_g2d_tiling {
  12. CSI_G2D_LINEAR,
  13. } csi_g2d_tiling;
  14. typedef enum _csi_g2d_rotation {
  15. CSI_G2D_ROTATION_0_DEGREE,
  16. CSI_G2D_ROTATION_90_DEGREE,
  17. CSI_G2D_ROTATION_180_DEGREE,
  18. CSI_G2D_ROTATION_270_DEGREE,
  19. CSI_G2D_ROTATION_FLIP_X = 0x10000000,
  20. CSI_G2D_ROTATION_FLIP_Y = 0x20000000,
  21. } csi_g2d_rotation;
  22. /* TODO: maximum 16 different modes */
  23. typedef enum _csi_g2d_blend_mode {
  24. CSI_G2D_BLEND_MODE_CLEAR,
  25. CSI_G2D_BLEND_MODE_SRC,
  26. CSI_G2D_BLEND_MODE_DST,
  27. CSI_G2D_BLEND_MODE_SRC_OVER,
  28. CSI_G2D_BLEND_MODE_DST_OVER,
  29. CSI_G2D_BLEND_MODE_SRC_IN,
  30. CSI_G2D_BLEND_MODE_DST_IN,
  31. CSI_G2D_BLEND_MODE_SRC_OUT,
  32. CSI_G2D_BLEND_MODE_DST_OUT,
  33. CSI_G2D_BLEND_MODE_SRC_ATOP,
  34. CSI_G2D_BLEND_MODE_DST_ATOP,
  35. CSI_G2D_BLEND_MODE_ADD,
  36. CSI_G2D_BLEND_MODE_XOR,
  37. } csi_g2d_blend_mode;
  38. typedef enum _csi_g2d_alpha_mode {
  39. CSI_G2D_ALPHA_MODE_STRAIGHT,
  40. CSI_G2D_ALPHA_MODE_INVERSED
  41. } csi_g2d_alpha_mode;
  42. typedef enum _csi_g2d_global_alpha_mode {
  43. CSI_G2D_GLOBAL_ALPHA_MODE_OFF,
  44. CSI_G2D_GLOBAL_ALPHA_MODE_ON,
  45. CSI_G2D_GLOBAL_ALPHA_MODE_SCALE
  46. } csi_g2d_global_alpha_mode;
  47. typedef enum _csi_g2d_global_multiply_mode {
  48. CSI_G2D_GLOBAL_COLOR_MULTIPLY_DISABLE,
  49. CSI_G2D_GLOBAL_COLOR_MULTIPLY_ALPHA,
  50. CSI_G2D_GLOBAL_COLOR_MULTIPLY_COLOR
  51. } csi_g2d_global_multiply_mode;
  52. typedef enum _csi_g2d_yuv_mode {
  53. CSI_G2D_YUV_MODE_BT601,
  54. CSI_G2D_YUV_MODE_BT709,
  55. CSI_G2D_YUV_MODE_BT2020,
  56. CSI_G2D_YUV_MODE_USER_DEFINED,
  57. CSI_G2D_YUV_MODE_USER_DEFINED_CLAMP,
  58. CSI_G2D_YUV_MODE_NUM,
  59. } csi_g2d_yuv_mode;
  60. typedef enum _csi_g2d_filter_tap {
  61. CSI_G2D_FILTER_TAP_1,
  62. CSI_G2D_FILTER_TAP_3,
  63. CSI_G2D_FILTER_TAP_5
  64. } csi_g2d_filter_tap;
  65. typedef struct _csi_g2d_point {
  66. int x;
  67. int y;
  68. } csi_g2d_point;
  69. typedef struct _csi_g2d_line {
  70. csi_g2d_point start;
  71. csi_g2d_point end;
  72. } csi_g2d_line;
  73. typedef struct _csi_g2d_triangle {
  74. csi_g2d_line line[3];
  75. } csi_g2d_triangle;
  76. typedef struct _csi_g2d_rectangle {
  77. csi_g2d_line line[4];
  78. } csi_g2d_rectangle;
  79. typedef struct _csi_g2d_region {
  80. unsigned int left;
  81. unsigned int top;
  82. unsigned int right;
  83. unsigned int bottom;
  84. } csi_g2d_region;
  85. typedef struct _csi_g2d_surface {
  86. g2d_surface *priv; /* point to g2d_surface */
  87. int width; /* in pixels */
  88. int height; /* in pixels */
  89. int cpp[3]; /* bytes per pixel (per plane) */
  90. int stride[3]; /* in bytes */
  91. int nplanes; /* planes number */
  92. int alignment; /* in pixels */
  93. unsigned int format; /* in fourcc */
  94. csi_g2d_tiling tiling;
  95. void *lgcaddr[3];
  96. unsigned int flags;
  97. } csi_g2d_surface;
  98. int csi_g2d_open(void);
  99. int csi_g2d_close(void);
  100. int csi_g2d_flush(void);
  101. /* csi_g2d_surface APIs */
  102. int csi_g2d_surface_create(csi_g2d_surface *csi_surface);
  103. int csi_g2d_surface_destroy(csi_g2d_surface *csi_surface);
  104. int csi_g2d_surface_select_source(unsigned int id);
  105. int csi_g2d_surface_set_source(csi_g2d_surface *surface);
  106. int csi_g2d_surface_set_target(csi_g2d_surface *surface);
  107. int csi_g2d_surface_set_source_clipping(csi_g2d_region *region);
  108. int csi_g2d_surface_set_target_clipping(csi_g2d_region *region);
  109. int csi_g2d_surface_set_source_yuv_mode(csi_g2d_yuv_mode yuv_mode);
  110. int csi_g2d_surface_set_target_yuv_mode(csi_g2d_yuv_mode yuv_mode);
  111. int csi_g2d_surface_set_source_alpha_mode(
  112. csi_g2d_alpha_mode alpha_mode,
  113. csi_g2d_blend_mode blend_mode
  114. );
  115. int csi_g2d_surface_set_source_global_alpha_mode(
  116. csi_g2d_global_alpha_mode global_mode,
  117. unsigned int global_color
  118. );
  119. int csi_g2d_surface_set_source_multiply_mode(
  120. bool multiply,
  121. csi_g2d_global_multiply_mode global_mode
  122. );
  123. int csi_g2d_surface_set_target_alpha_mode(
  124. csi_g2d_alpha_mode alpha_mode,
  125. csi_g2d_blend_mode blend_mode
  126. );
  127. int csi_g2d_surface_set_target_global_alpha_mode(
  128. csi_g2d_global_alpha_mode global_mode,
  129. unsigned int global_color
  130. );
  131. int csi_g2d_surface_set_target_multiply_mode(
  132. bool multiply,
  133. bool demultiply
  134. );
  135. int csi_g2d_surface_enable_disable_alpha_blend(bool enable);
  136. /* csi_g2d_brush APIs */
  137. int csi_g2d_brush_create(unsigned int argb_color, bool convert);
  138. int csi_g2d_brush_destroy(void);
  139. int csi_g2d_palette_load(unsigned int *table,
  140. unsigned int count,
  141. bool convert);
  142. /* csi_g2d_line APIs: draw line(s) in target */
  143. int csi_g2d_line_draw_line(csi_g2d_line *lines, int nlines);
  144. int csi_g2d_line_draw_triangle(csi_g2d_triangle *triangles,
  145. int ntriangles);
  146. int csi_g2d_line_draw_rectangle(csi_g2d_rectangle *rectangles,
  147. int nrectangles);
  148. /* blit properties config APIs */
  149. int csi_g2d_blit_set_rotation(csi_g2d_rotation rotation);
  150. int csi_g2d_blit_set_mirror(bool hmirror, bool vmirror);
  151. int csi_g2d_blit_set_filter_tap(csi_g2d_filter_tap htap,
  152. csi_g2d_filter_tap vtap);
  153. /* clear target: clear color should be ARGB8888 */
  154. int csi_g2d_fill(csi_g2d_region *regions,
  155. int nregions,
  156. unsigned int argb_color);
  157. /* blit without resize, support alpha blending */
  158. int csi_g2d_blit_bitblit(csi_g2d_region *target_regions, int nregions);
  159. /* scaling up or down APIs */
  160. int csi_g2d_blit_stretchblit(csi_g2d_region *target_regions, int nregions);
  161. int csi_g2d_blit_filterblit(csi_g2d_region *target_regions, int nregions);
  162. /* multisrc blit API */
  163. int csi_g2d_blit_multisrc_blit(
  164. unsigned int src_mask,
  165. csi_g2d_region *target_regions,
  166. int nregions
  167. );
  168. #ifdef __cplusplus
  169. }
  170. #endif
  171. #endif