]> git.sesse.net Git - x264/blob - common/predict.h
Enable asm predict_8x8_filter
[x264] / common / predict.h
1 /*****************************************************************************
2  * predict.h: h264 encoder library
3  *****************************************************************************
4  * Copyright (C) 2003-2008 x264 project
5  *
6  * Authors: Loren Merritt <lorenm@u.washington.edu>
7  *          Laurent Aimar <fenrir@via.ecp.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24 #ifndef X264_PREDICT_H
25 #define X264_PREDICT_H
26
27 typedef void (*x264_predict_t)( uint8_t *src );
28 typedef void (*x264_predict8x8_t)( uint8_t *src, uint8_t edge[33] );
29 typedef void (*x264_predict_8x8_filter_t) ( uint8_t *src, uint8_t edge[33], int i_neighbor, int i_filters );
30
31 enum intra_chroma_pred_e
32 {
33     I_PRED_CHROMA_DC = 0,
34     I_PRED_CHROMA_H  = 1,
35     I_PRED_CHROMA_V  = 2,
36     I_PRED_CHROMA_P  = 3,
37
38     I_PRED_CHROMA_DC_LEFT = 4,
39     I_PRED_CHROMA_DC_TOP  = 5,
40     I_PRED_CHROMA_DC_128  = 6
41 };
42 static const uint8_t x264_mb_pred_mode8x8c_fix[7] =
43 {
44     I_PRED_CHROMA_DC, I_PRED_CHROMA_H, I_PRED_CHROMA_V, I_PRED_CHROMA_P,
45     I_PRED_CHROMA_DC, I_PRED_CHROMA_DC,I_PRED_CHROMA_DC
46 };
47
48 enum intra16x16_pred_e
49 {
50     I_PRED_16x16_V  = 0,
51     I_PRED_16x16_H  = 1,
52     I_PRED_16x16_DC = 2,
53     I_PRED_16x16_P  = 3,
54
55     I_PRED_16x16_DC_LEFT = 4,
56     I_PRED_16x16_DC_TOP  = 5,
57     I_PRED_16x16_DC_128  = 6,
58 };
59 static const uint8_t x264_mb_pred_mode16x16_fix[7] =
60 {
61     I_PRED_16x16_V, I_PRED_16x16_H, I_PRED_16x16_DC, I_PRED_16x16_P,
62     I_PRED_16x16_DC,I_PRED_16x16_DC,I_PRED_16x16_DC
63 };
64
65 enum intra4x4_pred_e
66 {
67     I_PRED_4x4_V  = 0,
68     I_PRED_4x4_H  = 1,
69     I_PRED_4x4_DC = 2,
70     I_PRED_4x4_DDL= 3,
71     I_PRED_4x4_DDR= 4,
72     I_PRED_4x4_VR = 5,
73     I_PRED_4x4_HD = 6,
74     I_PRED_4x4_VL = 7,
75     I_PRED_4x4_HU = 8,
76
77     I_PRED_4x4_DC_LEFT = 9,
78     I_PRED_4x4_DC_TOP  = 10,
79     I_PRED_4x4_DC_128  = 11,
80 };
81 static const int8_t x264_mb_pred_mode4x4_fix[13] =
82 {
83     -1,
84     I_PRED_4x4_V,   I_PRED_4x4_H,   I_PRED_4x4_DC,
85     I_PRED_4x4_DDL, I_PRED_4x4_DDR, I_PRED_4x4_VR,
86     I_PRED_4x4_HD,  I_PRED_4x4_VL,  I_PRED_4x4_HU,
87     I_PRED_4x4_DC,  I_PRED_4x4_DC,  I_PRED_4x4_DC
88 };
89 #define x264_mb_pred_mode4x4_fix(t) x264_mb_pred_mode4x4_fix[(t)+1]
90
91 /* must use the same numbering as intra4x4_pred_e */
92 enum intra8x8_pred_e
93 {
94     I_PRED_8x8_V  = 0,
95     I_PRED_8x8_H  = 1,
96     I_PRED_8x8_DC = 2,
97     I_PRED_8x8_DDL= 3,
98     I_PRED_8x8_DDR= 4,
99     I_PRED_8x8_VR = 5,
100     I_PRED_8x8_HD = 6,
101     I_PRED_8x8_VL = 7,
102     I_PRED_8x8_HU = 8,
103
104     I_PRED_8x8_DC_LEFT = 9,
105     I_PRED_8x8_DC_TOP  = 10,
106     I_PRED_8x8_DC_128  = 11,
107 };
108
109 void x264_predict_16x16_init ( int cpu, x264_predict_t pf[7] );
110 void x264_predict_8x8c_init  ( int cpu, x264_predict_t pf[7] );
111 void x264_predict_4x4_init   ( int cpu, x264_predict_t pf[12] );
112 void x264_predict_8x8_init   ( int cpu, x264_predict8x8_t pf[12], x264_predict_8x8_filter_t *predict_filter );
113
114
115 #endif