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
39
extern
"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
*/
518
typedef
struct
arm_2d_op_alpha_t
{
519
inherit
(
arm_2d_op_core_t
);
//!< base
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
529
}
arm_2d_op_alpha_t
;
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
*/
536
typedef
struct
arm_2d_op_alpha_cl_key_t
{
537
inherit
(
arm_2d_op_core_t
);
//!< base
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
};
553
}
arm_2d_op_alpha_cl_key_t
;
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
*/
560
typedef
struct
arm_2d_op_fill_cl_msk_t
{
561
inherit
(
arm_2d_op_core_t
);
//!< base
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
};
576
}
arm_2d_op_fill_cl_msk_t
;
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
*/
583
typedef
struct
arm_2d_op_alpha_fill_cl_msk_opc_t
{
584
inherit
(
arm_2d_op_core_t
);
//!< core
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
599
}
arm_2d_op_alpha_fill_cl_msk_opc_t
;
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
*/
605
typedef
struct
arm_2d_op_fill_cl_opc_t
{
606
inherit
(
arm_2d_op_core_t
);
//!< base
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
617
}
arm_2d_op_fill_cl_opc_t
;
618
619
/*!
620
* \brief control block for copy with masks operations
621
*
622
*/
623
typedef
arm_2d_op_src_msk_t
arm_2d_op_cp_msk_t
;
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
*/
641
extern
642
ARM_NONNULL(2,3)
643
arm_fsm_rt_t
arm_2dp_gray8_alpha_blending
(
arm_2d_op_alpha_t
*ptOP,
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
*/
658
extern
659
ARM_NONNULL(2,3)
660
arm_fsm_rt_t
arm_2dp_rgb565_alpha_blending
(
arm_2d_op_alpha_t
*ptOP,
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
*/
675
extern
676
ARM_NONNULL(2,3)
677
arm_fsm_rt_t
arm_2dp_cccn888_alpha_blending
(
arm_2d_op_alpha_t
*ptOP,
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
*/
697
extern
698
ARM_NONNULL(2)
699
arm_fsm_rt_t
arm_2dp_gray8_fill_colour_with_opacity
(
700
arm_2d_op_fill_cl_opc_t
*ptOP,
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
*/
715
extern
716
ARM_NONNULL(2)
717
arm_fsm_rt_t
arm_2dp_rgb565_fill_colour_with_opacity
(
718
arm_2d_op_fill_cl_opc_t
*ptOP,
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
*/
733
extern
734
ARM_NONNULL(2)
735
arm_fsm_rt_t
arm_2dp_cccn888_fill_colour_with_opacity
(
736
arm_2d_op_fill_cl_opc_t
*ptOP,
737
const
arm_2d_tile_t
*ptTarget,
738
const
arm_2d_region_t
*ptRegion,
739
arm_2d_color_cccn888_t
tColour,
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
*/
755
extern
756
ARM_NONNULL(2,4)
757
arm_fsm_rt_t
arm_2dp_gray8_fill_colour_with_mask
(
758
arm_2d_op_fill_cl_msk_t
*ptOP,
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
*/
773
extern
774
ARM_NONNULL(2,4)
775
arm_fsm_rt_t
arm_2dp_rgb565_fill_colour_with_mask
(
776
arm_2d_op_fill_cl_msk_t
*ptOP,
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
*/
791
extern
792
ARM_NONNULL(2,4)
793
arm_fsm_rt_t
arm_2dp_cccn888_fill_colour_with_mask
(
794
arm_2d_op_fill_cl_msk_t
*ptOP,
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
*/
814
extern
815
ARM_NONNULL(2,4)
816
arm_fsm_rt_t
arm_2dp_gray8_fill_colour_with_mask_and_opacity
(
817
arm_2d_op_alpha_fill_cl_msk_opc_t
*ptOP,
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
*/
834
extern
835
ARM_NONNULL(2,4)
836
arm_fsm_rt_t
arm_2dp_rgb565_fill_colour_with_mask_and_opacity
(
837
arm_2d_op_alpha_fill_cl_msk_opc_t
*ptOP,
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
*/
854
extern
855
ARM_NONNULL(2,4)
856
arm_fsm_rt_t
arm_2dp_cccn888_fill_colour_with_mask_and_opacity
(
857
arm_2d_op_alpha_fill_cl_msk_opc_t
*ptOP,
858
const
arm_2d_tile_t
*ptTarget,
859
const
arm_2d_region_t
*ptRegion,
860
const
arm_2d_tile_t
*ptAlpha,
861
arm_2d_color_cccn888_t
tColour,
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
*/
879
extern
880
ARM_NONNULL(2,3)
881
arm_fsm_rt_t
arm_2dp_gray8_alpha_blending_with_colour_keying
(
882
arm_2d_op_alpha_cl_key_t
*ptOP,
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
*/
899
extern
900
ARM_NONNULL(2,3)
901
arm_fsm_rt_t
arm_2dp_rgb565_alpha_blending_with_colour_keying
(
902
arm_2d_op_alpha_cl_key_t
*ptOP,
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
*/
919
extern
920
ARM_NONNULL(2,3)
921
arm_fsm_rt_t
arm_2dp_cccn888_alpha_blending_with_colour_keying
(
922
arm_2d_op_alpha_cl_key_t
*ptOP,
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
*/
944
extern
945
ARM_NONNULL(2,3,4,5)
946
arm_fsm_rt_t
arm_2dp_gray8_tile_copy_with_masks
(
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
*/
966
extern
967
ARM_NONNULL(2,3,4,5)
968
arm_fsm_rt_t
arm_2dp_rgb565_tile_copy_with_masks
(
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
*/
988
extern
989
ARM_NONNULL(2,3,4,5)
990
arm_fsm_rt_t
arm_2dp_cccn888_tile_copy_with_masks
(
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
*/
1012
extern
1013
ARM_NONNULL(2,3,4)
1014
arm_fsm_rt_t
arm_2dp_gray8_tile_copy_with_src_mask
(
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
*/
1032
extern
1033
ARM_NONNULL(2,3,4)
1034
arm_fsm_rt_t
arm_2dp_rgb565_tile_copy_with_src_mask
(
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
*/
1052
extern
1053
ARM_NONNULL(2,3,4)
1054
arm_fsm_rt_t
arm_2dp_cccn888_tile_copy_with_src_mask
(
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
*/
1076
extern
1077
ARM_NONNULL(2,3,4)
1078
arm_fsm_rt_t
arm_2dp_gray8_tile_copy_with_des_mask
(
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
*/
1096
extern
1097
ARM_NONNULL(2,3,4)
1098
arm_fsm_rt_t
arm_2dp_rgb565_tile_copy_with_des_mask
(
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
*/
1116
extern
1117
ARM_NONNULL(2,3,4)
1118
arm_fsm_rt_t
arm_2dp_cccn888_tile_copy_with_des_mask
(
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
Library
Include
arm_2d_alpha_blending.h