2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
14 #include "aom/aom_integer.h"
15 #include "aom_ports/mem.h"
16 #include "aom_dsp/aom_dsp_common.h"
17 #include "aom_dsp/blend.h"
19 #include "config/aom_dsp_rtcd.h"
21 void aom_blend_a64_hmask_c(uint8_t *dst
, uint32_t dst_stride
,
22 const uint8_t *src0
, uint32_t src0_stride
,
23 const uint8_t *src1
, uint32_t src1_stride
,
24 const uint8_t *mask
, int w
, int h
) {
27 assert(IMPLIES(src0
== dst
, src0_stride
== dst_stride
));
28 assert(IMPLIES(src1
== dst
, src1_stride
== dst_stride
));
32 assert(IS_POWER_OF_TWO(h
));
33 assert(IS_POWER_OF_TWO(w
));
35 for (i
= 0; i
< h
; ++i
) {
36 for (j
= 0; j
< w
; ++j
) {
37 dst
[i
* dst_stride
+ j
] = AOM_BLEND_A64(
38 mask
[j
], src0
[i
* src0_stride
+ j
], src1
[i
* src1_stride
+ j
]);
43 #if CONFIG_AV1_HIGHBITDEPTH
44 void aom_highbd_blend_a64_hmask_c(uint8_t *dst_8
, uint32_t dst_stride
,
45 const uint8_t *src0_8
, uint32_t src0_stride
,
46 const uint8_t *src1_8
, uint32_t src1_stride
,
47 const uint8_t *mask
, int w
, int h
, int bd
) {
49 uint16_t *dst
= CONVERT_TO_SHORTPTR(dst_8
);
50 const uint16_t *src0
= CONVERT_TO_SHORTPTR(src0_8
);
51 const uint16_t *src1
= CONVERT_TO_SHORTPTR(src1_8
);
54 assert(IMPLIES(src0
== dst
, src0_stride
== dst_stride
));
55 assert(IMPLIES(src1
== dst
, src1_stride
== dst_stride
));
59 assert(IS_POWER_OF_TWO(h
));
60 assert(IS_POWER_OF_TWO(w
));
62 assert(bd
== 8 || bd
== 10 || bd
== 12);
64 for (i
= 0; i
< h
; ++i
) {
65 for (j
= 0; j
< w
; ++j
) {
66 dst
[i
* dst_stride
+ j
] = AOM_BLEND_A64(
67 mask
[j
], src0
[i
* src0_stride
+ j
], src1
[i
* src1_stride
+ j
]);