Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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