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