| OLD | NEW |
| (Empty) | |
| 1 /* |
| 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ |
| 10 |
| 11 #include "vpx_ports/config.h" |
| 12 #include "vp8/common/recon.h" |
| 13 #include "recon_x86.h" |
| 14 #include "vpx_mem/vpx_mem.h" |
| 15 |
| 16 #define build_intra_predictors_mbuv_prototype(sym) \ |
| 17 void sym(unsigned char *dst, int dst_stride, \ |
| 18 const unsigned char *src, int src_stride) |
| 19 typedef build_intra_predictors_mbuv_prototype((*build_intra_predictors_mbuv_fn_t
)); |
| 20 |
| 21 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_dc_mmx2); |
| 22 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_dctop_mmx2); |
| 23 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_dcleft_mmx2); |
| 24 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_dc128_mmx); |
| 25 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_ho_mmx2); |
| 26 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_ho_ssse3); |
| 27 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_ve_mmx); |
| 28 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_tm_sse2); |
| 29 extern build_intra_predictors_mbuv_prototype(vp8_intra_pred_uv_tm_ssse3); |
| 30 |
| 31 static void vp8_build_intra_predictors_mbuv_x86(MACROBLOCKD *x, |
| 32 unsigned char *dst_u, |
| 33 unsigned char *dst_v, |
| 34 int dst_stride, |
| 35 build_intra_predictors_mbuv_fn_t
tm_func, |
| 36 build_intra_predictors_mbuv_fn_t
ho_func) |
| 37 { |
| 38 int mode = x->mode_info_context->mbmi.uv_mode; |
| 39 build_intra_predictors_mbuv_fn_t fn; |
| 40 int src_stride = x->dst.uv_stride; |
| 41 |
| 42 switch (mode) { |
| 43 case V_PRED: fn = vp8_intra_pred_uv_ve_mmx; break; |
| 44 case H_PRED: fn = ho_func; break; |
| 45 case TM_PRED: fn = tm_func; break; |
| 46 case DC_PRED: |
| 47 if (x->up_available) { |
| 48 if (x->left_available) { |
| 49 fn = vp8_intra_pred_uv_dc_mmx2; break; |
| 50 } else { |
| 51 fn = vp8_intra_pred_uv_dctop_mmx2; break; |
| 52 } |
| 53 } else if (x->left_available) { |
| 54 fn = vp8_intra_pred_uv_dcleft_mmx2; break; |
| 55 } else { |
| 56 fn = vp8_intra_pred_uv_dc128_mmx; break; |
| 57 } |
| 58 break; |
| 59 default: return; |
| 60 } |
| 61 |
| 62 fn(dst_u, dst_stride, x->dst.u_buffer, src_stride); |
| 63 fn(dst_v, dst_stride, x->dst.v_buffer, src_stride); |
| 64 } |
| 65 |
| 66 void vp8_build_intra_predictors_mbuv_sse2(MACROBLOCKD *x) |
| 67 { |
| 68 vp8_build_intra_predictors_mbuv_x86(x, &x->predictor[256], |
| 69 &x->predictor[320], 8, |
| 70 vp8_intra_pred_uv_tm_sse2, |
| 71 vp8_intra_pred_uv_ho_mmx2); |
| 72 } |
| 73 |
| 74 void vp8_build_intra_predictors_mbuv_ssse3(MACROBLOCKD *x) |
| 75 { |
| 76 vp8_build_intra_predictors_mbuv_x86(x, &x->predictor[256], |
| 77 &x->predictor[320], 8, |
| 78 vp8_intra_pred_uv_tm_ssse3, |
| 79 vp8_intra_pred_uv_ho_ssse3); |
| 80 } |
| 81 |
| 82 void vp8_build_intra_predictors_mbuv_s_sse2(MACROBLOCKD *x) |
| 83 { |
| 84 vp8_build_intra_predictors_mbuv_x86(x, x->dst.u_buffer, |
| 85 x->dst.v_buffer, x->dst.uv_stride, |
| 86 vp8_intra_pred_uv_tm_sse2, |
| 87 vp8_intra_pred_uv_ho_mmx2); |
| 88 } |
| 89 |
| 90 void vp8_build_intra_predictors_mbuv_s_ssse3(MACROBLOCKD *x) |
| 91 { |
| 92 vp8_build_intra_predictors_mbuv_x86(x, x->dst.u_buffer, |
| 93 x->dst.v_buffer, x->dst.uv_stride, |
| 94 vp8_intra_pred_uv_tm_ssse3, |
| 95 vp8_intra_pred_uv_ho_ssse3); |
| 96 } |
| OLD | NEW |