1 /******************************************************************************
2  *
3  * Copyright (C) 2015 The Android Open Source Project
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  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 #ifndef __IMPEG2_INTER_PRED_H__
21 #define __IMPEG2_INTER_PRED_H__
22 
23 
24 typedef struct
25 {
26     UWORD8 *pu1_y;
27     UWORD8 *pu1_u;
28     UWORD8 *pu1_v;
29 }yuv_buf_t;
30 
31 typedef struct
32 {
33     WORD16 *pi2_y;
34     WORD16 *pi2_u;
35     WORD16 *pi2_v;
36 }yuv_buf16_t;
37 
38 /**
39  * Picture buffer
40  */
41 typedef struct
42 {
43     UWORD8 *pu1_y;
44     UWORD8 *pu1_u;
45     UWORD8 *pu1_v;
46 
47     /** Used to store display Timestamp for current buffer */
48     WORD32 u4_ts;
49     UWORD8 u1_used_as_ref;
50 
51     /**
52      * buffer ID from buffer manager
53      */
54     WORD32 i4_buf_id;
55 
56     /* To store the buffer's picture type */
57     e_pic_type_t e_pic_type;
58 
59 }pic_buf_t;
60 
61 typedef void pf_copy_mb_t (yuv_buf_t *src_buf,
62                    yuv_buf_t *dst_buf,
63                    UWORD32 src_wd,
64                    UWORD32 dst_wd);
65 
66 typedef void pf_interpred_t(UWORD8 *out,UWORD8 *ref, UWORD32 ref_wid,  UWORD32 out_wid);
67 
68 typedef void pf_interpolate_t(yuv_buf_t *buf_src1,
69                               yuv_buf_t *buf_src2,
70                               yuv_buf_t *buf_dst,
71                               UWORD32 stride);
72 
73 pf_interpolate_t impeg2_interpolate;
74 pf_interpolate_t impeg2_interpolate_a9q;
75 pf_interpolate_t impeg2_interpolate_av8;
76 
77 pf_copy_mb_t impeg2_copy_mb;
78 pf_copy_mb_t impeg2_copy_mb_a9q;
79 pf_copy_mb_t impeg2_copy_mb_av8;
80 
81 pf_interpred_t impeg2_mc_halfx_halfy_8x8;
82 pf_interpred_t impeg2_mc_halfx_fully_8x8;
83 pf_interpred_t impeg2_mc_fullx_halfy_8x8;
84 pf_interpred_t impeg2_mc_fullx_fully_8x8;
85 
86 pf_interpred_t impeg2_mc_halfx_halfy_8x8_a9q;
87 pf_interpred_t impeg2_mc_halfx_fully_8x8_a9q;
88 pf_interpred_t impeg2_mc_fullx_halfy_8x8_a9q;
89 pf_interpred_t impeg2_mc_fullx_fully_8x8_a9q;
90 
91 /* AV8 Declarations */
92 pf_interpred_t impeg2_mc_halfx_halfy_8x8_av8;
93 pf_interpred_t impeg2_mc_halfx_fully_8x8_av8;
94 pf_interpred_t impeg2_mc_fullx_halfy_8x8_av8;
95 pf_interpred_t impeg2_mc_fullx_fully_8x8_av8;
96 
97 
98 /* SSE4.2 Declarations*/
99 pf_copy_mb_t impeg2_copy_mb_sse42;
100 pf_interpolate_t impeg2_interpolate_sse42;
101 pf_interpred_t impeg2_mc_halfx_halfy_8x8_sse42;
102 pf_interpred_t impeg2_mc_halfx_fully_8x8_sse42;
103 pf_interpred_t impeg2_mc_fullx_halfy_8x8_sse42;
104 pf_interpred_t impeg2_mc_fullx_fully_8x8_sse42;
105 
106 #endif /* #ifndef __IMPEG2_INTER_PRED_H__  */
107