1/******************************************************************************
2*
3* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4*
5* Licensed under the Apache License, Version 2.0 (the "License");
6* you may not use this file except in compliance with the License.
7* You may obtain a copy of the License at:
8*
9* http://www.apache.org/licenses/LICENSE-2.0
10*
11* Unless required by applicable law or agreed to in writing, software
12* distributed under the License is distributed on an "AS IS" BASIS,
13* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14* See the License for the specific language governing permissions and
15* limitations under the License.
16*
17******************************************************************************/
18/**
19*******************************************************************************
20* @file
21*  ihevc_func_selector.h
22*
23* @brief
24*  For each function decide whether to use C function,  or Neon intrinsics
25* or Cortex A8 intrinsics or Neon  assembly or cortex a8 assembly
26*
27* @author
28*  Harish
29*
30* @remarks
31*  None
32*
33*******************************************************************************
34*/
35
36#ifndef __IHEVC_FUNC_SELECTOR_H__
37#define __IHEVC_FUNC_SELECTOR_H__
38
39#include "ihevc_func_types.h"
40
41#define    INTER_PRED_LUMA_COPY                     C
42#define    INTER_PRED_LUMA_HORZ                     C
43#define    INTER_PRED_LUMA_VERT                     C
44#define    INTER_PRED_LUMA_COPY_W16OUT              C
45#define    INTER_PRED_LUMA_HORZ_W16OUT              C
46
47#define    INTER_PRED_LUMA_VERT_W16OUT              C
48#define    INTER_PRED_LUMA_VERT_W16INP              C
49#define    INTER_PRED_LUMA_VERT_W16INP_W16OUT       C
50
51#define    INTER_PRED_CHROMA_COPY                   C
52#define    INTER_PRED_CHROMA_HORZ                   C
53#define    INTER_PRED_CHROMA_VERT                   C
54#define    INTER_PRED_CHROMA_COPY_W16OUT            C
55#define    INTER_PRED_CHROMA_HORZ_W16OUT            C
56#define    INTER_PRED_CHROMA_VERT_W16OUT            C
57#define    INTER_PRED_CHROMA_VERT_W16INP            C
58#define    INTER_PRED_CHROMA_VERT_W16INP_W16OUT     C
59
60#define    WEIGHTED_PRED_UNI                        C
61#define    WEIGHTED_PRED_BI                         C
62#define    WEIGHTED_PRED_BI_DEFAULT                 C
63#define    WEIGHTED_PRED_CHROMA_UNI                 C
64#define    WEIGHTED_PRED_CHROMA_BI                  C
65#define    WEIGHTED_PRED_CHROMA_BI_DEFAULT          C
66
67#define    PAD_VERT                                 C
68#define    PAD_HORZ                                 C
69#define    PAD_LEFT_LUMA                            C
70#define    PAD_LEFT_CHROMA                          C
71#define    PAD_RIGHT_LUMA                           C
72#define    PAD_RIGHT_CHROMA                         C
73
74#define     DEBLOCKING_ASM                          C
75#define     DEBLK_LUMA_HORZ                         C
76#define     DEBLK_LUMA_VERT                         C
77#define     DEBLK_CHROMA_HORZ                       C
78#define     DEBLK_CHROMA_VERT                       C
79
80#define     SAO_BAND_OFFSET_LUMA                    C
81#define     SAO_BAND_OFFSET_CHROMA                  C
82#define     SAO_EDGE_OFFSET_CLASS0_LUMA             C
83#define     SAO_EDGE_OFFSET_CLASS1_LUMA             C
84#define     SAO_EDGE_OFFSET_CLASS2_LUMA             C
85#define     SAO_EDGE_OFFSET_CLASS3_LUMA             C
86#define     SAO_EDGE_OFFSET_CLASS0_CHROMA           C
87#define     SAO_EDGE_OFFSET_CLASS1_CHROMA           C
88#define     SAO_EDGE_OFFSET_CLASS2_CHROMA           C
89#define     SAO_EDGE_OFFSET_CLASS3_CHROMA           C
90
91#define     INTRA_PRED_LUMA_REF_SUBSTITUTION        C
92#define     INTRA_PRED_REF_FILTERING                 C
93#define     INTRA_PRED_LUMA_PLANAR                  C
94#define     INTRA_PRED_LUMA_DC                      C
95#define     INTRA_PRED_LUMA_HORZ                    C
96#define     INTRA_PRED_LUMA_VER                     C
97#define     INTRA_PRED_LUMA_MODE_2                  C
98#define     INTRA_PRED_LUMA_MODE_18_34              C
99#define     INTRA_PRED_LUMA_MODE_3_T0_9             C
100#define     INTRA_PRED_LUMA_MODE_11_T0_17           C
101#define     INTRA_PRED_LUMA_MODE_19_T0_25           C
102#define     INTRA_PRED_LUMA_MODE_27_T0_33           C
103
104#define     INTRA_PRED_CHROMA_PLANAR                C
105#define     INTRA_PRED_CHROMA_DC                    C
106#define     INTRA_PRED_CHROMA_HOR                   C
107#define     INTRA_PRED_CHROMA_VER                   C
108#define     INTRA_PRED_CHROMA_MODE_2                C
109#define     INTRA_PRED_CHROMA_18_34                 C
110#define     INTRA_PRED_CHROMA_3_T0_9                C
111#define     INTRA_PRED_CHROMA_11_T0_17              C
112#define     INTRA_PRED_CHROMA_19_T0_25              C
113#define     INTRA_PRED_CHROMA_27_T0_33              C
114#define     INTRA_PRED_CHROMA_REF_SUBSTITUTION      C
115
116/* Forward transform functions */
117/* Luma */
118#define RESI_TRANS_QUANT_4X4_TTYPE1                 C
119#define RESI_TRANS_QUANT_4X4                        C
120#define RESI_TRANS_QUANT_8X8                        C
121#define RESI_TRANS_QUANT_16X16                      C
122#define RESI_TRANS_QUANT_32X32                      C
123
124#define RESI_QUANT_4X4_TTYPE1                       C
125#define RESI_QUANT_4X4                              C
126#define RESI_QUANT_8X8                              C
127#define RESI_QUANT_16X16                            C
128#define RESI_QUANT_32X32                            C
129
130#define RESI_TRANS_4X4_TTYPE1                       C
131#define RESI_TRANS_4X4                              C
132#define RESI_TRANS_8X8                              C
133#define RESI_TRANS_16X16                            C
134#define RESI_TRANS_32X32                            C
135
136#define RESI_4X4_TTYPE1                             C
137#define RESI_4X4                                    C
138#define RESI_8X8                                    C
139#define RESI_16X16                                  C
140#define RESI_32X32                                  C
141
142#define TRANS_4X4_TTYPE1                            C
143#define TRANS_4X4                                   C
144#define TRANS_8X8                                   C
145#define TRANS_16X16                                 C
146#define TRANS_32X32                                 C
147
148#define QUANT_4X4_TTYPE1                            C
149#define QUANT_4X4                                   C
150#define QUANT_8X8                                   C
151#define QUANT_16X16                                 C
152#define QUANT_32X32                                 C
153
154/* Chroma interleaved*/
155#define CHROMA_RESI_TRANS_QUANT_4X4                        C
156#define CHROMA_RESI_TRANS_QUANT_8X8                        C
157#define CHROMA_RESI_TRANS_QUANT_16X16                      C
158
159#define CHROMA_RESI_QUANT_4X4                              C
160#define CHROMA_RESI_QUANT_8X8                              C
161#define CHROMA_RESI_QUANT_16X16                            C
162
163#define CHROMA_RESI_TRANS_4X4                              C
164#define CHROMA_RESI_TRANS_8X8                              C
165#define CHROMA_RESI_TRANS_16X16                            C
166
167#define CHROMA_RESI_4X4                                    C
168#define CHROMA_RESI_8X8                                    C
169#define CHROMA_RESI_16X16                                  C
170
171/* Inverse transform functions */
172/* Luma */
173#define IQUANT_ITRANS_RECON_4X4_TTYPE1              C
174#define IQUANT_ITRANS_RECON_4X4                     C
175#define IQUANT_ITRANS_RECON_8X8                     C
176#define IQUANT_ITRANS_RECON_16X16                   C
177#define IQUANT_ITRANS_RECON_32X32                   C
178
179#define IQUANT_RECON_4X4_TTYPE1                     C
180#define IQUANT_RECON_4X4                            C
181#define IQUANT_RECON_8X8                            C
182#define IQUANT_RECON_16X16                          C
183#define IQUANT_RECON_32X32                          C
184
185#define ITRANS_RECON_4X4_TTYPE1                     C
186#define ITRANS_RECON_4X4                            C
187#define ITRANS_RECON_8X8                            C
188#define ITRANS_RECON_16X16                          C
189#define ITRANS_RECON_32X32                          C
190
191#define RECON_4X4_TTYPE1                            C
192#define RECON_4X4                                   C
193#define RECON_8X8                                   C
194#define RECON_16X16                                 C
195#define RECON_32X32                                 C
196
197#define ITRANS_4X4_TTYPE1                           C
198#define ITRANS_4X4                                  C
199#define ITRANS_8X8                                  C
200#define ITRANS_16X16                                C
201#define ITRANS_32X32                                C
202
203/* Chroma interleaved */
204#define CHROMA_IQUANT_ITRANS_RECON_4X4                     C
205#define CHROMA_IQUANT_ITRANS_RECON_8X8                     C
206#define CHROMA_IQUANT_ITRANS_RECON_16X16                   C
207
208#define CHROMA_IQUANT_RECON_4X4                            C
209#define CHROMA_IQUANT_RECON_8X8                            C
210#define CHROMA_IQUANT_RECON_16X16                          C
211
212#define CHROMA_ITRANS_RECON_4X4                            C
213#define CHROMA_ITRANS_RECON_8X8                            C
214#define CHROMA_ITRANS_RECON_16X16                          C
215
216#define CHROMA_RECON_4X4                                   C
217#define CHROMA_RECON_8X8                                   C
218#define CHROMA_RECON_16X16                                 C
219
220#define IHEVC_MEMCPY                                C
221#define IHEVC_MEMSET                                C
222#define IHEVC_MEMSET_16BIT                          C
223#define IHEVC_MEMCPY_MUL_8                          C
224#define IHEVC_MEMSET_MUL_8                          C
225#define IHEVC_MEMSET_16BIT_MUL_8                    C
226
227#endif  /* __IHEVC_FUNC_SELECTOR_H__ */
228