xref: /aosp_15_r20/external/libaom/aom_dsp/blend_a64_vmask.c (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker  * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker  *
4*77c1e3ccSAndroid Build Coastguard Worker  * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker  * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker  * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker  */
11*77c1e3ccSAndroid Build Coastguard Worker 
12*77c1e3ccSAndroid Build Coastguard Worker #include <assert.h>
13*77c1e3ccSAndroid Build Coastguard Worker 
14*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_integer.h"
15*77c1e3ccSAndroid Build Coastguard Worker #include "aom_ports/mem.h"
16*77c1e3ccSAndroid Build Coastguard Worker #include "aom_dsp/aom_dsp_common.h"
17*77c1e3ccSAndroid Build Coastguard Worker #include "aom_dsp/blend.h"
18*77c1e3ccSAndroid Build Coastguard Worker 
19*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_dsp_rtcd.h"
20*77c1e3ccSAndroid Build Coastguard Worker 
aom_blend_a64_vmask_c(uint8_t * dst,uint32_t dst_stride,const uint8_t * src0,uint32_t src0_stride,const uint8_t * src1,uint32_t src1_stride,const uint8_t * mask,int w,int h)21*77c1e3ccSAndroid Build Coastguard Worker void aom_blend_a64_vmask_c(uint8_t *dst, uint32_t dst_stride,
22*77c1e3ccSAndroid Build Coastguard Worker                            const uint8_t *src0, uint32_t src0_stride,
23*77c1e3ccSAndroid Build Coastguard Worker                            const uint8_t *src1, uint32_t src1_stride,
24*77c1e3ccSAndroid Build Coastguard Worker                            const uint8_t *mask, int w, int h) {
25*77c1e3ccSAndroid Build Coastguard Worker   int i, j;
26*77c1e3ccSAndroid Build Coastguard Worker 
27*77c1e3ccSAndroid Build Coastguard Worker   assert(IMPLIES(src0 == dst, src0_stride == dst_stride));
28*77c1e3ccSAndroid Build Coastguard Worker   assert(IMPLIES(src1 == dst, src1_stride == dst_stride));
29*77c1e3ccSAndroid Build Coastguard Worker 
30*77c1e3ccSAndroid Build Coastguard Worker   assert(h >= 1);
31*77c1e3ccSAndroid Build Coastguard Worker   assert(w >= 1);
32*77c1e3ccSAndroid Build Coastguard Worker   assert(IS_POWER_OF_TWO(h));
33*77c1e3ccSAndroid Build Coastguard Worker   assert(IS_POWER_OF_TWO(w));
34*77c1e3ccSAndroid Build Coastguard Worker 
35*77c1e3ccSAndroid Build Coastguard Worker   for (i = 0; i < h; ++i) {
36*77c1e3ccSAndroid Build Coastguard Worker     const int m = mask[i];
37*77c1e3ccSAndroid Build Coastguard Worker     for (j = 0; j < w; ++j) {
38*77c1e3ccSAndroid Build Coastguard Worker       dst[i * dst_stride + j] = AOM_BLEND_A64(m, src0[i * src0_stride + j],
39*77c1e3ccSAndroid Build Coastguard Worker                                               src1[i * src1_stride + j]);
40*77c1e3ccSAndroid Build Coastguard Worker     }
41*77c1e3ccSAndroid Build Coastguard Worker   }
42*77c1e3ccSAndroid Build Coastguard Worker }
43*77c1e3ccSAndroid Build Coastguard Worker 
44*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
aom_highbd_blend_a64_vmask_c(uint8_t * dst_8,uint32_t dst_stride,const uint8_t * src0_8,uint32_t src0_stride,const uint8_t * src1_8,uint32_t src1_stride,const uint8_t * mask,int w,int h,int bd)45*77c1e3ccSAndroid Build Coastguard Worker void aom_highbd_blend_a64_vmask_c(uint8_t *dst_8, uint32_t dst_stride,
46*77c1e3ccSAndroid Build Coastguard Worker                                   const uint8_t *src0_8, uint32_t src0_stride,
47*77c1e3ccSAndroid Build Coastguard Worker                                   const uint8_t *src1_8, uint32_t src1_stride,
48*77c1e3ccSAndroid Build Coastguard Worker                                   const uint8_t *mask, int w, int h, int bd) {
49*77c1e3ccSAndroid Build Coastguard Worker   int i, j;
50*77c1e3ccSAndroid Build Coastguard Worker   uint16_t *dst = CONVERT_TO_SHORTPTR(dst_8);
51*77c1e3ccSAndroid Build Coastguard Worker   const uint16_t *src0 = CONVERT_TO_SHORTPTR(src0_8);
52*77c1e3ccSAndroid Build Coastguard Worker   const uint16_t *src1 = CONVERT_TO_SHORTPTR(src1_8);
53*77c1e3ccSAndroid Build Coastguard Worker   (void)bd;
54*77c1e3ccSAndroid Build Coastguard Worker 
55*77c1e3ccSAndroid Build Coastguard Worker   assert(IMPLIES(src0 == dst, src0_stride == dst_stride));
56*77c1e3ccSAndroid Build Coastguard Worker   assert(IMPLIES(src1 == dst, src1_stride == dst_stride));
57*77c1e3ccSAndroid Build Coastguard Worker 
58*77c1e3ccSAndroid Build Coastguard Worker   assert(h >= 1);
59*77c1e3ccSAndroid Build Coastguard Worker   assert(w >= 1);
60*77c1e3ccSAndroid Build Coastguard Worker   assert(IS_POWER_OF_TWO(h));
61*77c1e3ccSAndroid Build Coastguard Worker   assert(IS_POWER_OF_TWO(w));
62*77c1e3ccSAndroid Build Coastguard Worker 
63*77c1e3ccSAndroid Build Coastguard Worker   assert(bd == 8 || bd == 10 || bd == 12);
64*77c1e3ccSAndroid Build Coastguard Worker 
65*77c1e3ccSAndroid Build Coastguard Worker   for (i = 0; i < h; ++i) {
66*77c1e3ccSAndroid Build Coastguard Worker     const int m = mask[i];
67*77c1e3ccSAndroid Build Coastguard Worker     for (j = 0; j < w; ++j) {
68*77c1e3ccSAndroid Build Coastguard Worker       dst[i * dst_stride + j] = AOM_BLEND_A64(m, src0[i * src0_stride + j],
69*77c1e3ccSAndroid Build Coastguard Worker                                               src1[i * src1_stride + j]);
70*77c1e3ccSAndroid Build Coastguard Worker     }
71*77c1e3ccSAndroid Build Coastguard Worker   }
72*77c1e3ccSAndroid Build Coastguard Worker }
73*77c1e3ccSAndroid Build Coastguard Worker #endif
74