1/* 2 * Copyright (c) 2015 Shivraj Patil (Shivraj.Patil@imgtec.com) 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_VP9DSP_MIPS_H 22#define AVCODEC_MIPS_VP9DSP_MIPS_H 23 24#include <stddef.h> 25#include <stdint.h> 26 27#define VP9_8TAP_MIPS_MSA_FUNC(SIZE, type, type_idx) \ 28void ff_put_8tap_##type##_##SIZE##h_msa(uint8_t *dst, ptrdiff_t dststride, \ 29 const uint8_t *src, \ 30 ptrdiff_t srcstride, \ 31 int h, int mx, int my); \ 32 \ 33void ff_put_8tap_##type##_##SIZE##v_msa(uint8_t *dst, ptrdiff_t dststride, \ 34 const uint8_t *src, \ 35 ptrdiff_t srcstride, \ 36 int h, int mx, int my); \ 37 \ 38void ff_put_8tap_##type##_##SIZE##hv_msa(uint8_t *dst, ptrdiff_t dststride, \ 39 const uint8_t *src, \ 40 ptrdiff_t srcstride, \ 41 int h, int mx, int my); \ 42 \ 43void ff_avg_8tap_##type##_##SIZE##h_msa(uint8_t *dst, ptrdiff_t dststride, \ 44 const uint8_t *src, \ 45 ptrdiff_t srcstride, \ 46 int h, int mx, int my); \ 47 \ 48void ff_avg_8tap_##type##_##SIZE##v_msa(uint8_t *dst, ptrdiff_t dststride, \ 49 const uint8_t *src, \ 50 ptrdiff_t srcstride, \ 51 int h, int mx, int my); \ 52 \ 53void ff_avg_8tap_##type##_##SIZE##hv_msa(uint8_t *dst, ptrdiff_t dststride, \ 54 const uint8_t *src, \ 55 ptrdiff_t srcstride, \ 56 int h, int mx, int my); 57 58#define VP9_BILINEAR_MIPS_MSA_FUNC(SIZE) \ 59void ff_put_bilin_##SIZE##h_msa(uint8_t *dst, ptrdiff_t dststride, \ 60 const uint8_t *src, ptrdiff_t srcstride, \ 61 int h, int mx, int my); \ 62 \ 63void ff_put_bilin_##SIZE##v_msa(uint8_t *dst, ptrdiff_t dststride, \ 64 const uint8_t *src, ptrdiff_t srcstride, \ 65 int h, int mx, int my); \ 66 \ 67void ff_put_bilin_##SIZE##hv_msa(uint8_t *dst, ptrdiff_t dststride, \ 68 const uint8_t *src, ptrdiff_t srcstride, \ 69 int h, int mx, int my); \ 70 \ 71void ff_avg_bilin_##SIZE##h_msa(uint8_t *dst, ptrdiff_t dststride, \ 72 const uint8_t *src, ptrdiff_t srcstride, \ 73 int h, int mx, int my); \ 74 \ 75void ff_avg_bilin_##SIZE##v_msa(uint8_t *dst, ptrdiff_t dststride, \ 76 const uint8_t *src, ptrdiff_t srcstride, \ 77 int h, int mx, int my); \ 78 \ 79void ff_avg_bilin_##SIZE##hv_msa(uint8_t *dst, ptrdiff_t dststride, \ 80 const uint8_t *src, ptrdiff_t srcstride, \ 81 int h, int mx, int my); 82 83#define VP9_COPY_AVG_MIPS_MSA_FUNC(SIZE) \ 84void ff_copy##SIZE##_msa(uint8_t *dst, ptrdiff_t dststride, \ 85 const uint8_t *src, ptrdiff_t srcstride, \ 86 int h, int mx, int my); \ 87 \ 88void ff_avg##SIZE##_msa(uint8_t *dst, ptrdiff_t dststride, \ 89 const uint8_t *src, ptrdiff_t srcstride, \ 90 int h, int mx, int my); 91 92VP9_8TAP_MIPS_MSA_FUNC(64, regular, FILTER_8TAP_REGULAR); 93VP9_8TAP_MIPS_MSA_FUNC(32, regular, FILTER_8TAP_REGULAR); 94VP9_8TAP_MIPS_MSA_FUNC(16, regular, FILTER_8TAP_REGULAR); 95VP9_8TAP_MIPS_MSA_FUNC(8, regular, FILTER_8TAP_REGULAR); 96VP9_8TAP_MIPS_MSA_FUNC(4, regular, FILTER_8TAP_REGULAR); 97 98VP9_8TAP_MIPS_MSA_FUNC(64, sharp, FILTER_8TAP_SHARP); 99VP9_8TAP_MIPS_MSA_FUNC(32, sharp, FILTER_8TAP_SHARP); 100VP9_8TAP_MIPS_MSA_FUNC(16, sharp, FILTER_8TAP_SHARP); 101VP9_8TAP_MIPS_MSA_FUNC(8, sharp, FILTER_8TAP_SHARP); 102VP9_8TAP_MIPS_MSA_FUNC(4, sharp, FILTER_8TAP_SHARP); 103 104VP9_8TAP_MIPS_MSA_FUNC(64, smooth, FILTER_8TAP_SMOOTH); 105VP9_8TAP_MIPS_MSA_FUNC(32, smooth, FILTER_8TAP_SMOOTH); 106VP9_8TAP_MIPS_MSA_FUNC(16, smooth, FILTER_8TAP_SMOOTH); 107VP9_8TAP_MIPS_MSA_FUNC(8, smooth, FILTER_8TAP_SMOOTH); 108VP9_8TAP_MIPS_MSA_FUNC(4, smooth, FILTER_8TAP_SMOOTH); 109 110VP9_BILINEAR_MIPS_MSA_FUNC(64); 111VP9_BILINEAR_MIPS_MSA_FUNC(32); 112VP9_BILINEAR_MIPS_MSA_FUNC(16); 113VP9_BILINEAR_MIPS_MSA_FUNC(8); 114VP9_BILINEAR_MIPS_MSA_FUNC(4); 115 116VP9_COPY_AVG_MIPS_MSA_FUNC(64); 117VP9_COPY_AVG_MIPS_MSA_FUNC(32); 118VP9_COPY_AVG_MIPS_MSA_FUNC(16); 119VP9_COPY_AVG_MIPS_MSA_FUNC(8); 120VP9_COPY_AVG_MIPS_MSA_FUNC(4); 121 122#undef VP9_8TAP_MIPS_MSA_FUNC 123#undef VP9_BILINEAR_MIPS_MSA_FUNC 124#undef VP9_COPY_AVG_MIPS_MSA_FUNC 125 126void ff_loop_filter_h_4_8_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 127 int32_t i, int32_t h); 128void ff_loop_filter_h_8_8_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 129 int32_t i, int32_t h); 130void ff_loop_filter_h_16_8_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 131 int32_t i, int32_t h); 132void ff_loop_filter_v_4_8_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 133 int32_t i, int32_t h); 134void ff_loop_filter_v_8_8_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 135 int32_t i, int32_t h); 136void ff_loop_filter_v_16_8_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 137 int32_t i, int32_t h); 138void ff_loop_filter_h_44_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 139 int32_t i, int32_t h); 140void ff_loop_filter_h_88_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 141 int32_t i, int32_t h); 142void ff_loop_filter_h_16_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 143 int32_t i, int32_t h); 144void ff_loop_filter_v_44_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 145 int32_t i, int32_t h); 146void ff_loop_filter_v_88_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 147 int32_t i, int32_t h); 148void ff_loop_filter_v_16_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 149 int32_t i, int32_t h); 150void ff_loop_filter_h_48_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 151 int32_t i, int32_t h); 152void ff_loop_filter_h_84_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 153 int32_t i, int32_t h); 154void ff_loop_filter_v_48_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 155 int32_t i, int32_t h); 156void ff_loop_filter_v_84_16_msa(uint8_t *dst, ptrdiff_t stride, int32_t e, 157 int32_t i, int32_t h); 158void ff_idct_idct_4x4_add_msa(uint8_t *dst, ptrdiff_t stride, 159 int16_t *block, int eob); 160void ff_idct_idct_8x8_add_msa(uint8_t *dst, ptrdiff_t stride, 161 int16_t *block, int eob); 162void ff_idct_idct_16x16_add_msa(uint8_t *dst, ptrdiff_t stride, 163 int16_t *block, int eob); 164void ff_idct_idct_32x32_add_msa(uint8_t *dst, ptrdiff_t stride, 165 int16_t *block, int eob); 166void ff_iadst_iadst_4x4_add_msa(uint8_t *dst, ptrdiff_t stride, 167 int16_t *block, int eob); 168void ff_iadst_iadst_8x8_add_msa(uint8_t *dst, ptrdiff_t stride, 169 int16_t *block, int eob); 170void ff_iadst_iadst_16x16_add_msa(uint8_t *dst, ptrdiff_t stride, 171 int16_t *block, int eob); 172void ff_iadst_idct_4x4_add_msa(uint8_t *dst, ptrdiff_t stride, 173 int16_t *block, int eob); 174void ff_iadst_idct_8x8_add_msa(uint8_t *dst, ptrdiff_t stride, 175 int16_t *block, int eob); 176void ff_iadst_idct_16x16_add_msa(uint8_t *dst, ptrdiff_t stride, 177 int16_t *block, int eob); 178void ff_idct_iadst_4x4_add_msa(uint8_t *pu8Dest, ptrdiff_t stride, 179 int16_t *block, int eob); 180void ff_idct_iadst_8x8_add_msa(uint8_t *pu8Dest, ptrdiff_t stride, 181 int16_t *block, int eob); 182void ff_idct_iadst_16x16_add_msa(uint8_t *pu8Dest, ptrdiff_t stride, 183 int16_t *block, int eob); 184void ff_iwht_iwht_4x4_add_msa(uint8_t *dst, ptrdiff_t stride, 185 int16_t *block, int eob); 186 187void ff_vert_16x16_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 188 const uint8_t *top); 189void ff_vert_32x32_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 190 const uint8_t *top); 191void ff_hor_16x16_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 192 const uint8_t *top); 193void ff_hor_32x32_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 194 const uint8_t *top); 195void ff_dc_4x4_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 196 const uint8_t *top); 197void ff_dc_8x8_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 198 const uint8_t *top); 199void ff_dc_16x16_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 200 const uint8_t *top); 201void ff_dc_32x32_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 202 const uint8_t *top); 203void ff_dc_left_4x4_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 204 const uint8_t *top); 205void ff_dc_left_8x8_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 206 const uint8_t *top); 207void ff_dc_left_16x16_msa(uint8_t *dst, ptrdiff_t stride, 208 const uint8_t *left, const uint8_t *top); 209void ff_dc_left_32x32_msa(uint8_t *dst, ptrdiff_t stride, 210 const uint8_t *left, const uint8_t *top); 211void ff_dc_top_4x4_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 212 const uint8_t *top); 213void ff_dc_top_8x8_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 214 const uint8_t *top); 215void ff_dc_top_16x16_msa(uint8_t *dst, ptrdiff_t stride, 216 const uint8_t *left, const uint8_t *top); 217void ff_dc_top_32x32_msa(uint8_t *dst, ptrdiff_t stride, 218 const uint8_t *left, const uint8_t *top); 219void ff_dc_128_16x16_msa(uint8_t *dst, ptrdiff_t stride, 220 const uint8_t *left, const uint8_t *top); 221void ff_dc_128_32x32_msa(uint8_t *dst, ptrdiff_t stride, 222 const uint8_t *left, const uint8_t *top); 223void ff_dc_127_16x16_msa(uint8_t *dst, ptrdiff_t stride, 224 const uint8_t *left, const uint8_t *top); 225void ff_dc_127_32x32_msa(uint8_t *dst, ptrdiff_t stride, 226 const uint8_t *left, const uint8_t *top); 227void ff_dc_129_16x16_msa(uint8_t *dst, ptrdiff_t stride, 228 const uint8_t *left, const uint8_t *top); 229void ff_dc_129_32x32_msa(uint8_t *dst, ptrdiff_t stride, 230 const uint8_t *left, const uint8_t *top); 231void ff_tm_4x4_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 232 const uint8_t *top); 233void ff_tm_8x8_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 234 const uint8_t *top); 235void ff_tm_16x16_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 236 const uint8_t *top); 237void ff_tm_32x32_msa(uint8_t *dst, ptrdiff_t stride, const uint8_t *left, 238 const uint8_t *top); 239 240#define VP9_8TAP_MIPS_MMI_FUNC(SIZE, type, type_idx) \ 241void ff_put_8tap_##type##_##SIZE##h_mmi(uint8_t *dst, ptrdiff_t dststride, \ 242 const uint8_t *src, \ 243 ptrdiff_t srcstride, \ 244 int h, int mx, int my); \ 245 \ 246void ff_put_8tap_##type##_##SIZE##v_mmi(uint8_t *dst, ptrdiff_t dststride, \ 247 const uint8_t *src, \ 248 ptrdiff_t srcstride, \ 249 int h, int mx, int my); \ 250 \ 251void ff_put_8tap_##type##_##SIZE##hv_mmi(uint8_t *dst, ptrdiff_t dststride, \ 252 const uint8_t *src, \ 253 ptrdiff_t srcstride, \ 254 int h, int mx, int my); \ 255 \ 256void ff_avg_8tap_##type##_##SIZE##h_mmi(uint8_t *dst, ptrdiff_t dststride, \ 257 const uint8_t *src, \ 258 ptrdiff_t srcstride, \ 259 int h, int mx, int my); \ 260 \ 261void ff_avg_8tap_##type##_##SIZE##v_mmi(uint8_t *dst, ptrdiff_t dststride, \ 262 const uint8_t *src, \ 263 ptrdiff_t srcstride, \ 264 int h, int mx, int my); \ 265 \ 266void ff_avg_8tap_##type##_##SIZE##hv_mmi(uint8_t *dst, ptrdiff_t dststride, \ 267 const uint8_t *src, \ 268 ptrdiff_t srcstride, \ 269 int h, int mx, int my); 270 271VP9_8TAP_MIPS_MMI_FUNC(64, regular, FILTER_8TAP_REGULAR); 272VP9_8TAP_MIPS_MMI_FUNC(32, regular, FILTER_8TAP_REGULAR); 273VP9_8TAP_MIPS_MMI_FUNC(16, regular, FILTER_8TAP_REGULAR); 274VP9_8TAP_MIPS_MMI_FUNC(8, regular, FILTER_8TAP_REGULAR); 275VP9_8TAP_MIPS_MMI_FUNC(4, regular, FILTER_8TAP_REGULAR); 276 277VP9_8TAP_MIPS_MMI_FUNC(64, sharp, FILTER_8TAP_SHARP); 278VP9_8TAP_MIPS_MMI_FUNC(32, sharp, FILTER_8TAP_SHARP); 279VP9_8TAP_MIPS_MMI_FUNC(16, sharp, FILTER_8TAP_SHARP); 280VP9_8TAP_MIPS_MMI_FUNC(8, sharp, FILTER_8TAP_SHARP); 281VP9_8TAP_MIPS_MMI_FUNC(4, sharp, FILTER_8TAP_SHARP); 282 283VP9_8TAP_MIPS_MMI_FUNC(64, smooth, FILTER_8TAP_SMOOTH); 284VP9_8TAP_MIPS_MMI_FUNC(32, smooth, FILTER_8TAP_SMOOTH); 285VP9_8TAP_MIPS_MMI_FUNC(16, smooth, FILTER_8TAP_SMOOTH); 286VP9_8TAP_MIPS_MMI_FUNC(8, smooth, FILTER_8TAP_SMOOTH); 287VP9_8TAP_MIPS_MMI_FUNC(4, smooth, FILTER_8TAP_SMOOTH); 288#undef VP9_8TAP_MIPS_MMI_FUNC 289 290#endif // #ifndef AVCODEC_MIPS_VP9DSP_MIPS_H 291