xref: /aosp_15_r20/external/libmpeg2/common/impeg2_inter_pred.h (revision a97c2a1f0a796dc32bed80d3353c69c5fc07c750)
1*a97c2a1fSXin Li /******************************************************************************
2*a97c2a1fSXin Li  *
3*a97c2a1fSXin Li  * Copyright (C) 2015 The Android Open Source Project
4*a97c2a1fSXin Li  *
5*a97c2a1fSXin Li  * Licensed under the Apache License, Version 2.0 (the "License");
6*a97c2a1fSXin Li  * you may not use this file except in compliance with the License.
7*a97c2a1fSXin Li  * You may obtain a copy of the License at:
8*a97c2a1fSXin Li  *
9*a97c2a1fSXin Li  * http://www.apache.org/licenses/LICENSE-2.0
10*a97c2a1fSXin Li  *
11*a97c2a1fSXin Li  * Unless required by applicable law or agreed to in writing, software
12*a97c2a1fSXin Li  * distributed under the License is distributed on an "AS IS" BASIS,
13*a97c2a1fSXin Li  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*a97c2a1fSXin Li  * See the License for the specific language governing permissions and
15*a97c2a1fSXin Li  * limitations under the License.
16*a97c2a1fSXin Li  *
17*a97c2a1fSXin Li  *****************************************************************************
18*a97c2a1fSXin Li  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*a97c2a1fSXin Li */
20*a97c2a1fSXin Li #ifndef __IMPEG2_INTER_PRED_H__
21*a97c2a1fSXin Li #define __IMPEG2_INTER_PRED_H__
22*a97c2a1fSXin Li 
23*a97c2a1fSXin Li 
24*a97c2a1fSXin Li typedef struct
25*a97c2a1fSXin Li {
26*a97c2a1fSXin Li     UWORD8 *pu1_y;
27*a97c2a1fSXin Li     UWORD8 *pu1_u;
28*a97c2a1fSXin Li     UWORD8 *pu1_v;
29*a97c2a1fSXin Li }yuv_buf_t;
30*a97c2a1fSXin Li 
31*a97c2a1fSXin Li typedef struct
32*a97c2a1fSXin Li {
33*a97c2a1fSXin Li     WORD16 *pi2_y;
34*a97c2a1fSXin Li     WORD16 *pi2_u;
35*a97c2a1fSXin Li     WORD16 *pi2_v;
36*a97c2a1fSXin Li }yuv_buf16_t;
37*a97c2a1fSXin Li 
38*a97c2a1fSXin Li /**
39*a97c2a1fSXin Li  * Picture buffer
40*a97c2a1fSXin Li  */
41*a97c2a1fSXin Li typedef struct
42*a97c2a1fSXin Li {
43*a97c2a1fSXin Li     UWORD8 *pu1_y;
44*a97c2a1fSXin Li     UWORD8 *pu1_u;
45*a97c2a1fSXin Li     UWORD8 *pu1_v;
46*a97c2a1fSXin Li 
47*a97c2a1fSXin Li     /** Used to store display Timestamp for current buffer */
48*a97c2a1fSXin Li     WORD32 u4_ts;
49*a97c2a1fSXin Li     UWORD8 u1_used_as_ref;
50*a97c2a1fSXin Li 
51*a97c2a1fSXin Li     /**
52*a97c2a1fSXin Li      * buffer ID from buffer manager
53*a97c2a1fSXin Li      */
54*a97c2a1fSXin Li     WORD32 i4_buf_id;
55*a97c2a1fSXin Li 
56*a97c2a1fSXin Li     /* To store the buffer's picture type */
57*a97c2a1fSXin Li     e_pic_type_t e_pic_type;
58*a97c2a1fSXin Li 
59*a97c2a1fSXin Li }pic_buf_t;
60*a97c2a1fSXin Li 
61*a97c2a1fSXin Li typedef void pf_copy_mb_t (yuv_buf_t *src_buf,
62*a97c2a1fSXin Li                    yuv_buf_t *dst_buf,
63*a97c2a1fSXin Li                    UWORD32 src_wd,
64*a97c2a1fSXin Li                    UWORD32 dst_wd);
65*a97c2a1fSXin Li 
66*a97c2a1fSXin Li typedef void pf_interpred_t(UWORD8 *out,UWORD8 *ref, UWORD32 ref_wid,  UWORD32 out_wid);
67*a97c2a1fSXin Li 
68*a97c2a1fSXin Li typedef void pf_interpolate_t(yuv_buf_t *buf_src1,
69*a97c2a1fSXin Li                               yuv_buf_t *buf_src2,
70*a97c2a1fSXin Li                               yuv_buf_t *buf_dst,
71*a97c2a1fSXin Li                               UWORD32 stride);
72*a97c2a1fSXin Li 
73*a97c2a1fSXin Li pf_interpolate_t impeg2_interpolate;
74*a97c2a1fSXin Li pf_interpolate_t impeg2_interpolate_a9q;
75*a97c2a1fSXin Li pf_interpolate_t impeg2_interpolate_av8;
76*a97c2a1fSXin Li 
77*a97c2a1fSXin Li pf_copy_mb_t impeg2_copy_mb;
78*a97c2a1fSXin Li pf_copy_mb_t impeg2_copy_mb_a9q;
79*a97c2a1fSXin Li pf_copy_mb_t impeg2_copy_mb_av8;
80*a97c2a1fSXin Li 
81*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_halfy_8x8;
82*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_fully_8x8;
83*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_halfy_8x8;
84*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_fully_8x8;
85*a97c2a1fSXin Li 
86*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_halfy_8x8_a9q;
87*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_fully_8x8_a9q;
88*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_halfy_8x8_a9q;
89*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_fully_8x8_a9q;
90*a97c2a1fSXin Li 
91*a97c2a1fSXin Li /* AV8 Declarations */
92*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_halfy_8x8_av8;
93*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_fully_8x8_av8;
94*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_halfy_8x8_av8;
95*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_fully_8x8_av8;
96*a97c2a1fSXin Li 
97*a97c2a1fSXin Li 
98*a97c2a1fSXin Li /* SSE4.2 Declarations*/
99*a97c2a1fSXin Li pf_copy_mb_t impeg2_copy_mb_sse42;
100*a97c2a1fSXin Li pf_interpolate_t impeg2_interpolate_sse42;
101*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_halfy_8x8_sse42;
102*a97c2a1fSXin Li pf_interpred_t impeg2_mc_halfx_fully_8x8_sse42;
103*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_halfy_8x8_sse42;
104*a97c2a1fSXin Li pf_interpred_t impeg2_mc_fullx_fully_8x8_sse42;
105*a97c2a1fSXin Li 
106*a97c2a1fSXin Li #endif /* #ifndef __IMPEG2_INTER_PRED_H__  */
107