Arm-2D  
2D Image Processing Library for Cortex-M Processors
arm_2d_alpha_blending.h
1/*
2 * Copyright (C) 2022 Arm Limited or its affiliates. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19/* ----------------------------------------------------------------------
20 * Project: Arm-2D Library
21 * Title: #include "arm_2d.h"
22 * Description: Public header file to contain the alpha-blending related
23 * APIs
24 *
25 * $Date: 17. June 2022
26 * $Revision: V.1.0.1
27 *
28 * Target Processor: Cortex-M cores
29 * -------------------------------------------------------------------- */
30
31#ifndef __ARM_2D_ALPHA_BLENDING_H__
32#define __ARM_2D_ALPHA_BLENDING_H__
33
34/*============================ INCLUDES ======================================*/
35
36#include "arm_2d_types.h"
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#if defined(__clang__)
43# pragma clang diagnostic push
44# pragma clang diagnostic ignored "-Wunknown-warning-option"
45# pragma clang diagnostic ignored "-Wreserved-identifier"
46# pragma clang diagnostic ignored "-Wmissing-declarations"
47# pragma clang diagnostic ignored "-Wpadded"
48# pragma clang diagnostic ignored "-Wc11-extensions"
49#endif
50
51/*============================ MACROS ========================================*/
52
53/*!
54 * \addtogroup Deprecated
55 * @{
56 */
57#define arm_2d_rgb565_fill_colour_with_alpha \
58 arm_2d_rgb565_fill_colour_with_opacity
59
60#define arm_2d_rgb888_fill_colour_with_alpha \
61 arm_2d_rgb888_fill_colour_with_opacity
62
63#define arm_2d_cccn888_fill_colour_with_alpha \
64 arm_2d_cccn888_fill_colour_with_opacity
65
66#define arm_2d_gray8_fill_colour_with_alpha_mask \
67 arm_2d_gray8_fill_colour_with_mask
68
69#define arm_2d_rgb565_fill_colour_with_alpha_mask \
70 arm_2d_rgb565_fill_colour_with_mask
71
72#define arm_2d_rgb888_fill_colour_with_alpha_mask \
73 arm_2d_rgb888_fill_colour_with_mask
74
75#define arm_2d_cccn888_fill_colour_with_alpha_mask \
76 arm_2d_cccn888_fill_colour_with_mask
77
78#define arm_2d_gray8_fill_colour_with_alpha_mask_and_opacity \
79 arm_2d_gray8_fill_colour_with_mask_and_opacity
80
81#define arm_2d_rgb565_fill_colour_with_alpha_mask_and_opacity \
82 arm_2d_rgb565_fill_colour_with_mask_and_opacity
83
84#define arm_2d_rgb888_fill_colour_with_alpha_mask_and_opacity \
85 arm_2d_rgb888_fill_colour_with_mask_and_opacity
86
87#define arm_2d_cccn888_fill_colour_with_alpha_mask_and_opacity \
88 arm_2d_cccn888_fill_colour_with_mask_and_opacity
89
90#define arm_2d_gray8_alpha_blending_with_colour_masking \
91 arm_2d_gray8_alpha_blending_with_colour_keying
92
93#define arm_2d_rgb565_alpha_blending_with_colour_masking \
94 arm_2d_rgb565_alpha_blending_with_colour_keying
95
96#define arm_2d_rgb888_alpha_blending_with_colour_masking \
97 arm_2d_rgb888_alpha_blending_with_colour_keying
98
99#define arm_2d_cccn888_alpha_blending_with_colour_masking \
100 arm_2d_cccn888_alpha_blending_with_colour_keying
101
102#define arm_2d_gray8_tile_copy_with_alpha_masks \
103 arm_2d_gray8_tile_copy_with_masks
104
105#define arm_2d_rgb565_tile_copy_with_alpha_masks \
106 arm_2d_rgb565_tile_copy_with_masks
107
108#define arm_2d_cccn888_tile_copy_with_alpha_masks \
109 arm_2d_cccn888_tile_copy_with_masks
110
111#define arm_2d_rgb888_tile_copy_with_alpha_mask \
112 arm_2d_rgb888_tile_copy_with_masks
113
114/*! @} */
115
116/*!
117 * \addtogroup gAlpha 4 Alpha Blending Operations
118 * @{
119 */
120
121/*============================ MACROFIED FUNCTIONS ===========================*/
122
123#define arm_2d_gray8_alpha_blending( __SRC_ADDR, /* source tile address */ \
124 __DES_ADDR, /* target tile address */ \
125 __REGION_ADDR,/* region address */ \
126 __ALPHA) /* alpha */ \
127 arm_2dp_gray8_alpha_blending( NULL, \
128 (__SRC_ADDR), \
129 (__DES_ADDR), \
130 (__REGION_ADDR), \
131 (__ALPHA))
132
133#define arm_2d_rgb565_alpha_blending( __SRC_ADDR, /* source tile address */ \
134 __DES_ADDR, /* target tile address */ \
135 __REGION_ADDR,/* region address */ \
136 __ALPHA) /* alpha */ \
137 arm_2dp_rgb565_alpha_blending( NULL, \
138 (__SRC_ADDR), \
139 (__DES_ADDR), \
140 (__REGION_ADDR), \
141 (__ALPHA))
142
143#define arm_2d_rgb888_alpha_blending( __SRC_ADDR, /* source tile address */ \
144 __DES_ADDR, /* target tile address */ \
145 __REGION_ADDR,/* region address */ \
146 __ALPHA) /* alpha */ \
147 arm_2dp_cccn888_alpha_blending( NULL, \
148 (__SRC_ADDR), \
149 (__DES_ADDR), \
150 (__REGION_ADDR), \
151 (__ALPHA))
152
153#define arm_2d_cccn888_alpha_blending( __SRC_ADDR, /* source tile address */\
154 __DES_ADDR, /* target tile address */ \
155 __REGION_ADDR,/* region address */ \
156 __ALPHA) /* alpha */ \
157 arm_2dp_cccn888_alpha_blending( NULL, \
158 (__SRC_ADDR), \
159 (__DES_ADDR), \
160 (__REGION_ADDR), \
161 (__ALPHA))
162
163#define arm_2d_gray8_fill_colour_with_opacity( \
164 __DES_ADDR, /* target tile address */ \
165 __REGION_ADDR,/* region address */ \
166 __COLOUR, /* colour */ \
167 __ALPHA) /* alpha */ \
168 arm_2dp_gray8_fill_colour_with_opacity( NULL, \
169 (__DES_ADDR), \
170 (__REGION_ADDR), \
171 (__COLOUR), \
172 (__ALPHA))
173
174#define arm_2d_rgb565_fill_colour_with_opacity( \
175 __DES_ADDR, /* target tile address */ \
176 __REGION_ADDR,/* region address */ \
177 __COLOUR, /* colour */ \
178 __ALPHA) /* alpha */ \
179 arm_2dp_rgb565_fill_colour_with_opacity( NULL, \
180 (__DES_ADDR), \
181 (__REGION_ADDR), \
182 (__COLOUR), \
183 (__ALPHA))
184
185#define arm_2d_rgb888_fill_colour_with_opacity( \
186 __DES_ADDR, /* target tile address */ \
187 __REGION_ADDR,/* region address */ \
188 __COLOUR, /* colour */ \
189 __ALPHA) /* alpha */ \
190 arm_2dp_cccn888_fill_colour_with_opacity( NULL, \
191 (__DES_ADDR), \
192 (__REGION_ADDR), \
193 (arm_2d_color_cccn888_t){(__COLOUR).tValue}, \
194 (__ALPHA))
195
196
197#define arm_2d_cccn888_fill_colour_with_opacity( \
198 __DES_ADDR, /* target tile address */ \
199 __REGION_ADDR,/* region address */ \
200 __COLOUR, /* colour */ \
201 __ALPHA) /* alpha */ \
202 arm_2dp_cccn888_fill_colour_with_opacity( NULL, \
203 (__DES_ADDR), \
204 (__REGION_ADDR), \
205 (__COLOUR), \
206 (__ALPHA))
207
208#define arm_2d_gray8_fill_colour_with_mask( \
209 __TARGET_ADDR, /* target tile address*/ \
210 __REGION_ADDR, /* target region address*/\
211 __ALPHA_ADDR, /* alpha tile address */ \
212 __COLOUR) /* colour */ \
213 arm_2dp_gray8_fill_colour_with_mask( \
214 NULL, \
215 (__TARGET_ADDR), \
216 (__REGION_ADDR), \
217 (__ALPHA_ADDR), \
218 (__COLOUR))
219
220#define arm_2d_rgb565_fill_colour_with_mask( \
221 __TARGET_ADDR, /* target tile address*/ \
222 __REGION_ADDR, /* target region address*/\
223 __ALPHA_ADDR, /* alpha tile address */ \
224 __COLOUR) /* colour */ \
225 arm_2dp_rgb565_fill_colour_with_mask( \
226 NULL, \
227 (__TARGET_ADDR), \
228 (__REGION_ADDR), \
229 (__ALPHA_ADDR), \
230 (__COLOUR))
231
232#define arm_2d_rgb888_fill_colour_with_mask( \
233 __TARGET_ADDR, /* target tile address*/ \
234 __REGION_ADDR, /* target region address*/\
235 __ALPHA_ADDR, /* alpha tile address */ \
236 __COLOUR) /* colour */ \
237 arm_2dp_cccn888_fill_colour_with_mask( \
238 NULL, \
239 (__TARGET_ADDR), \
240 (__REGION_ADDR), \
241 (__ALPHA_ADDR), \
242 (arm_2d_color_cccn888_t){(__COLOUR).tValue})
243
244#define arm_2d_cccn888_fill_colour_with_mask( \
245 __TARGET_ADDR, /* target tile address*/ \
246 __REGION_ADDR, /* target region address*/\
247 __ALPHA_ADDR, /* alpha tile address */ \
248 __COLOUR) /* colour */ \
249 arm_2dp_cccn888_fill_colour_with_mask( \
250 NULL, \
251 (__TARGET_ADDR), \
252 (__REGION_ADDR), \
253 (__ALPHA_ADDR), \
254 (__COLOUR))
255
256#define arm_2d_gray8_fill_colour_with_mask_and_opacity( \
257 __TARGET_ADDR, /* target tile address*/ \
258 __REGION_ADDR, /* target region address*/\
259 __ALPHA_ADDR, /* alpha tile address */ \
260 __COLOUR, /* colour */ \
261 __OPACITY) \
262 arm_2dp_gray8_fill_colour_with_mask_and_opacity( \
263 NULL, \
264 (__TARGET_ADDR), \
265 (__REGION_ADDR), \
266 (__ALPHA_ADDR), \
267 (__COLOUR), \
268 (__OPACITY))
269
270#define arm_2d_rgb565_fill_colour_with_mask_and_opacity( \
271 __TARGET_ADDR, /* target tile address*/ \
272 __REGION_ADDR, /* target region address*/\
273 __ALPHA_ADDR, /* alpha tile address */ \
274 __COLOUR, /* colour */ \
275 __OPACITY) \
276 arm_2dp_rgb565_fill_colour_with_mask_and_opacity( \
277 NULL, \
278 (__TARGET_ADDR), \
279 (__REGION_ADDR), \
280 (__ALPHA_ADDR), \
281 (__COLOUR), \
282 (__OPACITY))
283
284#define arm_2d_rgb888_fill_colour_with_mask_and_opacity( \
285 __TARGET_ADDR, /* target tile address*/ \
286 __REGION_ADDR, /* target region address*/\
287 __ALPHA_ADDR, /* alpha tile address */ \
288 __COLOUR, /* colour */ \
289 __OPACITY) \
290 arm_2dp_cccn888_fill_colour_with_mask_and_opacity( \
291 NULL, \
292 (__TARGET_ADDR), \
293 (__REGION_ADDR), \
294 (__ALPHA_ADDR), \
295 (arm_2d_color_cccn888_t){(__COLOUR).tValue}, \
296 (__OPACITY))
297
298#define arm_2d_cccn888_fill_colour_with_mask_and_opacity( \
299 __TARGET_ADDR, /* target tile address*/ \
300 __REGION_ADDR, /* target region address*/\
301 __ALPHA_ADDR, /* alpha tile address */ \
302 __COLOUR, /* colour */ \
303 __OPACITY) \
304 arm_2dp_cccn888_fill_colour_with_mask_and_opacity( \
305 NULL, \
306 (__TARGET_ADDR), \
307 (__REGION_ADDR), \
308 (__ALPHA_ADDR), \
309 (__COLOUR), \
310 (__OPACITY))
311
312#define arm_2d_gray8_alpha_blending_with_colour_keying( \
313 __SRC_ADDR, /* source tile address */ \
314 __DES_ADDR, /* target tile address */ \
315 __REGION_ADDR,/* region address */ \
316 __ALPHA, /* colour */ \
317 __COLOUR) /* alpha */ \
318 arm_2dp_gray8_alpha_blending_with_colour_keying( \
319 NULL, \
320 (__SRC_ADDR), \
321 (__DES_ADDR), \
322 (__REGION_ADDR), \
323 (__ALPHA), \
324 (__COLOUR))
325
326#define arm_2d_rgb565_alpha_blending_with_colour_keying( \
327 __SRC_ADDR, /* source tile address */ \
328 __DES_ADDR, /* target tile address */ \
329 __REGION_ADDR,/* region address */ \
330 __ALPHA, /* colour */ \
331 __COLOUR) /* alpha */ \
332 arm_2dp_rgb565_alpha_blending_with_colour_keying( \
333 NULL, \
334 (__SRC_ADDR), \
335 (__DES_ADDR), \
336 (__REGION_ADDR), \
337 (__ALPHA), \
338 (__COLOUR))
339
340#define arm_2d_rgb888_alpha_blending_with_colour_keying( \
341 __SRC_ADDR, /* source tile address */ \
342 __DES_ADDR, /* target tile address */ \
343 __REGION_ADDR,/* region address */ \
344 __ALPHA, /* colour */ \
345 __COLOUR) /* alpha */ \
346 arm_2dp_cccn888_alpha_blending_with_colour_keying( \
347 NULL, \
348 (__SRC_ADDR), \
349 (__DES_ADDR), \
350 (__REGION_ADDR), \
351 (__ALPHA), \
352 (arm_2d_color_cccn888_t){(__COLOUR).tValue})
353
354#define arm_2d_cccn888_alpha_blending_with_colour_keying( \
355 __SRC_ADDR, /* source tile address */ \
356 __DES_ADDR, /* target tile address */ \
357 __REGION_ADDR,/* region address */ \
358 __ALPHA, /* colour */ \
359 __COLOUR) /* alpha */ \
360 arm_2dp_cccn888_alpha_blending_with_colour_keying( \
361 NULL, \
362 (__SRC_ADDR), \
363 (__DES_ADDR), \
364 (__REGION_ADDR), \
365 (__ALPHA), \
366 (__COLOUR))
367
368#define arm_2d_gray8_tile_copy_with_masks( \
369 __SRC_ADDR, /* source tile address */ \
370 __SRC_MSK_ADDR, /* source mask address */ \
371 __DES_ADDR, /* target tile address */ \
372 __DES_MSK_ADDR, /* target mask address */ \
373 __REGION, /* region address */ \
374 __MODE) /* copy mode */ \
375 arm_2dp_gray8_tile_copy_with_masks( \
376 NULL, \
377 (__SRC_ADDR), \
378 (__SRC_MSK_ADDR), \
379 (__DES_ADDR), \
380 (__DES_MSK_ADDR), \
381 (__REGION), \
382 (__MODE))
383
384#define arm_2d_rgb565_tile_copy_with_masks( \
385 __SRC_ADDR, /* source tile address */ \
386 __SRC_MSK_ADDR, /* source mask address */ \
387 __DES_ADDR, /* target tile address */ \
388 __DES_MSK_ADDR, /* target mask address */ \
389 __REGION, /* region address */ \
390 __MODE) /* copy mode */ \
391 arm_2dp_rgb565_tile_copy_with_masks( \
392 NULL, \
393 (__SRC_ADDR), \
394 (__SRC_MSK_ADDR), \
395 (__DES_ADDR), \
396 (__DES_MSK_ADDR), \
397 (__REGION), \
398 (__MODE))
399
400#define arm_2d_rgb888_tile_copy_with_masks \
401 arm_2d_cccn888_tile_copy_with_masks
402
403#define arm_2d_cccn888_tile_copy_with_masks( \
404 __SRC_ADDR, /* source tile address */ \
405 __SRC_MSK_ADDR, /* source mask address */ \
406 __DES_ADDR, /* target tile address */ \
407 __DES_MSK_ADDR, /* target mask address */ \
408 __REGION, /* region address */ \
409 __MODE) /* copy mode */ \
410 arm_2dp_cccn888_tile_copy_with_masks( \
411 NULL, \
412 (__SRC_ADDR), \
413 (__SRC_MSK_ADDR), \
414 (__DES_ADDR), \
415 (__DES_MSK_ADDR), \
416 (__REGION), \
417 (__MODE))
418
419#define arm_2d_gray8_tile_copy_with_src_mask( \
420 __SRC_ADDR, /* source tile address */ \
421 __SRC_MSK_ADDR, /* source mask address */ \
422 __DES_ADDR, /* target tile address */ \
423 __REGION, /* region address */ \
424 __MODE) /* copy mode */ \
425 arm_2dp_gray8_tile_copy_with_src_mask( \
426 NULL, \
427 (__SRC_ADDR), \
428 (__SRC_MSK_ADDR), \
429 (__DES_ADDR), \
430 (__REGION), \
431 (__MODE))
432
433
434#define arm_2d_rgb565_tile_copy_with_src_mask( \
435 __SRC_ADDR, /* source tile address */ \
436 __SRC_MSK_ADDR, /* source mask address */ \
437 __DES_ADDR, /* target tile address */ \
438 __REGION, /* region address */ \
439 __MODE) /* copy mode */ \
440 arm_2dp_rgb565_tile_copy_with_src_mask( \
441 NULL, \
442 (__SRC_ADDR), \
443 (__SRC_MSK_ADDR), \
444 (__DES_ADDR), \
445 (__REGION), \
446 (__MODE))
447
448
449#define arm_2d_rgb888_tile_copy_with_src_mask \
450 arm_2d_cccn888_tile_copy_with_src_mask
451
452#define arm_2d_cccn888_tile_copy_with_src_mask( \
453 __SRC_ADDR, /* source tile address */ \
454 __SRC_MSK_ADDR, /* source mask address */ \
455 __DES_ADDR, /* target tile address */ \
456 __REGION, /* region address */ \
457 __MODE) /* copy mode */ \
458 arm_2dp_cccn888_tile_copy_with_src_mask( \
459 NULL, \
460 (__SRC_ADDR), \
461 (__SRC_MSK_ADDR), \
462 (__DES_ADDR), \
463 (__REGION), \
464 (__MODE))
465
466#define arm_2d_gray8_tile_copy_with_des_mask( \
467 __SRC_ADDR, /* source tile address */ \
468 __DES_ADDR, /* target tile address */ \
469 __DES_MSK_ADDR, /* target mask address */ \
470 __REGION, /* region address */ \
471 __MODE) /* copy mode */ \
472 arm_2dp_gray8_tile_copy_with_des_mask( \
473 NULL, \
474 (__SRC_ADDR), \
475 (__DES_ADDR), \
476 (__DES_MSK_ADDR), \
477 (__REGION), \
478 (__MODE))
479
480
481#define arm_2d_rgb565_tile_copy_with_des_mask( \
482 __SRC_ADDR, /* source tile address */ \
483 __DES_ADDR, /* target tile address */ \
484 __DES_MSK_ADDR, /* target mask address */ \
485 __REGION, /* region address */ \
486 __MODE) /* copy mode */ \
487 arm_2dp_rgb565_tile_copy_with_des_mask( \
488 NULL, \
489 (__SRC_ADDR), \
490 (__DES_ADDR), \
491 (__DES_MSK_ADDR), \
492 (__REGION), \
493 (__MODE))
494
495#define arm_2d_rgb888_tile_copy_with_des_mask \
496 arm_2d_cccn888_tile_copy_with_des_mask
497
498#define arm_2d_cccn888_tile_copy_with_des_mask( \
499 __SRC_ADDR, /* source tile address */ \
500 __DES_ADDR, /* target tile address */ \
501 __DES_MSK_ADDR, /* target mask address */ \
502 __REGION, /* region address */ \
503 __MODE) /* copy mode */ \
504 arm_2dp_cccn888_tile_copy_with_des_mask( \
505 NULL, \
506 (__SRC_ADDR), \
507 (__DES_ADDR), \
508 (__DES_MSK_ADDR), \
509 (__REGION), \
510 (__MODE))
511
512/*============================ TYPES =========================================*/
513
514/*!
515 * \brief control block for alpha-blending operations
516 * \note arm_2d_op_alpha_t inherits from arm_2d_op_src_t explicitly
517 */
518typedef struct arm_2d_op_alpha_t {
520 struct {
521 const arm_2d_tile_t *ptTile; //!< target tile
522 const arm_2d_region_t *ptRegion; //!< target region
523 } Target; //!< target
524 struct {
525 const arm_2d_tile_t *ptTile; //!< source tile
526 }Source; //!< source
527 uint32_t wMode; //!< copy mode
528 uint8_t chRatio; //!< opacity
530
531
532/*!
533 * \brief control block for alpha-blending-with-colour-keying operations
534 * \note arm_2d_op_alpha_cl_key_t inherits from arm_2d_op_src_t explicitly
535 */
538 struct {
539 const arm_2d_tile_t *ptTile; //!< target tile
540 const arm_2d_region_t *ptRegion; //!< target region
541 } Target; //!< target
542 struct {
543 const arm_2d_tile_t *ptTile; //!< source tile
544 }Source; //!< source
545 uint32_t wMode; //!< copy mode
546 uint8_t chRatio; //!< opacity
547
548 union {
549 uint8_t chColour; //!< 8bit key colour
550 uint16_t hwColour; //!< 16bit key colour
551 uint32_t wColour; //!< 32bit key colour
552 };
554
555
556/*!
557 * \brief control block for colour-filling-with-mask operations
558 * \note arm_2d_op_fill_cl_msk_t inherits from arm_2d_op_src_t explicitly
559 */
562 struct {
563 const arm_2d_tile_t *ptTile; //!< target tile
564 const arm_2d_region_t *ptRegion; //!< target region
565 } Target; //!< target
566 struct {
567 const arm_2d_tile_t *ptTile; //!< Alpha Mask tile
568 } Mask; //!< mask
569 uint32_t wMode; //!< copy mode
570
571 union {
572 uint8_t chColour; //!< 8bit key colour
573 uint16_t hwColour; //!< 16bit key colour
574 uint32_t wColour; //!< 32bit key colour
575 };
577
578
579/*!
580 * \brief control block for colour-filling-with-mask-and-opacity operations
581 * \note arm_2d_op_fill_cl_msk_t inherits from arm_2d_op_src_t explicitly
582 */
585 struct {
586 const arm_2d_tile_t *ptTile; //!< target tile
587 const arm_2d_region_t *ptRegion; //!< target region
588 } Target; //!< target
589 struct {
590 const arm_2d_tile_t *ptTile; //!< Alpha Mask tile
591 } Mask; //!< mask
592 uint32_t wMode; //!< copy mode
593 union {
594 uint8_t chColour; //!< 8bit key colour
595 uint16_t hwColour; //!< 16bit key colour
596 uint32_t wColour; //!< 32bit key colour
597 };
598 uint8_t chRatio; //!< opacity
600
601/*!
602 * \brief control block for colour-filling-with-opacity operations
603 * \note arm_2d_op_fill_cl_t inherits from arm_2d_op_t explicitly
604 */
607 struct {
608 const arm_2d_tile_t *ptTile; //!< target tile
609 const arm_2d_region_t *ptRegion; //!< target region
610 } Target; //!< target
611 union {
612 uint8_t chColour; //!< 8bit key colour
613 uint16_t hwColour; //!< 16bit key colour
614 uint32_t wColour; //!< 32bit key colour
615 };
616 uint8_t chRatio; //!< opacity
618
619/*!
620 * \brief control block for copy with masks operations
621 *
622 */
624
625/*============================ GLOBAL VARIABLES ==============================*/
626/*============================ PROTOTYPES ====================================*/
627
628/*----------------------------------------------------------------------------*
629 * Copy tile to destination with specified transparency ratio (0~255) *
630 *----------------------------------------------------------------------------*/
631
632/*!
633 * \brief blend a source tile to a target tile with a specified opacity
634 * \param[in] ptOP the control block, NULL means using the default control block
635 * \param[in] ptSource the source tile
636 * \param[in] ptTarget the target tile
637 * \param[in] ptRegion the target region
638 * \param[in] chRatio the opacity
639 * \return arm_fsm_rt_t the operation result
640 */
641extern
642ARM_NONNULL(2,3)
644 const arm_2d_tile_t *ptSource,
645 const arm_2d_tile_t *ptTarget,
646 const arm_2d_region_t *ptRegion,
647 uint_fast8_t chRatio);
648
649/*!
650 * \brief blend a source tile to a target tile with a specified opacity
651 * \param[in] ptOP the control block, NULL means using the default control block
652 * \param[in] ptSource the source tile
653 * \param[in] ptTarget the target tile
654 * \param[in] ptRegion the target region
655 * \param[in] chRatio the opacity
656 * \return arm_fsm_rt_t the operation result
657 */
658extern
659ARM_NONNULL(2,3)
661 const arm_2d_tile_t *ptSource,
662 const arm_2d_tile_t *ptTarget,
663 const arm_2d_region_t *ptRegion,
664 uint_fast8_t chRatio);
665
666/*!
667 * \brief blend a source tile to a target tile with a specified opacity
668 * \param[in] ptOP the control block, NULL means using the default control block
669 * \param[in] ptSource the source tile
670 * \param[in] ptTarget the target tile
671 * \param[in] ptRegion the target region
672 * \param[in] chRatio the opacity
673 * \return arm_fsm_rt_t the operation result
674 */
675extern
676ARM_NONNULL(2,3)
678 const arm_2d_tile_t *ptSource,
679 const arm_2d_tile_t *ptTarget,
680 const arm_2d_region_t *ptRegion,
681 uint_fast8_t chRatio);
682
683
684/*----------------------------------------------------------------------------*
685 * Fill a specified region with a given colour and transparency ratio (0~255) *
686 *----------------------------------------------------------------------------*/
687
688/*!
689 * \brief fill a target tile with a given gray8 colour and a specified opacity
690 * \param[in] ptOP the control block, NULL means using the default control block
691 * \param[in] ptTarget the target tile
692 * \param[in] ptRegion the target region
693 * \param[in] chColour a gray8 colour
694 * \param[in] chRatio the opacity
695 * \return arm_fsm_rt_t the operation result
696 */
697extern
698ARM_NONNULL(2)
701 const arm_2d_tile_t *ptTarget,
702 const arm_2d_region_t *ptRegion,
703 uint8_t chColour,
704 uint_fast8_t chRatio);
705
706/*!
707 * \brief fill a target tile with a given rgb565 colour and a specified opacity
708 * \param[in] ptOP the control block, NULL means using the default control block
709 * \param[in] ptTarget the target tile
710 * \param[in] ptRegion the target region
711 * \param[in] tColour a rgb565 colour
712 * \param[in] chRatio the opacity
713 * \return arm_fsm_rt_t the operation result
714 */
715extern
716ARM_NONNULL(2)
719 const arm_2d_tile_t *ptTarget,
720 const arm_2d_region_t *ptRegion,
721 arm_2d_color_rgb565_t tColour,
722 uint_fast8_t chRatio);
723
724/*!
725 * \brief fill a target tile with a given cccn888 colour and a specified opacity
726 * \param[in] ptOP the control block, NULL means using the default control block
727 * \param[in] ptTarget the target tile
728 * \param[in] ptRegion the target region
729 * \param[in] tColour a cccn888 colour
730 * \param[in] chRatio the opacity
731 * \return arm_fsm_rt_t the operation result
732 */
733extern
734ARM_NONNULL(2)
737 const arm_2d_tile_t *ptTarget,
738 const arm_2d_region_t *ptRegion,
740 uint_fast8_t chRatio);
741
742/*----------------------------------------------------------------------------*
743 * Fill tile with a specified colour and an alpha mask *
744 *----------------------------------------------------------------------------*/
745
746/*!
747 * \brief fill a target tile with a given gray8 colour and a mask on target side
748 * \param[in] ptOP the control block, NULL means using the default control block
749 * \param[in] ptTarget the target tile
750 * \param[in] ptRegion the target region
751 * \param[in] ptAlpha the mask on the target side
752 * \param[in] chColour a gray8 colour
753 * \return arm_fsm_rt_t the operation result
754 */
755extern
756ARM_NONNULL(2,4)
759 const arm_2d_tile_t *ptTarget,
760 const arm_2d_region_t *ptRegion,
761 const arm_2d_tile_t *ptAlpha,
762 uint8_t chColour);
763
764/*!
765 * \brief fill a target tile with a given rgb565 colour and a mask on target side
766 * \param[in] ptOP the control block, NULL means using the default control block
767 * \param[in] ptTarget the target tile
768 * \param[in] ptRegion the target region
769 * \param[in] ptAlpha the mask on the target side
770 * \param[in] tColour a rgb565 colour
771 * \return arm_fsm_rt_t the operation result
772 */
773extern
774ARM_NONNULL(2,4)
777 const arm_2d_tile_t *ptTarget,
778 const arm_2d_region_t *ptRegion,
779 const arm_2d_tile_t *ptAlpha,
780 arm_2d_color_rgb565_t tColour);
781
782/*!
783 * \brief fill a target tile with a given cccn888 colour and a mask on target side
784 * \param[in] ptOP the control block, NULL means using the default control block
785 * \param[in] ptTarget the target tile
786 * \param[in] ptRegion the target region
787 * \param[in] ptAlpha the mask on the target side
788 * \param[in] tColour a cccn888 colour
789 * \return arm_fsm_rt_t the operation result
790 */
791extern
792ARM_NONNULL(2,4)
795 const arm_2d_tile_t *ptTarget,
796 const arm_2d_region_t *ptRegion,
797 const arm_2d_tile_t *ptAlpha,
798 arm_2d_color_cccn888_t tColour);
799
800/*----------------------------------------------------------------------------*
801 * Fill tile with a specified colour, an alpha mask and a specified opacity *
802 *----------------------------------------------------------------------------*/
803
804/*!
805 * \brief fill a target tile with a given gray8 colour, a mask on target side and an opacity
806 * \param[in] ptOP the control block, NULL means using the default control block
807 * \param[in] ptTarget the target tile
808 * \param[in] ptRegion the target region
809 * \param[in] ptAlpha the mask on the target side
810 * \param[in] chColour a gray8 colour
811 * \param[in] chOpacity the opacity
812 * \return arm_fsm_rt_t the operation result
813 */
814extern
815ARM_NONNULL(2,4)
818 const arm_2d_tile_t *ptTarget,
819 const arm_2d_region_t *ptRegion,
820 const arm_2d_tile_t *ptAlpha,
821 uint8_t chColour,
822 uint8_t chOpacity);
823
824/*!
825 * \brief fill a target tile with a given rgb565 colour, a mask on target side and an opacity
826 * \param[in] ptOP the control block, NULL means using the default control block
827 * \param[in] ptTarget the target tile
828 * \param[in] ptRegion the target region
829 * \param[in] ptAlpha the mask on the target side
830 * \param[in] tColour a rgb565 colour
831 * \param[in] chOpacity the opacity
832 * \return arm_fsm_rt_t the operation result
833 */
834extern
835ARM_NONNULL(2,4)
838 const arm_2d_tile_t *ptTarget,
839 const arm_2d_region_t *ptRegion,
840 const arm_2d_tile_t *ptAlpha,
841 arm_2d_color_rgb565_t tColour,
842 uint8_t chOpacity);
843
844/*!
845 * \brief fill a target tile with a given cccn888 colour, a mask on target side and an opacity
846 * \param[in] ptOP the control block, NULL means using the default control block
847 * \param[in] ptTarget the target tile
848 * \param[in] ptRegion the target region
849 * \param[in] ptAlpha the mask on the target side
850 * \param[in] tColour a cccn888 colour
851 * \param[in] chOpacity the opacity
852 * \return arm_fsm_rt_t the operation result
853 */
854extern
855ARM_NONNULL(2,4)
858 const arm_2d_tile_t *ptTarget,
859 const arm_2d_region_t *ptRegion,
860 const arm_2d_tile_t *ptAlpha,
862 uint8_t chOpacity);
863
864/*----------------------------------------------------------------------------*
865 * Blend tile and background with a specified transparency ratio(0~255) and a *
866 * specified transparency color mask *
867 *----------------------------------------------------------------------------*/
868
869/*!
870 * \brief blend a source tile to a target tile with a opacity and colour keying
871 * \param[in] ptOP the control block, NULL means using the default control block
872 * \param[in] ptSource the source tile
873 * \param[in] ptTarget the target tile
874 * \param[in] ptRegion the target region
875 * \param[in] chRatio the opacity
876 * \param[in] chColour the key colour
877 * \return arm_fsm_rt_t the operation result
878 */
879extern
880ARM_NONNULL(2,3)
883 const arm_2d_tile_t *ptSource,
884 const arm_2d_tile_t *ptTarget,
885 const arm_2d_region_t *ptRegion,
886 uint_fast8_t chRatio,
887 uint8_t chColour);
888
889/*!
890 * \brief blend a source tile to a target tile with a opacity and colour keying
891 * \param[in] ptOP the control block, NULL means using the default control block
892 * \param[in] ptSource the source tile
893 * \param[in] ptTarget the target tile
894 * \param[in] ptRegion the target region
895 * \param[in] chRatio the opacity
896 * \param[in] tColour the key colour
897 * \return arm_fsm_rt_t the operation result
898 */
899extern
900ARM_NONNULL(2,3)
903 const arm_2d_tile_t *ptSource,
904 const arm_2d_tile_t *ptTarget,
905 const arm_2d_region_t *ptRegion,
906 uint_fast8_t chRatio,
907 arm_2d_color_rgb565_t tColour);
908
909/*!
910 * \brief blend a source tile to a target tile with a opacity and colour keying
911 * \param[in] ptOP the control block, NULL means using the default control block
912 * \param[in] ptSource the source tile
913 * \param[in] ptTarget the target tile
914 * \param[in] ptRegion the target region
915 * \param[in] chRatio the opacity
916 * \param[in] tColour the key colour
917 * \return arm_fsm_rt_t the operation result
918 */
919extern
920ARM_NONNULL(2,3)
923 const arm_2d_tile_t *ptSource,
924 const arm_2d_tile_t *ptTarget,
925 const arm_2d_region_t *ptRegion,
926 uint_fast8_t chRatio,
927 arm_2d_color_cccn888_t tColour);
928
929/*----------------------------------------------------------------------------*
930 * Copy tile to destination with both a source mask and a target mask *
931 *----------------------------------------------------------------------------*/
932
933/*!
934 * \brief copy a source tile to a target tile with masks in a given mode
935 * \param[in] ptOP the control block, NULL means using the default control block
936 * \param[in] ptSource the source tile
937 * \param[in] ptSrcMask the mask on the source side
938 * \param[in] ptTarget the target tile
939 * \param[in] ptDesMask the mask on the target side
940 * \param[in] ptRegion the target region
941 * \param[in] wMode the copy mode
942 * \return arm_fsm_rt_t the operation result
943 */
944extern
945ARM_NONNULL(2,3,4,5)
947 arm_2d_op_cp_msk_t *ptOP,
948 const arm_2d_tile_t *ptSource,
949 const arm_2d_tile_t *ptSrcMask,
950 const arm_2d_tile_t *ptTarget,
951 const arm_2d_tile_t *ptDesMask,
952 const arm_2d_region_t *ptRegion,
953 uint32_t wMode);
954
955/*!
956 * \brief copy a source tile to a target tile with masks in a given mode
957 * \param[in] ptOP the control block, NULL means using the default control block
958 * \param[in] ptSource the source tile
959 * \param[in] ptSrcMask the mask on the source side
960 * \param[in] ptTarget the target tile
961 * \param[in] ptDesMask the mask on the target side
962 * \param[in] ptRegion the target region
963 * \param[in] wMode the copy mode
964 * \return arm_fsm_rt_t the operation result
965 */
966extern
967ARM_NONNULL(2,3,4,5)
969 arm_2d_op_cp_msk_t *ptOP,
970 const arm_2d_tile_t *ptSource,
971 const arm_2d_tile_t *ptSrcMask,
972 const arm_2d_tile_t *ptTarget,
973 const arm_2d_tile_t *ptDesMask,
974 const arm_2d_region_t *ptRegion,
975 uint32_t wMode);
976
977/*!
978 * \brief copy a source tile to a target tile with masks in a given mode
979 * \param[in] ptOP the control block, NULL means using the default control block
980 * \param[in] ptSource the source tile
981 * \param[in] ptSrcMask the mask on the source side
982 * \param[in] ptTarget the target tile
983 * \param[in] ptDesMask the mask on the target side
984 * \param[in] ptRegion the target region
985 * \param[in] wMode the copy mode
986 * \return arm_fsm_rt_t the operation result
987 */
988extern
989ARM_NONNULL(2,3,4,5)
991 arm_2d_op_cp_msk_t *ptOP,
992 const arm_2d_tile_t *ptSource,
993 const arm_2d_tile_t *ptSrcMask,
994 const arm_2d_tile_t *ptTarget,
995 const arm_2d_tile_t *ptDesMask,
996 const arm_2d_region_t *ptRegion,
997 uint32_t wMode);
998
999/*----------------------------------------------------------------------------*
1000 * Copy tile to destination with a specified source mask *
1001 *----------------------------------------------------------------------------*/
1002/*!
1003 * \brief copy a source tile to a target tile with a source mask in a given mode
1004 * \param[in] ptOP the control block, NULL means using the default control block
1005 * \param[in] ptSource the source tile
1006 * \param[in] ptSrcMask the mask on the source side
1007 * \param[in] ptTarget the target tile
1008 * \param[in] ptRegion the target region
1009 * \param[in] wMode the copy mode
1010 * \return arm_fsm_rt_t the operation result
1011 */
1012extern
1013ARM_NONNULL(2,3,4)
1015 arm_2d_op_cp_msk_t *ptOP,
1016 const arm_2d_tile_t *ptSource,
1017 const arm_2d_tile_t *ptSrcMask,
1018 const arm_2d_tile_t *ptTarget,
1019 const arm_2d_region_t *ptRegion,
1020 uint32_t wMode);
1021
1022/*!
1023 * \brief copy a source tile to a target tile with a source mask in a given mode
1024 * \param[in] ptOP the control block, NULL means using the default control block
1025 * \param[in] ptSource the source tile
1026 * \param[in] ptSrcMask the mask on the source side
1027 * \param[in] ptTarget the target tile
1028 * \param[in] ptRegion the target region
1029 * \param[in] wMode the copy mode
1030 * \return arm_fsm_rt_t the operation result
1031 */
1032extern
1033ARM_NONNULL(2,3,4)
1035 arm_2d_op_cp_msk_t *ptOP,
1036 const arm_2d_tile_t *ptSource,
1037 const arm_2d_tile_t *ptSrcMask,
1038 const arm_2d_tile_t *ptTarget,
1039 const arm_2d_region_t *ptRegion,
1040 uint32_t wMode);
1041
1042/*!
1043 * \brief copy a source tile to a target tile with a source mask in a given mode
1044 * \param[in] ptOP the control block, NULL means using the default control block
1045 * \param[in] ptSource the source tile
1046 * \param[in] ptSrcMask the mask on the source side
1047 * \param[in] ptTarget the target tile
1048 * \param[in] ptRegion the target region
1049 * \param[in] wMode the copy mode
1050 * \return arm_fsm_rt_t the operation result
1051 */
1052extern
1053ARM_NONNULL(2,3,4)
1055 arm_2d_op_cp_msk_t *ptOP,
1056 const arm_2d_tile_t *ptSource,
1057 const arm_2d_tile_t *ptSrcMask,
1058 const arm_2d_tile_t *ptTarget,
1059 const arm_2d_region_t *ptRegion,
1060 uint32_t wMode);
1061
1062/*----------------------------------------------------------------------------*
1063 * Copy tile to destination with a specified target mask *
1064 *----------------------------------------------------------------------------*/
1065
1066/*!
1067 * \brief copy a source tile to a target tile with a target mask in a given mode
1068 * \param[in] ptOP the control block, NULL means using the default control block
1069 * \param[in] ptSource the source tile
1070 * \param[in] ptTarget the target tile
1071 * \param[in] ptDesMask the mask on the target side
1072 * \param[in] ptRegion the target region
1073 * \param[in] wMode the copy mode
1074 * \return arm_fsm_rt_t the operation result
1075 */
1076extern
1077ARM_NONNULL(2,3,4)
1079 arm_2d_op_cp_msk_t *ptOP,
1080 const arm_2d_tile_t *ptSource,
1081 const arm_2d_tile_t *ptTarget,
1082 const arm_2d_tile_t *ptDesMask,
1083 const arm_2d_region_t *ptRegion,
1084 uint32_t wMode);
1085
1086/*!
1087 * \brief copy a source tile to a target tile with a target mask in a given mode
1088 * \param[in] ptOP the control block, NULL means using the default control block
1089 * \param[in] ptSource the source tile
1090 * \param[in] ptTarget the target tile
1091 * \param[in] ptDesMask the mask on the target side
1092 * \param[in] ptRegion the target region
1093 * \param[in] wMode the copy mode
1094 * \return arm_fsm_rt_t the operation result
1095 */
1096extern
1097ARM_NONNULL(2,3,4)
1099 arm_2d_op_cp_msk_t *ptOP,
1100 const arm_2d_tile_t *ptSource,
1101 const arm_2d_tile_t *ptTarget,
1102 const arm_2d_tile_t *ptDesMask,
1103 const arm_2d_region_t *ptRegion,
1104 uint32_t wMode);
1105
1106/*!
1107 * \brief copy a source tile to a target tile with a target mask in a given mode
1108 * \param[in] ptOP the control block, NULL means using the default control block
1109 * \param[in] ptSource the source tile
1110 * \param[in] ptTarget the target tile
1111 * \param[in] ptDesMask the mask on the target side
1112 * \param[in] ptRegion the target region
1113 * \param[in] wMode the copy mode
1114 * \return arm_fsm_rt_t the operation result
1115 */
1116extern
1117ARM_NONNULL(2,3,4)
1119 arm_2d_op_cp_msk_t *ptOP,
1120 const arm_2d_tile_t *ptSource,
1121 const arm_2d_tile_t *ptTarget,
1122 const arm_2d_tile_t *ptDesMask,
1123 const arm_2d_region_t *ptRegion,
1124 uint32_t wMode);
1125
1126/*! @} */
1127
1128#if defined(__clang__)
1129#pragma clang diagnostic pop
1130#endif
1131
1132#ifdef __cplusplus
1133}
1134#endif
1135
1136#endif