1 /* 2 * Copyright (c) 2016 Zhou Xiaoyong <zhouxiaoyong@loongson.cn> 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 #ifndef AVCODEC_MIPS_VC1DSP_MIPS_H 22 #define AVCODEC_MIPS_VC1DSP_MIPS_H 23 24 #include "libavcodec/vc1dsp.h" 25 26 void ff_put_vc1_mspel_mc00_mmi(uint8_t *dst, const uint8_t *src, 27 ptrdiff_t stride, int rnd); 28 void ff_put_vc1_mspel_mc01_mmi(uint8_t *dst, const uint8_t *src, 29 ptrdiff_t stride, int rnd); 30 void ff_put_vc1_mspel_mc02_mmi(uint8_t *dst, const uint8_t *src, 31 ptrdiff_t stride, int rnd); 32 void ff_put_vc1_mspel_mc03_mmi(uint8_t *dst, const uint8_t *src, 33 ptrdiff_t stride, int rnd); 34 void ff_put_vc1_mspel_mc10_mmi(uint8_t *dst, const uint8_t *src, 35 ptrdiff_t stride, int rnd); 36 void ff_put_vc1_mspel_mc11_mmi(uint8_t *dst, const uint8_t *src, 37 ptrdiff_t stride, int rnd); 38 void ff_put_vc1_mspel_mc12_mmi(uint8_t *dst, const uint8_t *src, 39 ptrdiff_t stride, int rnd); 40 void ff_put_vc1_mspel_mc13_mmi(uint8_t *dst, const uint8_t *src, 41 ptrdiff_t stride, int rnd); 42 void ff_put_vc1_mspel_mc20_mmi(uint8_t *dst, const uint8_t *src, 43 ptrdiff_t stride, int rnd); 44 void ff_put_vc1_mspel_mc21_mmi(uint8_t *dst, const uint8_t *src, 45 ptrdiff_t stride, int rnd); 46 void ff_put_vc1_mspel_mc22_mmi(uint8_t *dst, const uint8_t *src, 47 ptrdiff_t stride, int rnd); 48 void ff_put_vc1_mspel_mc23_mmi(uint8_t *dst, const uint8_t *src, 49 ptrdiff_t stride, int rnd); 50 void ff_put_vc1_mspel_mc30_mmi(uint8_t *dst, const uint8_t *src, 51 ptrdiff_t stride, int rnd); 52 void ff_put_vc1_mspel_mc31_mmi(uint8_t *dst, const uint8_t *src, 53 ptrdiff_t stride, int rnd); 54 void ff_put_vc1_mspel_mc32_mmi(uint8_t *dst, const uint8_t *src, 55 ptrdiff_t stride, int rnd); 56 void ff_put_vc1_mspel_mc33_mmi(uint8_t *dst, const uint8_t *src, 57 ptrdiff_t stride, int rnd); 58 59 void ff_avg_vc1_mspel_mc00_mmi(uint8_t *dst, const uint8_t *src, 60 ptrdiff_t stride, int rnd); 61 void ff_avg_vc1_mspel_mc01_mmi(uint8_t *dst, const uint8_t *src, 62 ptrdiff_t stride, int rnd); 63 void ff_avg_vc1_mspel_mc02_mmi(uint8_t *dst, const uint8_t *src, 64 ptrdiff_t stride, int rnd); 65 void ff_avg_vc1_mspel_mc03_mmi(uint8_t *dst, const uint8_t *src, 66 ptrdiff_t stride, int rnd); 67 void ff_avg_vc1_mspel_mc10_mmi(uint8_t *dst, const uint8_t *src, 68 ptrdiff_t stride, int rnd); 69 void ff_avg_vc1_mspel_mc11_mmi(uint8_t *dst, const uint8_t *src, 70 ptrdiff_t stride, int rnd); 71 void ff_avg_vc1_mspel_mc12_mmi(uint8_t *dst, const uint8_t *src, 72 ptrdiff_t stride, int rnd); 73 void ff_avg_vc1_mspel_mc13_mmi(uint8_t *dst, const uint8_t *src, 74 ptrdiff_t stride, int rnd); 75 void ff_avg_vc1_mspel_mc20_mmi(uint8_t *dst, const uint8_t *src, 76 ptrdiff_t stride, int rnd); 77 void ff_avg_vc1_mspel_mc21_mmi(uint8_t *dst, const uint8_t *src, 78 ptrdiff_t stride, int rnd); 79 void ff_avg_vc1_mspel_mc22_mmi(uint8_t *dst, const uint8_t *src, 80 ptrdiff_t stride, int rnd); 81 void ff_avg_vc1_mspel_mc23_mmi(uint8_t *dst, const uint8_t *src, 82 ptrdiff_t stride, int rnd); 83 void ff_avg_vc1_mspel_mc30_mmi(uint8_t *dst, const uint8_t *src, 84 ptrdiff_t stride, int rnd); 85 void ff_avg_vc1_mspel_mc31_mmi(uint8_t *dst, const uint8_t *src, 86 ptrdiff_t stride, int rnd); 87 void ff_avg_vc1_mspel_mc32_mmi(uint8_t *dst, const uint8_t *src, 88 ptrdiff_t stride, int rnd); 89 void ff_avg_vc1_mspel_mc33_mmi(uint8_t *dst, const uint8_t *src, 90 ptrdiff_t stride, int rnd); 91 92 93 void ff_put_vc1_mspel_mc00_16_mmi(uint8_t *dst, const uint8_t *src, 94 ptrdiff_t stride, int rnd); 95 void ff_put_vc1_mspel_mc01_16_mmi(uint8_t *dst, const uint8_t *src, 96 ptrdiff_t stride, int rnd); 97 void ff_put_vc1_mspel_mc02_16_mmi(uint8_t *dst, const uint8_t *src, 98 ptrdiff_t stride, int rnd); 99 void ff_put_vc1_mspel_mc03_16_mmi(uint8_t *dst, const uint8_t *src, 100 ptrdiff_t stride, int rnd); 101 void ff_put_vc1_mspel_mc10_16_mmi(uint8_t *dst, const uint8_t *src, 102 ptrdiff_t stride, int rnd); 103 void ff_put_vc1_mspel_mc11_16_mmi(uint8_t *dst, const uint8_t *src, 104 ptrdiff_t stride, int rnd); 105 void ff_put_vc1_mspel_mc12_16_mmi(uint8_t *dst, const uint8_t *src, 106 ptrdiff_t stride, int rnd); 107 void ff_put_vc1_mspel_mc13_16_mmi(uint8_t *dst, const uint8_t *src, 108 ptrdiff_t stride, int rnd); 109 void ff_put_vc1_mspel_mc20_16_mmi(uint8_t *dst, const uint8_t *src, 110 ptrdiff_t stride, int rnd); 111 void ff_put_vc1_mspel_mc21_16_mmi(uint8_t *dst, const uint8_t *src, 112 ptrdiff_t stride, int rnd); 113 void ff_put_vc1_mspel_mc22_16_mmi(uint8_t *dst, const uint8_t *src, 114 ptrdiff_t stride, int rnd); 115 void ff_put_vc1_mspel_mc23_16_mmi(uint8_t *dst, const uint8_t *src, 116 ptrdiff_t stride, int rnd); 117 void ff_put_vc1_mspel_mc30_16_mmi(uint8_t *dst, const uint8_t *src, 118 ptrdiff_t stride, int rnd); 119 void ff_put_vc1_mspel_mc31_16_mmi(uint8_t *dst, const uint8_t *src, 120 ptrdiff_t stride, int rnd); 121 void ff_put_vc1_mspel_mc32_16_mmi(uint8_t *dst, const uint8_t *src, 122 ptrdiff_t stride, int rnd); 123 void ff_put_vc1_mspel_mc33_16_mmi(uint8_t *dst, const uint8_t *src, 124 ptrdiff_t stride, int rnd); 125 126 void ff_avg_vc1_mspel_mc00_16_mmi(uint8_t *dst, const uint8_t *src, 127 ptrdiff_t stride, int rnd); 128 void ff_avg_vc1_mspel_mc01_16_mmi(uint8_t *dst, const uint8_t *src, 129 ptrdiff_t stride, int rnd); 130 void ff_avg_vc1_mspel_mc02_16_mmi(uint8_t *dst, const uint8_t *src, 131 ptrdiff_t stride, int rnd); 132 void ff_avg_vc1_mspel_mc03_16_mmi(uint8_t *dst, const uint8_t *src, 133 ptrdiff_t stride, int rnd); 134 void ff_avg_vc1_mspel_mc10_16_mmi(uint8_t *dst, const uint8_t *src, 135 ptrdiff_t stride, int rnd); 136 void ff_avg_vc1_mspel_mc11_16_mmi(uint8_t *dst, const uint8_t *src, 137 ptrdiff_t stride, int rnd); 138 void ff_avg_vc1_mspel_mc12_16_mmi(uint8_t *dst, const uint8_t *src, 139 ptrdiff_t stride, int rnd); 140 void ff_avg_vc1_mspel_mc13_16_mmi(uint8_t *dst, const uint8_t *src, 141 ptrdiff_t stride, int rnd); 142 void ff_avg_vc1_mspel_mc20_16_mmi(uint8_t *dst, const uint8_t *src, 143 ptrdiff_t stride, int rnd); 144 void ff_avg_vc1_mspel_mc21_16_mmi(uint8_t *dst, const uint8_t *src, 145 ptrdiff_t stride, int rnd); 146 void ff_avg_vc1_mspel_mc22_16_mmi(uint8_t *dst, const uint8_t *src, 147 ptrdiff_t stride, int rnd); 148 void ff_avg_vc1_mspel_mc23_16_mmi(uint8_t *dst, const uint8_t *src, 149 ptrdiff_t stride, int rnd); 150 void ff_avg_vc1_mspel_mc30_16_mmi(uint8_t *dst, const uint8_t *src, 151 ptrdiff_t stride, int rnd); 152 void ff_avg_vc1_mspel_mc31_16_mmi(uint8_t *dst, const uint8_t *src, 153 ptrdiff_t stride, int rnd); 154 void ff_avg_vc1_mspel_mc32_16_mmi(uint8_t *dst, const uint8_t *src, 155 ptrdiff_t stride, int rnd); 156 void ff_avg_vc1_mspel_mc33_16_mmi(uint8_t *dst, const uint8_t *src, 157 ptrdiff_t stride, int rnd); 158 159 void ff_vc1_inv_trans_8x8_mmi(int16_t block[64]); 160 void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 161 void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 162 void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 163 164 void ff_vc1_inv_trans_4x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 165 void ff_vc1_inv_trans_4x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 166 void ff_vc1_inv_trans_8x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 167 void ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 168 169 void ff_vc1_v_overlap_mmi(uint8_t *src, ptrdiff_t stride); 170 void ff_vc1_h_overlap_mmi(uint8_t *src, ptrdiff_t stride); 171 void ff_vc1_v_s_overlap_mmi(int16_t *top, int16_t *bottom); 172 void ff_vc1_h_s_overlap_mmi(int16_t *left, int16_t *right, ptrdiff_t left_stride, ptrdiff_t right_stride, int flags); 173 174 void ff_vc1_v_loop_filter4_mmi(uint8_t *src, ptrdiff_t stride, int pq); 175 void ff_vc1_h_loop_filter4_mmi(uint8_t *src, ptrdiff_t stride, int pq); 176 void ff_vc1_v_loop_filter8_mmi(uint8_t *src, ptrdiff_t stride, int pq); 177 void ff_vc1_h_loop_filter8_mmi(uint8_t *src, ptrdiff_t stride, int pq); 178 void ff_vc1_v_loop_filter16_mmi(uint8_t *src, ptrdiff_t stride, int pq); 179 void ff_vc1_h_loop_filter16_mmi(uint8_t *src, ptrdiff_t stride, int pq); 180 181 void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, 182 uint8_t *src /* align 1 */, 183 ptrdiff_t stride, int h, int x, int y); 184 void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, 185 uint8_t *src /* align 1 */, 186 ptrdiff_t stride, int h, int x, int y); 187 void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */, 188 uint8_t *src /* align 1 */, 189 ptrdiff_t stride, int h, int x, int y); 190 void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */, 191 uint8_t *src /* align 1 */, 192 ptrdiff_t stride, int h, int x, int y); 193 194 void ff_vc1_inv_trans_8x8_msa(int16_t block[64]); 195 void ff_vc1_inv_trans_8x4_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 196 void ff_vc1_inv_trans_4x8_msa(uint8_t *dest, ptrdiff_t linesize, int16_t *block); 197 198 #define FF_PUT_VC1_MSPEL_MC_MSA(hmode, vmode) \ 199 void ff_put_vc1_mspel_mc ## hmode ## vmode ## _msa(uint8_t *dst, \ 200 const uint8_t *src, \ 201 ptrdiff_t stride, int rnd); \ 202 void ff_put_vc1_mspel_mc ## hmode ## vmode ## _16_msa(uint8_t *dst, \ 203 const uint8_t *src, \ 204 ptrdiff_t stride, int rnd); 205 206 FF_PUT_VC1_MSPEL_MC_MSA(1, 1); 207 FF_PUT_VC1_MSPEL_MC_MSA(1, 2); 208 FF_PUT_VC1_MSPEL_MC_MSA(1, 3); 209 210 FF_PUT_VC1_MSPEL_MC_MSA(2, 1); 211 FF_PUT_VC1_MSPEL_MC_MSA(2, 2); 212 FF_PUT_VC1_MSPEL_MC_MSA(2, 3); 213 214 FF_PUT_VC1_MSPEL_MC_MSA(3, 1); 215 FF_PUT_VC1_MSPEL_MC_MSA(3, 2); 216 FF_PUT_VC1_MSPEL_MC_MSA(3, 3); 217 #endif /* AVCODEC_MIPS_VC1DSP_MIPS_H */ 218