diff options
author | 周晓勇 <zhouxiaoyong@loongson.cn> | 2015-07-09 17:10:42 +0800 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-07-15 15:51:02 +0200 |
commit | a0ad6c85aca95418739005d4fe3d68a550959435 (patch) | |
tree | a746929058e97066634fcbe657fe23c2aa4fca1a /libavcodec/mips/h264pred_init_mips.c | |
parent | 2c34389551b6ba3d90f8783806c337e387e603cd (diff) |
avcodec: loongson optimized h264pred with mmi
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/mips/h264pred_init_mips.c')
-rw-r--r-- | libavcodec/mips/h264pred_init_mips.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/libavcodec/mips/h264pred_init_mips.c b/libavcodec/mips/h264pred_init_mips.c index 27ff10f50d..a2124eca7f 100644 --- a/libavcodec/mips/h264pred_init_mips.c +++ b/libavcodec/mips/h264pred_init_mips.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2015 Shivraj Patil (Shivraj.Patil@imgtec.com) + * Zhou Xiaoyong <zhouxiaoyong@loongson.cn> * * This file is part of FFmpeg. * @@ -20,6 +21,7 @@ #include "config.h" #include "h264dsp_mips.h" +#include "h264pred_mips.h" #if HAVE_MSA static av_cold void h264_pred_init_msa(H264PredContext *h, int codec_id, @@ -94,6 +96,54 @@ static av_cold void h264_pred_init_msa(H264PredContext *h, int codec_id, } #endif // #if HAVE_MSA +#if HAVE_MMI +static av_cold void h264_pred_init_mmi(H264PredContext *h, int codec_id, + const int bit_depth, const int chroma_format_idc) +{ + if (bit_depth == 8) { + if (chroma_format_idc == 1) { + h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmi; + h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmi; + } else { + h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x16_vertical_8_mmi; + h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x16_horizontal_8_mmi; + } + + h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmi; + h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmi; + h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmi; + h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmi; + h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmi; + h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_mmi; + + switch (codec_id) { + case AV_CODEC_ID_SVQ3: + h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmi; + ; + break; + case AV_CODEC_ID_RV40: + h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmi; + ; + break; + case AV_CODEC_ID_VP7: + case AV_CODEC_ID_VP8: + ; + break; + default: + h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmi; + break; + } + + if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == AV_CODEC_ID_H264) { + if (chroma_format_idc == 1) { + h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_8_mmi; + h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_8_mmi; + } + } + } +} +#endif /* HAVE_MMI */ + av_cold void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, int bit_depth, const int chroma_format_idc) @@ -101,4 +151,7 @@ av_cold void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, #if HAVE_MSA h264_pred_init_msa(h, codec_id, bit_depth, chroma_format_idc); #endif // #if HAVE_MSA +#if HAVE_MMI + h264_pred_init_mmi(h, codec_id, bit_depth, chroma_format_idc); +#endif /* HAVE_MMI */ } |