summaryrefslogtreecommitdiffstats
path: root/decoder/arm/ihevcd_function_selector.c
blob: 66c7d4d4ea738f573f0aa255573b6ddbf3bea27c (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
/******************************************************************************
*
* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
*
* 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.
*
******************************************************************************/
/**
*******************************************************************************
* @file
*  ihevcd_function_selector.c
*
* @brief
*  Contains functions to initialize function pointers used in hevc
*
* @author
*  Naveen
*
* @par List of Functions:
* @remarks
*  None
*
*******************************************************************************
*/
/*****************************************************************************/
/* File Includes                                                             */
/*****************************************************************************/
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>

#include "ihevc_typedefs.h"
#include "iv.h"
#include "ivd.h"
#include "ihevc_defs.h"
#include "ihevc_debug.h"
#include "ihevc_structs.h"
#include "ihevc_macros.h"
#include "ihevc_platform_macros.h"
#include "ihevc_cabac_tables.h"
#include "ihevc_disp_mgr.h"
#include "ihevc_buf_mgr.h"
#include "ihevc_dpb_mgr.h"
#include "ihevc_error.h"

#include "ihevcd_defs.h"
#include "ihevcd_function_selector.h"
#include "ihevcd_structs.h"

void ihevcd_init_function_ptr_neonintr(codec_t *ps_codec);
void ihevcd_init_function_ptr_noneon(codec_t *ps_codec);
void ihevcd_init_function_ptr_a9q(codec_t *ps_codec);
void ihevcd_init_function_ptr_av8(codec_t *ps_codec);
void ihevcd_init_function_ptr(void *pv_codec)
{
    codec_t *ps_codec = (codec_t *)pv_codec;

#ifndef ARMV8
    switch(ps_codec->e_processor_arch)
    {
#ifndef DISABLE_NEONINTR
        case ARCH_ARM_NEONINTR:
            ihevcd_init_function_ptr_neonintr(ps_codec);
            break;
#endif
        case ARCH_ARM_NONEON:
            ihevcd_init_function_ptr_noneon(ps_codec);
            break;
        default:
        case ARCH_ARM_A5:
        case ARCH_ARM_A7:
        case ARCH_ARM_A9:
        case ARCH_ARM_A15:
        case ARCH_ARM_A9Q:
#ifndef DISABLE_NEON
            ihevcd_init_function_ptr_a9q(ps_codec);
#else
            ihevcd_init_function_ptr_noneon(ps_codec);
#endif
            break;
    }
    switch(ps_codec->e_processor_soc)
    {

        case SOC_HISI_37X:
#ifndef DISABLE_NEON
            ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420sp_fptr               =  &ihevcd_fmt_conv_420sp_to_420sp_a9q;
#endif
            break;
        case SOC_GENERIC:
        default:
            break;
    }
#else
    switch(ps_codec->e_processor_arch)
    {
        case ARCH_ARM_NONEON:
            ihevcd_init_function_ptr_noneon(ps_codec);
            break;
        case ARCH_ARMV8_GENERIC:
        default:
            ihevcd_init_function_ptr_av8(ps_codec);
            break;
    }
#endif
}

void ihevcd_init_arch(void *pv_codec)
{
    codec_t *ps_codec = (codec_t *)pv_codec;
#ifdef DEFAULT_ARCH
#if DEFAULT_ARCH == D_ARCH_ARM_NONEON
    ps_codec->e_processor_arch = ARCH_ARM_NONEON;
#elif DEFAULT_ARCH == D_ARCH_ARMV8_GENERIC
    ps_codec->e_processor_arch = ARCH_ARMV8_GENERIC;
#elif DEFAULT_ARCH == D_ARCH_ARM_NEONINTR
    ps_codec->e_processor_arch = ARCH_ARM_NEONINTR;
#else
    ps_codec->e_processor_arch = ARCH_ARM_A9Q;
#endif
#else
    ps_codec->e_processor_arch = ARCH_ARM_A9Q;
#endif
}