yading@10
|
1 /*
|
yading@10
|
2 * Copyright (c) 2010 Jason Garrett-Glaser
|
yading@10
|
3 *
|
yading@10
|
4 * This file is part of FFmpeg.
|
yading@10
|
5 *
|
yading@10
|
6 * FFmpeg is free software; you can redistribute it and/or
|
yading@10
|
7 * modify it under the terms of the GNU Lesser General Public
|
yading@10
|
8 * License as published by the Free Software Foundation; either
|
yading@10
|
9 * version 2.1 of the License, or (at your option) any later version.
|
yading@10
|
10 *
|
yading@10
|
11 * FFmpeg is distributed in the hope that it will be useful,
|
yading@10
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
yading@10
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
yading@10
|
14 * Lesser General Public License for more details.
|
yading@10
|
15 *
|
yading@10
|
16 * You should have received a copy of the GNU Lesser General Public
|
yading@10
|
17 * License along with FFmpeg; if not, write to the Free Software
|
yading@10
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
yading@10
|
19 */
|
yading@10
|
20
|
yading@10
|
21 #include "libavutil/attributes.h"
|
yading@10
|
22 #include "libavutil/cpu.h"
|
yading@10
|
23 #include "libavutil/x86/cpu.h"
|
yading@10
|
24 #include "libavcodec/avcodec.h"
|
yading@10
|
25 #include "libavcodec/h264pred.h"
|
yading@10
|
26
|
yading@10
|
27 #define PRED4x4(TYPE, DEPTH, OPT) \
|
yading@10
|
28 void ff_pred4x4_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \
|
yading@10
|
29 const uint8_t *topright, \
|
yading@10
|
30 ptrdiff_t stride);
|
yading@10
|
31
|
yading@10
|
32 PRED4x4(dc, 10, mmxext)
|
yading@10
|
33 PRED4x4(down_left, 10, sse2)
|
yading@10
|
34 PRED4x4(down_left, 10, avx)
|
yading@10
|
35 PRED4x4(down_right, 10, sse2)
|
yading@10
|
36 PRED4x4(down_right, 10, ssse3)
|
yading@10
|
37 PRED4x4(down_right, 10, avx)
|
yading@10
|
38 PRED4x4(vertical_left, 10, sse2)
|
yading@10
|
39 PRED4x4(vertical_left, 10, avx)
|
yading@10
|
40 PRED4x4(vertical_right, 10, sse2)
|
yading@10
|
41 PRED4x4(vertical_right, 10, ssse3)
|
yading@10
|
42 PRED4x4(vertical_right, 10, avx)
|
yading@10
|
43 PRED4x4(horizontal_up, 10, mmxext)
|
yading@10
|
44 PRED4x4(horizontal_down, 10, sse2)
|
yading@10
|
45 PRED4x4(horizontal_down, 10, ssse3)
|
yading@10
|
46 PRED4x4(horizontal_down, 10, avx)
|
yading@10
|
47
|
yading@10
|
48 #define PRED8x8(TYPE, DEPTH, OPT) \
|
yading@10
|
49 void ff_pred8x8_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \
|
yading@10
|
50 ptrdiff_t stride);
|
yading@10
|
51
|
yading@10
|
52 PRED8x8(dc, 10, mmxext)
|
yading@10
|
53 PRED8x8(dc, 10, sse2)
|
yading@10
|
54 PRED8x8(top_dc, 10, sse2)
|
yading@10
|
55 PRED8x8(plane, 10, sse2)
|
yading@10
|
56 PRED8x8(vertical, 10, sse2)
|
yading@10
|
57 PRED8x8(horizontal, 10, sse2)
|
yading@10
|
58
|
yading@10
|
59 #define PRED8x8L(TYPE, DEPTH, OPT)\
|
yading@10
|
60 void ff_pred8x8l_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \
|
yading@10
|
61 int has_topleft, \
|
yading@10
|
62 int has_topright, \
|
yading@10
|
63 ptrdiff_t stride);
|
yading@10
|
64
|
yading@10
|
65 PRED8x8L(dc, 10, sse2)
|
yading@10
|
66 PRED8x8L(dc, 10, avx)
|
yading@10
|
67 PRED8x8L(128_dc, 10, mmxext)
|
yading@10
|
68 PRED8x8L(128_dc, 10, sse2)
|
yading@10
|
69 PRED8x8L(top_dc, 10, sse2)
|
yading@10
|
70 PRED8x8L(top_dc, 10, avx)
|
yading@10
|
71 PRED8x8L(vertical, 10, sse2)
|
yading@10
|
72 PRED8x8L(vertical, 10, avx)
|
yading@10
|
73 PRED8x8L(horizontal, 10, sse2)
|
yading@10
|
74 PRED8x8L(horizontal, 10, ssse3)
|
yading@10
|
75 PRED8x8L(horizontal, 10, avx)
|
yading@10
|
76 PRED8x8L(down_left, 10, sse2)
|
yading@10
|
77 PRED8x8L(down_left, 10, ssse3)
|
yading@10
|
78 PRED8x8L(down_left, 10, avx)
|
yading@10
|
79 PRED8x8L(down_right, 10, sse2)
|
yading@10
|
80 PRED8x8L(down_right, 10, ssse3)
|
yading@10
|
81 PRED8x8L(down_right, 10, avx)
|
yading@10
|
82 PRED8x8L(vertical_right, 10, sse2)
|
yading@10
|
83 PRED8x8L(vertical_right, 10, ssse3)
|
yading@10
|
84 PRED8x8L(vertical_right, 10, avx)
|
yading@10
|
85 PRED8x8L(horizontal_up, 10, sse2)
|
yading@10
|
86 PRED8x8L(horizontal_up, 10, ssse3)
|
yading@10
|
87 PRED8x8L(horizontal_up, 10, avx)
|
yading@10
|
88
|
yading@10
|
89 #define PRED16x16(TYPE, DEPTH, OPT)\
|
yading@10
|
90 void ff_pred16x16_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \
|
yading@10
|
91 ptrdiff_t stride);
|
yading@10
|
92
|
yading@10
|
93 PRED16x16(dc, 10, mmxext)
|
yading@10
|
94 PRED16x16(dc, 10, sse2)
|
yading@10
|
95 PRED16x16(top_dc, 10, mmxext)
|
yading@10
|
96 PRED16x16(top_dc, 10, sse2)
|
yading@10
|
97 PRED16x16(128_dc, 10, mmxext)
|
yading@10
|
98 PRED16x16(128_dc, 10, sse2)
|
yading@10
|
99 PRED16x16(left_dc, 10, mmxext)
|
yading@10
|
100 PRED16x16(left_dc, 10, sse2)
|
yading@10
|
101 PRED16x16(vertical, 10, mmxext)
|
yading@10
|
102 PRED16x16(vertical, 10, sse2)
|
yading@10
|
103 PRED16x16(horizontal, 10, mmxext)
|
yading@10
|
104 PRED16x16(horizontal, 10, sse2)
|
yading@10
|
105
|
yading@10
|
106 /* 8-bit versions */
|
yading@10
|
107 PRED16x16(vertical, 8, mmx)
|
yading@10
|
108 PRED16x16(vertical, 8, sse)
|
yading@10
|
109 PRED16x16(horizontal, 8, mmx)
|
yading@10
|
110 PRED16x16(horizontal, 8, mmxext)
|
yading@10
|
111 PRED16x16(horizontal, 8, ssse3)
|
yading@10
|
112 PRED16x16(dc, 8, mmxext)
|
yading@10
|
113 PRED16x16(dc, 8, sse2)
|
yading@10
|
114 PRED16x16(dc, 8, ssse3)
|
yading@10
|
115 PRED16x16(plane_h264, 8, mmx)
|
yading@10
|
116 PRED16x16(plane_h264, 8, mmxext)
|
yading@10
|
117 PRED16x16(plane_h264, 8, sse2)
|
yading@10
|
118 PRED16x16(plane_h264, 8, ssse3)
|
yading@10
|
119 PRED16x16(plane_rv40, 8, mmx)
|
yading@10
|
120 PRED16x16(plane_rv40, 8, mmxext)
|
yading@10
|
121 PRED16x16(plane_rv40, 8, sse2)
|
yading@10
|
122 PRED16x16(plane_rv40, 8, ssse3)
|
yading@10
|
123 PRED16x16(plane_svq3, 8, mmx)
|
yading@10
|
124 PRED16x16(plane_svq3, 8, mmxext)
|
yading@10
|
125 PRED16x16(plane_svq3, 8, sse2)
|
yading@10
|
126 PRED16x16(plane_svq3, 8, ssse3)
|
yading@10
|
127 PRED16x16(tm_vp8, 8, mmx)
|
yading@10
|
128 PRED16x16(tm_vp8, 8, mmxext)
|
yading@10
|
129 PRED16x16(tm_vp8, 8, sse2)
|
yading@10
|
130
|
yading@10
|
131 PRED8x8(top_dc, 8, mmxext)
|
yading@10
|
132 PRED8x8(dc_rv40, 8, mmxext)
|
yading@10
|
133 PRED8x8(dc, 8, mmxext)
|
yading@10
|
134 PRED8x8(vertical, 8, mmx)
|
yading@10
|
135 PRED8x8(horizontal, 8, mmx)
|
yading@10
|
136 PRED8x8(horizontal, 8, mmxext)
|
yading@10
|
137 PRED8x8(horizontal, 8, ssse3)
|
yading@10
|
138 PRED8x8(plane, 8, mmx)
|
yading@10
|
139 PRED8x8(plane, 8, mmxext)
|
yading@10
|
140 PRED8x8(plane, 8, sse2)
|
yading@10
|
141 PRED8x8(plane, 8, ssse3)
|
yading@10
|
142 PRED8x8(tm_vp8, 8, mmx)
|
yading@10
|
143 PRED8x8(tm_vp8, 8, mmxext)
|
yading@10
|
144 PRED8x8(tm_vp8, 8, sse2)
|
yading@10
|
145 PRED8x8(tm_vp8, 8, ssse3)
|
yading@10
|
146
|
yading@10
|
147 PRED8x8L(top_dc, 8, mmxext)
|
yading@10
|
148 PRED8x8L(top_dc, 8, ssse3)
|
yading@10
|
149 PRED8x8L(dc, 8, mmxext)
|
yading@10
|
150 PRED8x8L(dc, 8, ssse3)
|
yading@10
|
151 PRED8x8L(horizontal, 8, mmxext)
|
yading@10
|
152 PRED8x8L(horizontal, 8, ssse3)
|
yading@10
|
153 PRED8x8L(vertical, 8, mmxext)
|
yading@10
|
154 PRED8x8L(vertical, 8, ssse3)
|
yading@10
|
155 PRED8x8L(down_left, 8, mmxext)
|
yading@10
|
156 PRED8x8L(down_left, 8, sse2)
|
yading@10
|
157 PRED8x8L(down_left, 8, ssse3)
|
yading@10
|
158 PRED8x8L(down_right, 8, mmxext)
|
yading@10
|
159 PRED8x8L(down_right, 8, sse2)
|
yading@10
|
160 PRED8x8L(down_right, 8, ssse3)
|
yading@10
|
161 PRED8x8L(vertical_right, 8, mmxext)
|
yading@10
|
162 PRED8x8L(vertical_right, 8, sse2)
|
yading@10
|
163 PRED8x8L(vertical_right, 8, ssse3)
|
yading@10
|
164 PRED8x8L(vertical_left, 8, sse2)
|
yading@10
|
165 PRED8x8L(vertical_left, 8, ssse3)
|
yading@10
|
166 PRED8x8L(horizontal_up, 8, mmxext)
|
yading@10
|
167 PRED8x8L(horizontal_up, 8, ssse3)
|
yading@10
|
168 PRED8x8L(horizontal_down, 8, mmxext)
|
yading@10
|
169 PRED8x8L(horizontal_down, 8, sse2)
|
yading@10
|
170 PRED8x8L(horizontal_down, 8, ssse3)
|
yading@10
|
171
|
yading@10
|
172 PRED4x4(dc, 8, mmxext)
|
yading@10
|
173 PRED4x4(down_left, 8, mmxext)
|
yading@10
|
174 PRED4x4(down_right, 8, mmxext)
|
yading@10
|
175 PRED4x4(vertical_left, 8, mmxext)
|
yading@10
|
176 PRED4x4(vertical_right, 8, mmxext)
|
yading@10
|
177 PRED4x4(horizontal_up, 8, mmxext)
|
yading@10
|
178 PRED4x4(horizontal_down, 8, mmxext)
|
yading@10
|
179 PRED4x4(tm_vp8, 8, mmx)
|
yading@10
|
180 PRED4x4(tm_vp8, 8, mmxext)
|
yading@10
|
181 PRED4x4(tm_vp8, 8, ssse3)
|
yading@10
|
182 PRED4x4(vertical_vp8, 8, mmxext)
|
yading@10
|
183
|
yading@10
|
184 av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id,
|
yading@10
|
185 const int bit_depth,
|
yading@10
|
186 const int chroma_format_idc)
|
yading@10
|
187 {
|
yading@10
|
188 int mm_flags = av_get_cpu_flags();
|
yading@10
|
189
|
yading@10
|
190 if (bit_depth == 8) {
|
yading@10
|
191 if (EXTERNAL_MMX(mm_flags)) {
|
yading@10
|
192 h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmx;
|
yading@10
|
193 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmx;
|
yading@10
|
194 if (chroma_format_idc == 1) {
|
yading@10
|
195 h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmx;
|
yading@10
|
196 h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmx;
|
yading@10
|
197 }
|
yading@10
|
198 if (codec_id == AV_CODEC_ID_VP8) {
|
yading@10
|
199 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmx;
|
yading@10
|
200 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmx;
|
yading@10
|
201 h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmx;
|
yading@10
|
202 } else {
|
yading@10
|
203 if (chroma_format_idc == 1)
|
yading@10
|
204 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmx;
|
yading@10
|
205 if (codec_id == AV_CODEC_ID_SVQ3) {
|
yading@10
|
206 if (mm_flags & AV_CPU_FLAG_CMOV)
|
yading@10
|
207 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_mmx;
|
yading@10
|
208 } else if (codec_id == AV_CODEC_ID_RV40) {
|
yading@10
|
209 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_mmx;
|
yading@10
|
210 } else {
|
yading@10
|
211 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_mmx;
|
yading@10
|
212 }
|
yading@10
|
213 }
|
yading@10
|
214 }
|
yading@10
|
215
|
yading@10
|
216 if (EXTERNAL_MMXEXT(mm_flags)) {
|
yading@10
|
217 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmxext;
|
yading@10
|
218 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmxext;
|
yading@10
|
219 if (chroma_format_idc == 1)
|
yading@10
|
220 h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmxext;
|
yading@10
|
221 h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmxext;
|
yading@10
|
222 h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmxext;
|
yading@10
|
223 h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_mmxext;
|
yading@10
|
224 h->pred8x8l [VERT_PRED ] = ff_pred8x8l_vertical_8_mmxext;
|
yading@10
|
225 h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_mmxext;
|
yading@10
|
226 h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_mmxext;
|
yading@10
|
227 h->pred8x8l [HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_8_mmxext;
|
yading@10
|
228 h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_mmxext;
|
yading@10
|
229 h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_mmxext;
|
yading@10
|
230 h->pred4x4 [DIAG_DOWN_RIGHT_PRED ] = ff_pred4x4_down_right_8_mmxext;
|
yading@10
|
231 h->pred4x4 [VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_8_mmxext;
|
yading@10
|
232 h->pred4x4 [HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_8_mmxext;
|
yading@10
|
233 h->pred4x4 [DC_PRED ] = ff_pred4x4_dc_8_mmxext;
|
yading@10
|
234 if (codec_id == AV_CODEC_ID_VP8 || codec_id == AV_CODEC_ID_H264) {
|
yading@10
|
235 h->pred4x4 [DIAG_DOWN_LEFT_PRED] = ff_pred4x4_down_left_8_mmxext;
|
yading@10
|
236 }
|
yading@10
|
237 if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) {
|
yading@10
|
238 h->pred4x4 [VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_8_mmxext;
|
yading@10
|
239 }
|
yading@10
|
240 if (codec_id != AV_CODEC_ID_RV40) {
|
yading@10
|
241 h->pred4x4 [HOR_UP_PRED ] = ff_pred4x4_horizontal_up_8_mmxext;
|
yading@10
|
242 }
|
yading@10
|
243 if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) {
|
yading@10
|
244 if (chroma_format_idc == 1) {
|
yading@10
|
245 h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_8_mmxext;
|
yading@10
|
246 h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_8_mmxext;
|
yading@10
|
247 }
|
yading@10
|
248 }
|
yading@10
|
249 if (codec_id == AV_CODEC_ID_VP8) {
|
yading@10
|
250 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmxext;
|
yading@10
|
251 h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_8_mmxext;
|
yading@10
|
252 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmxext;
|
yading@10
|
253 h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmxext;
|
yading@10
|
254 h->pred4x4 [VERT_PRED ] = ff_pred4x4_vertical_vp8_8_mmxext;
|
yading@10
|
255 } else {
|
yading@10
|
256 if (chroma_format_idc == 1)
|
yading@10
|
257 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmxext;
|
yading@10
|
258 if (codec_id == AV_CODEC_ID_SVQ3) {
|
yading@10
|
259 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmxext;
|
yading@10
|
260 } else if (codec_id == AV_CODEC_ID_RV40) {
|
yading@10
|
261 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmxext;
|
yading@10
|
262 } else {
|
yading@10
|
263 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmxext;
|
yading@10
|
264 }
|
yading@10
|
265 }
|
yading@10
|
266 }
|
yading@10
|
267
|
yading@10
|
268 if (EXTERNAL_SSE(mm_flags)) {
|
yading@10
|
269 h->pred16x16[VERT_PRED8x8] = ff_pred16x16_vertical_8_sse;
|
yading@10
|
270 }
|
yading@10
|
271
|
yading@10
|
272 if (EXTERNAL_SSE2(mm_flags)) {
|
yading@10
|
273 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_sse2;
|
yading@10
|
274 h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_sse2;
|
yading@10
|
275 h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_sse2;
|
yading@10
|
276 h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_sse2;
|
yading@10
|
277 h->pred8x8l [VERT_LEFT_PRED ] = ff_pred8x8l_vertical_left_8_sse2;
|
yading@10
|
278 h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_sse2;
|
yading@10
|
279 if (codec_id == AV_CODEC_ID_VP8) {
|
yading@10
|
280 h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_sse2;
|
yading@10
|
281 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_sse2;
|
yading@10
|
282 } else {
|
yading@10
|
283 if (chroma_format_idc == 1)
|
yading@10
|
284 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_sse2;
|
yading@10
|
285 if (codec_id == AV_CODEC_ID_SVQ3) {
|
yading@10
|
286 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_sse2;
|
yading@10
|
287 } else if (codec_id == AV_CODEC_ID_RV40) {
|
yading@10
|
288 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_sse2;
|
yading@10
|
289 } else {
|
yading@10
|
290 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_sse2;
|
yading@10
|
291 }
|
yading@10
|
292 }
|
yading@10
|
293 }
|
yading@10
|
294
|
yading@10
|
295 if (EXTERNAL_SSSE3(mm_flags)) {
|
yading@10
|
296 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_ssse3;
|
yading@10
|
297 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_ssse3;
|
yading@10
|
298 if (chroma_format_idc == 1)
|
yading@10
|
299 h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_ssse3;
|
yading@10
|
300 h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_ssse3;
|
yading@10
|
301 h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_ssse3;
|
yading@10
|
302 h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_ssse3;
|
yading@10
|
303 h->pred8x8l [VERT_PRED ] = ff_pred8x8l_vertical_8_ssse3;
|
yading@10
|
304 h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_ssse3;
|
yading@10
|
305 h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_ssse3;
|
yading@10
|
306 h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_ssse3;
|
yading@10
|
307 h->pred8x8l [VERT_LEFT_PRED ] = ff_pred8x8l_vertical_left_8_ssse3;
|
yading@10
|
308 h->pred8x8l [HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_8_ssse3;
|
yading@10
|
309 h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_ssse3;
|
yading@10
|
310 if (codec_id == AV_CODEC_ID_VP8) {
|
yading@10
|
311 h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_ssse3;
|
yading@10
|
312 h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_ssse3;
|
yading@10
|
313 } else {
|
yading@10
|
314 if (chroma_format_idc == 1)
|
yading@10
|
315 h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_ssse3;
|
yading@10
|
316 if (codec_id == AV_CODEC_ID_SVQ3) {
|
yading@10
|
317 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_ssse3;
|
yading@10
|
318 } else if (codec_id == AV_CODEC_ID_RV40) {
|
yading@10
|
319 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_ssse3;
|
yading@10
|
320 } else {
|
yading@10
|
321 h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_ssse3;
|
yading@10
|
322 }
|
yading@10
|
323 }
|
yading@10
|
324 }
|
yading@10
|
325 } else if (bit_depth == 10) {
|
yading@10
|
326 if (EXTERNAL_MMXEXT(mm_flags)) {
|
yading@10
|
327 h->pred4x4[DC_PRED ] = ff_pred4x4_dc_10_mmxext;
|
yading@10
|
328 h->pred4x4[HOR_UP_PRED ] = ff_pred4x4_horizontal_up_10_mmxext;
|
yading@10
|
329
|
yading@10
|
330 if (chroma_format_idc == 1)
|
yading@10
|
331 h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_10_mmxext;
|
yading@10
|
332
|
yading@10
|
333 h->pred8x8l[DC_128_PRED ] = ff_pred8x8l_128_dc_10_mmxext;
|
yading@10
|
334
|
yading@10
|
335 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_10_mmxext;
|
yading@10
|
336 h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_10_mmxext;
|
yading@10
|
337 h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_10_mmxext;
|
yading@10
|
338 h->pred16x16[LEFT_DC_PRED8x8 ] = ff_pred16x16_left_dc_10_mmxext;
|
yading@10
|
339 h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_10_mmxext;
|
yading@10
|
340 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_10_mmxext;
|
yading@10
|
341 }
|
yading@10
|
342 if (EXTERNAL_SSE2(mm_flags)) {
|
yading@10
|
343 h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_sse2;
|
yading@10
|
344 h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_sse2;
|
yading@10
|
345 h->pred4x4[VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_10_sse2;
|
yading@10
|
346 h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_sse2;
|
yading@10
|
347 h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_sse2;
|
yading@10
|
348
|
yading@10
|
349 if (chroma_format_idc == 1) {
|
yading@10
|
350 h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_10_sse2;
|
yading@10
|
351 h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_10_sse2;
|
yading@10
|
352 h->pred8x8[PLANE_PRED8x8 ] = ff_pred8x8_plane_10_sse2;
|
yading@10
|
353 h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vertical_10_sse2;
|
yading@10
|
354 h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_10_sse2;
|
yading@10
|
355 }
|
yading@10
|
356
|
yading@10
|
357 h->pred8x8l[VERT_PRED ] = ff_pred8x8l_vertical_10_sse2;
|
yading@10
|
358 h->pred8x8l[HOR_PRED ] = ff_pred8x8l_horizontal_10_sse2;
|
yading@10
|
359 h->pred8x8l[DC_PRED ] = ff_pred8x8l_dc_10_sse2;
|
yading@10
|
360 h->pred8x8l[DC_128_PRED ] = ff_pred8x8l_128_dc_10_sse2;
|
yading@10
|
361 h->pred8x8l[TOP_DC_PRED ] = ff_pred8x8l_top_dc_10_sse2;
|
yading@10
|
362 h->pred8x8l[DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_10_sse2;
|
yading@10
|
363 h->pred8x8l[DIAG_DOWN_RIGHT_PRED] = ff_pred8x8l_down_right_10_sse2;
|
yading@10
|
364 h->pred8x8l[VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_10_sse2;
|
yading@10
|
365 h->pred8x8l[HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_10_sse2;
|
yading@10
|
366
|
yading@10
|
367 h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_10_sse2;
|
yading@10
|
368 h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_10_sse2;
|
yading@10
|
369 h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_10_sse2;
|
yading@10
|
370 h->pred16x16[LEFT_DC_PRED8x8 ] = ff_pred16x16_left_dc_10_sse2;
|
yading@10
|
371 h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_10_sse2;
|
yading@10
|
372 h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_10_sse2;
|
yading@10
|
373 }
|
yading@10
|
374 if (EXTERNAL_SSSE3(mm_flags)) {
|
yading@10
|
375 h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_ssse3;
|
yading@10
|
376 h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_ssse3;
|
yading@10
|
377 h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_ssse3;
|
yading@10
|
378
|
yading@10
|
379 h->pred8x8l[HOR_PRED ] = ff_pred8x8l_horizontal_10_ssse3;
|
yading@10
|
380 h->pred8x8l[DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_10_ssse3;
|
yading@10
|
381 h->pred8x8l[DIAG_DOWN_RIGHT_PRED] = ff_pred8x8l_down_right_10_ssse3;
|
yading@10
|
382 h->pred8x8l[VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_10_ssse3;
|
yading@10
|
383 h->pred8x8l[HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_10_ssse3;
|
yading@10
|
384 }
|
yading@10
|
385 if (EXTERNAL_AVX(mm_flags)) {
|
yading@10
|
386 h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_avx;
|
yading@10
|
387 h->pred4x4[DIAG_DOWN_RIGHT_PRED] = ff_pred4x4_down_right_10_avx;
|
yading@10
|
388 h->pred4x4[VERT_LEFT_PRED ] = ff_pred4x4_vertical_left_10_avx;
|
yading@10
|
389 h->pred4x4[VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_10_avx;
|
yading@10
|
390 h->pred4x4[HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_10_avx;
|
yading@10
|
391
|
yading@10
|
392 h->pred8x8l[VERT_PRED ] = ff_pred8x8l_vertical_10_avx;
|
yading@10
|
393 h->pred8x8l[HOR_PRED ] = ff_pred8x8l_horizontal_10_avx;
|
yading@10
|
394 h->pred8x8l[DC_PRED ] = ff_pred8x8l_dc_10_avx;
|
yading@10
|
395 h->pred8x8l[TOP_DC_PRED ] = ff_pred8x8l_top_dc_10_avx;
|
yading@10
|
396 h->pred8x8l[DIAG_DOWN_RIGHT_PRED] = ff_pred8x8l_down_right_10_avx;
|
yading@10
|
397 h->pred8x8l[DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_10_avx;
|
yading@10
|
398 h->pred8x8l[VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_10_avx;
|
yading@10
|
399 h->pred8x8l[HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_10_avx;
|
yading@10
|
400 }
|
yading@10
|
401 }
|
yading@10
|
402 }
|