1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2022 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * isvce_ilp_mv.h
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker * Contains function declarations for function declared in
28*495ae853SAndroid Build Coastguard Worker * isvce_ilp_mv.c
29*495ae853SAndroid Build Coastguard Worker *
30*495ae853SAndroid Build Coastguard Worker * @author
31*495ae853SAndroid Build Coastguard Worker * ittiam
32*495ae853SAndroid Build Coastguard Worker *
33*495ae853SAndroid Build Coastguard Worker * @remarks
34*495ae853SAndroid Build Coastguard Worker * None
35*495ae853SAndroid Build Coastguard Worker *
36*495ae853SAndroid Build Coastguard Worker *******************************************************************************
37*495ae853SAndroid Build Coastguard Worker */
38*495ae853SAndroid Build Coastguard Worker
39*495ae853SAndroid Build Coastguard Worker #ifndef _ISVCE_ILP_MV_H_
40*495ae853SAndroid Build Coastguard Worker #define _ISVCE_ILP_MV_H_
41*495ae853SAndroid Build Coastguard Worker
42*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
43*495ae853SAndroid Build Coastguard Worker #include "iv2.h"
44*495ae853SAndroid Build Coastguard Worker #include "isvc_macros.h"
45*495ae853SAndroid Build Coastguard Worker #include "ih264_debug.h"
46*495ae853SAndroid Build Coastguard Worker #include "isvc_defs.h"
47*495ae853SAndroid Build Coastguard Worker #include "isvc_structs.h"
48*495ae853SAndroid Build Coastguard Worker #include "isvce_defs.h"
49*495ae853SAndroid Build Coastguard Worker #include "isvce_pred_structs.h"
50*495ae853SAndroid Build Coastguard Worker #include "isvce_structs.h"
51*495ae853SAndroid Build Coastguard Worker #include "isvce_structs.h"
52*495ae853SAndroid Build Coastguard Worker #include "isvce_utils.h"
53*495ae853SAndroid Build Coastguard Worker
54*495ae853SAndroid Build Coastguard Worker /* Structs */
55*495ae853SAndroid Build Coastguard Worker typedef struct ilp_mv_constants_t
56*495ae853SAndroid Build Coastguard Worker {
57*495ae853SAndroid Build Coastguard Worker void *pv_state;
58*495ae853SAndroid Build Coastguard Worker } ilp_mv_constants_t;
59*495ae853SAndroid Build Coastguard Worker
60*495ae853SAndroid Build Coastguard Worker typedef struct ilp_mv_outputs_t
61*495ae853SAndroid Build Coastguard Worker {
62*495ae853SAndroid Build Coastguard Worker ilp_mv_t s_ilp_mv;
63*495ae853SAndroid Build Coastguard Worker
64*495ae853SAndroid Build Coastguard Worker ilp_me_cands_t s_ilp_me_cands;
65*495ae853SAndroid Build Coastguard Worker
66*495ae853SAndroid Build Coastguard Worker } ilp_mv_outputs_t;
67*495ae853SAndroid Build Coastguard Worker
68*495ae853SAndroid Build Coastguard Worker typedef struct ilp_mv_variables_t
69*495ae853SAndroid Build Coastguard Worker {
70*495ae853SAndroid Build Coastguard Worker svc_ilp_data_t *ps_svc_ilp_data;
71*495ae853SAndroid Build Coastguard Worker
72*495ae853SAndroid Build Coastguard Worker coordinates_t s_mb_pos;
73*495ae853SAndroid Build Coastguard Worker
74*495ae853SAndroid Build Coastguard Worker UWORD8 u1_spatial_layer_id;
75*495ae853SAndroid Build Coastguard Worker } ilp_mv_variables_t;
76*495ae853SAndroid Build Coastguard Worker
77*495ae853SAndroid Build Coastguard Worker typedef struct svc_ilp_mv_ctxt_t
78*495ae853SAndroid Build Coastguard Worker {
79*495ae853SAndroid Build Coastguard Worker ilp_mv_constants_t s_ilp_mv_constants;
80*495ae853SAndroid Build Coastguard Worker
81*495ae853SAndroid Build Coastguard Worker ilp_mv_variables_t s_ilp_mv_variables;
82*495ae853SAndroid Build Coastguard Worker
83*495ae853SAndroid Build Coastguard Worker ilp_mv_outputs_t s_ilp_mv_outputs;
84*495ae853SAndroid Build Coastguard Worker
85*495ae853SAndroid Build Coastguard Worker } svc_ilp_mv_ctxt_t;
86*495ae853SAndroid Build Coastguard Worker
87*495ae853SAndroid Build Coastguard Worker /* Function declarations */
88*495ae853SAndroid Build Coastguard Worker extern UWORD32 isvce_get_ilp_mv_ctxt_size(UWORD8 u1_num_spatial_layers, DOUBLE d_spatial_res_ratio,
89*495ae853SAndroid Build Coastguard Worker UWORD32 u4_wd, UWORD32 u4_ht);
90*495ae853SAndroid Build Coastguard Worker
91*495ae853SAndroid Build Coastguard Worker extern void isvce_ilp_mv_ctxt_init(isvce_codec_t *ps_codec, iv_mem_rec_t *ps_mem_rec);
92*495ae853SAndroid Build Coastguard Worker
93*495ae853SAndroid Build Coastguard Worker extern void isvce_get_mb_ilp_mv(svc_ilp_mv_ctxt_t *ps_ilp_mv_ctxt);
94*495ae853SAndroid Build Coastguard Worker
95*495ae853SAndroid Build Coastguard Worker extern void isvce_mvp_idx_eval(isvce_mb_info_t *ps_mb_info, isvce_enc_pu_mv_t *ps_spatial_mvp,
96*495ae853SAndroid Build Coastguard Worker isvce_enc_pu_mv_t *ps_ilp_mvp, UWORD8 *pu1_mvd_costs);
97*495ae853SAndroid Build Coastguard Worker
isvce_is_ilp_mv_winning_mv(isvce_mb_info_t * ps_mb_info,ilp_mv_t * ps_ilp_mv)98*495ae853SAndroid Build Coastguard Worker static FORCEINLINE UWORD8 isvce_is_ilp_mv_winning_mv(isvce_mb_info_t *ps_mb_info,
99*495ae853SAndroid Build Coastguard Worker ilp_mv_t *ps_ilp_mv)
100*495ae853SAndroid Build Coastguard Worker {
101*495ae853SAndroid Build Coastguard Worker if(ENABLE_ILP_MV && ps_ilp_mv && (ps_mb_info->u2_mb_type != PSKIP) &&
102*495ae853SAndroid Build Coastguard Worker (ps_mb_info->u2_mb_type != BSKIP))
103*495ae853SAndroid Build Coastguard Worker {
104*495ae853SAndroid Build Coastguard Worker if((ps_mb_info->u2_mb_type == ps_ilp_mv->e_mb_type) &&
105*495ae853SAndroid Build Coastguard Worker (((PRED_MODE_T) ps_mb_info->as_pu->u1_pred_mode) == ps_ilp_mv->ae_pred_mode[0]))
106*495ae853SAndroid Build Coastguard Worker {
107*495ae853SAndroid Build Coastguard Worker return isvce_check_identical_mv(ps_mb_info->as_pu->as_me_info, ps_ilp_mv->as_mv[0],
108*495ae853SAndroid Build Coastguard Worker ps_ilp_mv->ae_pred_mode[0]);
109*495ae853SAndroid Build Coastguard Worker }
110*495ae853SAndroid Build Coastguard Worker }
111*495ae853SAndroid Build Coastguard Worker
112*495ae853SAndroid Build Coastguard Worker return 0;
113*495ae853SAndroid Build Coastguard Worker }
114*495ae853SAndroid Build Coastguard Worker
115*495ae853SAndroid Build Coastguard Worker #endif
116