summaryrefslogtreecommitdiffstats
path: root/encoder/ime_distortion_metrics.h
blob: a30e1fca21b07ae1db5bc05da72c1d5d095165cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/******************************************************************************
 *
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/

/**
******************************************************************************
* @file ih264e_distortion_metrics.h
*
* @brief
*  This file contains declarations of routines that compute distortion
*  between two macro/sub blocks of identical dimensions
*
* @author
*  Ittiam
*
* @remarks
*  None
*
*******************************************************************************
*/

#ifndef IME_DISTORTION_METRICS_H_
#define IME_DISTORTION_METRICS_H_


/*****************************************************************************/
/* Type definitions for function prototypes                                  */
/*****************************************************************************/

typedef void ime_compute_sad_ft(UWORD8 *pu1_src,
                                UWORD8 *pu1_est,
                                WORD32 src_strd,
                                WORD32 est_strd,
                                WORD32 i4_max_sad,
                                WORD32 *pi4_mb_distortion);

typedef void ime_compute_sad4_diamond(UWORD8 *pu1_ref,
                                      UWORD8 *pu1_src,
                                      WORD32 ref_strd,
                                      WORD32 src_strd,
                                      WORD32 *pi4_sad);

typedef void ime_compute_sad3_diamond(UWORD8 *pu1_ref1,
                                      UWORD8 *pu1_ref2,
                                      UWORD8 *pu1_ref3,
                                      UWORD8 *pu1_src,
                                      WORD32 ref_strd,
                                      WORD32 src_strd,
                                      WORD32 *pi4_sad);

typedef void ime_compute_sad2_diamond(UWORD8 *pu1_ref1,
                                      UWORD8 *pu1_ref2,
                                      UWORD8 *pu1_src,
                                      WORD32 ref_strd,
                                      WORD32 src_strd,
                                      WORD32 *pi4_sad);

typedef void ime_sub_pel_compute_sad_16x16_ft(UWORD8 *pu1_src,
                                              UWORD8 *pu1_ref_half_x,
                                              UWORD8 *pu1_ref_half_y,
                                              UWORD8 *pu1_ref_half_xy,
                                              WORD32 src_strd,
                                              WORD32 ref_strd,
                                              WORD32 *pi4_sad);

typedef void ime_compute_sad_stat(UWORD8 *pu1_src,
                                  UWORD8 *pu1_est,
                                  WORD32 src_strd,
                                  WORD32 est_strd,
                                  UWORD16 *pu2_thrsh,
                                  WORD32 *pi4_mb_distortion,
                                  UWORD32 *pu4_is_zero);

typedef void ime_compute_satqd_16x16_lumainter_ft(UWORD8 *pu1_src,
                                         UWORD8 *pu1_est,
                                         WORD32 src_strd,
                                         WORD32 est_strd,
                                         UWORD16 *pu2_thrsh,
                                         WORD32 *pi4_mb_distortion,
                                         UWORD32 *pu4_is_zero);

typedef void ime_compute_satqd_8x16_chroma_ft(UWORD8 *pu1_src,
                                     UWORD8 *pu1_est,
                                     WORD32 src_strd,
                                     WORD32 est_strd,
                                     WORD32 i4_max_sad,
                                     UWORD16 *thrsh);

typedef void ime_compute_satqd_16x16_lumaintra_ft(UWORD8 *pu1_src,
                                         UWORD8 *pu1_est,
                                         WORD32 src_strd,
                                         WORD32 est_strd,
                                         WORD32 i4_max_sad,
                                         UWORD16 *thrsh,
                                         WORD32 *pi4_mb_distortion,
                                         UWORD8 *sig_nz_sad);

/*****************************************************************************/
/* Extern Function Declarations                                              */
/*****************************************************************************/

ime_compute_sad_ft ime_compute_sad_16x16;
ime_compute_sad_ft ime_compute_sad_16x16_fast;
ime_compute_sad_ft ime_compute_sad_16x8;
ime_compute_sad_ft ime_compute_sad_16x16_ea8;
ime_compute_sad_ft ime_compute_sad_8x8;
ime_compute_sad_ft ime_compute_sad_4x4;
ime_compute_sad4_diamond ime_calculate_sad4_prog;
ime_compute_sad3_diamond ime_calculate_sad3_prog;
ime_compute_sad2_diamond ime_calculate_sad2_prog;
ime_sub_pel_compute_sad_16x16_ft ime_sub_pel_compute_sad_16x16;
ime_compute_sad_stat ime_compute_16x16_sad_stat;
ime_compute_satqd_16x16_lumainter_ft ime_compute_satqd_16x16_lumainter;
ime_compute_satqd_8x16_chroma_ft ime_compute_satqd_8x16_chroma;
ime_compute_satqd_16x16_lumaintra_ft ime_compute_satqd_16x16_lumaintra;

/*SSE4.2 Declarations*/
ime_compute_sad_ft ime_compute_sad_16x16_sse42;
ime_compute_sad_ft ime_compute_sad_16x16_fast_sse42;
ime_compute_sad_ft ime_compute_sad_16x8_sse42;
ime_compute_sad_ft ime_compute_sad_16x16_ea8_sse42;
ime_sub_pel_compute_sad_16x16_ft ime_sub_pel_compute_sad_16x16_sse42;
ime_compute_sad4_diamond ime_calculate_sad4_prog_sse42;
ime_compute_satqd_16x16_lumainter_ft ime_compute_satqd_16x16_lumainter_sse42;

/* assembly */
ime_compute_sad_ft ime_compute_sad_16x16_a9q;
ime_compute_sad_ft ime_compute_sad_16x16_fast_a9q;
ime_compute_sad_ft ime_compute_sad_16x8_a9q;
ime_compute_sad_ft ime_compute_sad_16x16_ea8_a9q;
ime_compute_sad4_diamond ime_calculate_sad4_prog_a9q;
ime_compute_sad3_diamond ime_calculate_sad3_prog_a9q;
ime_compute_sad2_diamond ime_calculate_sad2_prog_a9q;
ime_sub_pel_compute_sad_16x16_ft ime_sub_pel_compute_sad_16x16_a9q;
ime_compute_sad_stat ime_compute_16x16_sad_stat_a9;
ime_compute_satqd_16x16_lumainter_ft ime_compute_satqd_16x16_lumainter_a9q;


/* assembly - AV8 declarations */
ime_compute_sad_ft ime_compute_sad_16x16_av8;
ime_compute_sad_ft ime_compute_sad_16x16_fast_av8;
ime_compute_sad_ft ime_compute_sad_16x8_av8;
ime_compute_sad_ft ime_compute_sad_16x16_ea8_av8;
ime_compute_sad4_diamond ime_calculate_sad4_prog_av8;
ime_compute_sad3_diamond ime_calculate_sad3_prog_av8;
ime_compute_sad2_diamond ime_calculate_sad2_prog_av8;
ime_sub_pel_compute_sad_16x16_ft ime_sub_pel_compute_sad_16x16_av8;
ime_compute_sad_stat ime_compute_16x16_sad_stat_av8;
ime_compute_satqd_16x16_lumainter_ft ime_compute_satqd_16x16_lumainter_av8;


#endif /* IME_DISTORTION_METRICS_H_ */