PageRenderTime 45ms CodeModel.GetById 15ms app.highlight 26ms RepoModel.GetById 2ms app.codeStats 0ms

/libavcodec/x86/h264_intrapred_init.c

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