1/* 2 * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com) 3 * Copyright (c) 2016 Zhou Xiaoyong <zhouxiaoyong@loongson.cn> 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#ifndef AVCODEC_MIPS_VP8DSP_MIPS_H 23#define AVCODEC_MIPS_VP8DSP_MIPS_H 24 25#include "libavutil/mem.h" 26#include "libavcodec/vp8dsp.h" 27#include "libavcodec/mathops.h" 28#include "constants.h" 29 30void ff_put_vp8_pixels4_msa(uint8_t *dst, ptrdiff_t dststride, 31 uint8_t *src, ptrdiff_t srcstride, 32 int h, int x, int y); 33void ff_put_vp8_pixels8_msa(uint8_t *dst, ptrdiff_t dststride, 34 uint8_t *src, ptrdiff_t srcstride, 35 int h, int x, int y); 36void ff_put_vp8_pixels16_msa(uint8_t *dst, ptrdiff_t dststride, 37 uint8_t *src, ptrdiff_t srcstride, 38 int h, int x, int y); 39 40void ff_put_vp8_epel16_h4_msa(uint8_t *dst, ptrdiff_t dststride, 41 uint8_t *src, ptrdiff_t srcstride, 42 int h, int mx, int my); 43void ff_put_vp8_epel16_h6_msa(uint8_t *dst, ptrdiff_t dststride, 44 uint8_t *src, ptrdiff_t srcstride, 45 int h, int mx, int my); 46void ff_put_vp8_epel16_v4_msa(uint8_t *dst, ptrdiff_t dststride, 47 uint8_t *src, ptrdiff_t srcstride, 48 int h, int mx, int my); 49void ff_put_vp8_epel16_v6_msa(uint8_t *dst, ptrdiff_t dststride, 50 uint8_t *src, ptrdiff_t srcstride, 51 int h, int mx, int my); 52void ff_put_vp8_epel16_h4v4_msa(uint8_t *dst, ptrdiff_t dststride, 53 uint8_t *src, ptrdiff_t srcstride, 54 int h, int mx, int my); 55void ff_put_vp8_epel16_h6v4_msa(uint8_t *dst, ptrdiff_t dststride, 56 uint8_t *src, ptrdiff_t srcstride, 57 int h, int mx, int my); 58void ff_put_vp8_epel16_h4v6_msa(uint8_t *dst, ptrdiff_t dststride, 59 uint8_t *src, ptrdiff_t srcstride, 60 int h, int mx, int my); 61void ff_put_vp8_epel16_h6v6_msa(uint8_t *dst, ptrdiff_t dststride, 62 uint8_t *src, ptrdiff_t srcstride, 63 int h, int mx, int my); 64 65void ff_put_vp8_epel8_h4_msa(uint8_t *dst, ptrdiff_t dststride, 66 uint8_t *src, ptrdiff_t srcstride, 67 int h, int mx, int my); 68void ff_put_vp8_epel8_h6_msa(uint8_t *dst, ptrdiff_t dststride, 69 uint8_t *src, ptrdiff_t srcstride, 70 int h, int mx, int my); 71void ff_put_vp8_epel8_v4_msa(uint8_t *dst, ptrdiff_t dststride, 72 uint8_t *src, ptrdiff_t srcstride, 73 int h, int mx, int my); 74void ff_put_vp8_epel8_v6_msa(uint8_t *dst, ptrdiff_t dststride, 75 uint8_t *src, ptrdiff_t srcstride, 76 int h, int mx, int my); 77void ff_put_vp8_epel8_h4v4_msa(uint8_t *dst, ptrdiff_t dststride, 78 uint8_t *src, ptrdiff_t srcstride, 79 int h, int mx, int my); 80void ff_put_vp8_epel8_h6v4_msa(uint8_t *dst, ptrdiff_t dststride, 81 uint8_t *src, ptrdiff_t srcstride, 82 int h, int mx, int my); 83void ff_put_vp8_epel8_h4v6_msa(uint8_t *dst, ptrdiff_t dststride, 84 uint8_t *src, ptrdiff_t srcstride, 85 int h, int mx, int my); 86void ff_put_vp8_epel8_h6v6_msa(uint8_t *dst, ptrdiff_t dststride, 87 uint8_t *src, ptrdiff_t srcstride, 88 int h, int mx, int my); 89 90void ff_put_vp8_epel4_h4_msa(uint8_t *dst, ptrdiff_t dststride, 91 uint8_t *src, ptrdiff_t srcstride, 92 int h, int mx, int my); 93void ff_put_vp8_epel4_h6_msa(uint8_t *dst, ptrdiff_t dststride, 94 uint8_t *src, ptrdiff_t srcstride, 95 int h, int mx, int my); 96void ff_put_vp8_epel4_v4_msa(uint8_t *dst, ptrdiff_t dststride, 97 uint8_t *src, ptrdiff_t srcstride, 98 int h, int mx, int my); 99void ff_put_vp8_epel4_v6_msa(uint8_t *dst, ptrdiff_t dststride, 100 uint8_t *src, ptrdiff_t srcstride, 101 int h, int mx, int my); 102void ff_put_vp8_epel4_h4v4_msa(uint8_t *dst, ptrdiff_t dststride, 103 uint8_t *src, ptrdiff_t srcstride, 104 int h, int mx, int my); 105void ff_put_vp8_epel4_h6v4_msa(uint8_t *dst, ptrdiff_t dststride, 106 uint8_t *src, ptrdiff_t srcstride, 107 int h, int mx, int my); 108void ff_put_vp8_epel4_h4v6_msa(uint8_t *dst, ptrdiff_t dststride, 109 uint8_t *src, ptrdiff_t srcstride, 110 int h, int mx, int my); 111void ff_put_vp8_epel4_h6v6_msa(uint8_t *dst, ptrdiff_t dststride, 112 uint8_t *src, ptrdiff_t srcstride, 113 int h, int mx, int my); 114 115void ff_put_vp8_bilinear16_h_msa(uint8_t *dst, ptrdiff_t dststride, 116 uint8_t *src, ptrdiff_t srcstride, 117 int h, int mx, int my); 118void ff_put_vp8_bilinear16_v_msa(uint8_t *dst, ptrdiff_t dststride, 119 uint8_t *src, ptrdiff_t srcstride, 120 int h, int mx, int my); 121void ff_put_vp8_bilinear16_hv_msa(uint8_t *dst, ptrdiff_t dststride, 122 uint8_t *src, ptrdiff_t srcstride, 123 int h, int mx, int my); 124 125void ff_put_vp8_bilinear8_h_msa(uint8_t *dst, ptrdiff_t dststride, 126 uint8_t *src, ptrdiff_t srcstride, 127 int h, int mx, int my); 128void ff_put_vp8_bilinear8_v_msa(uint8_t *dst, ptrdiff_t dststride, 129 uint8_t *src, ptrdiff_t srcstride, 130 int h, int mx, int my); 131void ff_put_vp8_bilinear8_hv_msa(uint8_t *dst, ptrdiff_t dststride, 132 uint8_t *src, ptrdiff_t srcstride, 133 int h, int mx, int my); 134 135void ff_put_vp8_bilinear4_h_msa(uint8_t *dst, ptrdiff_t dststride, 136 uint8_t *src, ptrdiff_t srcstride, 137 int h, int mx, int my); 138void ff_put_vp8_bilinear4_v_msa(uint8_t *dst, ptrdiff_t dststride, 139 uint8_t *src, ptrdiff_t srcstride, 140 int h, int mx, int my); 141void ff_put_vp8_bilinear4_hv_msa(uint8_t *dst, ptrdiff_t dststride, 142 uint8_t *src, ptrdiff_t srcstride, 143 int h, int mx, int my); 144 145/* loop filter */ 146void ff_vp8_h_loop_filter16_inner_msa(uint8_t *dst, ptrdiff_t stride, 147 int32_t e, int32_t i, int32_t h); 148void ff_vp8_v_loop_filter16_inner_msa(uint8_t *dst, ptrdiff_t stride, 149 int32_t e, int32_t i, int32_t h); 150void ff_vp8_h_loop_filter8uv_inner_msa(uint8_t *dst_u, uint8_t *dst_v, 151 ptrdiff_t stride, 152 int flim_e, int flim_i, int hev_thresh); 153void ff_vp8_v_loop_filter8uv_inner_msa(uint8_t *dst_u, uint8_t *dst_v, 154 ptrdiff_t stride, 155 int flim_e, int flim_i, int hev_thresh); 156void ff_vp8_h_loop_filter16_msa(uint8_t *dst, ptrdiff_t stride, 157 int flim_e, int flim_i, int hev_thresh); 158void ff_vp8_v_loop_filter16_msa(uint8_t *dst, ptrdiff_t stride, 159 int flim_e, int flim_i, int hev_thresh); 160void ff_vp8_h_loop_filter8uv_msa(uint8_t *dst_u, uint8_t *dst_v, 161 ptrdiff_t stride, 162 int flim_e, int flim_i, int hev_thresh); 163void ff_vp8_v_loop_filter8uv_msa(uint8_t *dst_u, uint8_t *dst_v, 164 ptrdiff_t stride, 165 int flim_e, int flim_i, int hev_thresh); 166void ff_vp8_h_loop_filter_simple_msa(uint8_t *dst, ptrdiff_t stride, int flim); 167void ff_vp8_v_loop_filter_simple_msa(uint8_t *dst, ptrdiff_t stride, int flim); 168 169/* Idct functions */ 170void ff_vp8_luma_dc_wht_msa(int16_t block[4][4][16], int16_t dc[16]); 171void ff_vp8_idct_add_msa(uint8_t *dst, int16_t block[16], ptrdiff_t stride); 172void ff_vp8_idct_dc_add_msa(uint8_t *dst, int16_t block[16], ptrdiff_t stride); 173void ff_vp8_idct_dc_add4uv_msa(uint8_t *dst, int16_t block[4][16], 174 ptrdiff_t stride); 175void ff_vp8_idct_dc_add4y_msa(uint8_t *dst, int16_t block[4][16], 176 ptrdiff_t stride); 177 178void ff_vp8_luma_dc_wht_mmi(int16_t block[4][4][16], int16_t dc[16]); 179void ff_vp8_luma_dc_wht_dc_mmi(int16_t block[4][4][16], int16_t dc[16]); 180void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride); 181void ff_vp8_idct_dc_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride); 182void ff_vp8_idct_dc_add4y_mmi(uint8_t *dst, int16_t block[4][16], 183 ptrdiff_t stride); 184void ff_vp8_idct_dc_add4uv_mmi(uint8_t *dst, int16_t block[4][16], 185 ptrdiff_t stride); 186 187void ff_put_vp8_pixels4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 188 ptrdiff_t srcstride, int h, int x, int y); 189void ff_put_vp8_pixels8_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 190 ptrdiff_t srcstride, int h, int x, int y); 191void ff_put_vp8_pixels16_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 192 ptrdiff_t srcstride, int h, int x, int y); 193 194void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 195 ptrdiff_t srcstride, int h, int mx, int my); 196void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 197 ptrdiff_t srcstride, int h, int mx, int my); 198void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 199 ptrdiff_t srcstride, int h, int mx, int my); 200void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, 201 ptrdiff_t srcstride, int h, int mx, int my); 202void ff_put_vp8_epel16_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride, 203 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 204void ff_put_vp8_epel16_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride, 205 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 206void ff_put_vp8_epel16_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride, 207 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 208void ff_put_vp8_epel16_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride, 209 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 210 211void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, 212 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 213void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, 214 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 215void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, 216 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 217void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, 218 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 219void ff_put_vp8_epel8_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride, 220 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 221void ff_put_vp8_epel8_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride, 222 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 223void ff_put_vp8_epel8_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride, 224 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 225void ff_put_vp8_epel8_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride, 226 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 227 228void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, 229 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 230void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, 231 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 232void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, 233 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 234void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, 235 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 236void ff_put_vp8_epel4_h4v4_mmi(uint8_t *dst, ptrdiff_t dststride, 237 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 238void ff_put_vp8_epel4_h6v4_mmi(uint8_t *dst, ptrdiff_t dststride, 239 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 240void ff_put_vp8_epel4_h4v6_mmi(uint8_t *dst, ptrdiff_t dststride, 241 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 242void ff_put_vp8_epel4_h6v6_mmi(uint8_t *dst, ptrdiff_t dststride, 243 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 244 245void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dststride, 246 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 247void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dststride, 248 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 249void ff_put_vp8_bilinear16_hv_mmi(uint8_t *dst, ptrdiff_t dststride, 250 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 251 252void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dststride, 253 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 254void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dststride, 255 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 256void ff_put_vp8_bilinear8_hv_mmi(uint8_t *dst, ptrdiff_t dststride, 257 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 258 259void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dststride, 260 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 261void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dststride, 262 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 263void ff_put_vp8_bilinear4_hv_mmi(uint8_t *dst, ptrdiff_t dststride, 264 uint8_t *src, ptrdiff_t srcstride, int h, int mx, int my); 265 266// loop filter applied to edges between macroblocks 267void ff_vp8_v_loop_filter16_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E, 268 int flim_I, int hev_thresh); 269void ff_vp8_h_loop_filter16_mmi(uint8_t *dst, ptrdiff_t stride, int flim_E, 270 int flim_I, int hev_thresh); 271void ff_vp8_v_loop_filter8uv_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride, 272 int flim_E, int flim_I, int hev_thresh); 273void ff_vp8_h_loop_filter8uv_mmi(uint8_t *dstU, uint8_t *dstV, ptrdiff_t stride, 274 int flim_E, int flim_I, int hev_thresh); 275 276// loop filter applied to inner macroblock edges 277void ff_vp8_v_loop_filter16_inner_mmi(uint8_t *dst, ptrdiff_t stride, 278 int flim_E, int flim_I, int hev_thresh); 279void ff_vp8_h_loop_filter16_inner_mmi(uint8_t *dst, ptrdiff_t stride, 280 int flim_E, int flim_I, int hev_thresh); 281void ff_vp8_v_loop_filter8uv_inner_mmi(uint8_t *dstU, uint8_t *dstV, 282 ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh); 283void ff_vp8_h_loop_filter8uv_inner_mmi(uint8_t *dstU, uint8_t *dstV, 284 ptrdiff_t stride, int flim_E, int flim_I, int hev_thresh); 285 286void ff_vp8_v_loop_filter_simple_mmi(uint8_t *dst, ptrdiff_t stride, int flim); 287void ff_vp8_h_loop_filter_simple_mmi(uint8_t *dst, ptrdiff_t stride, int flim); 288 289#endif // #ifndef AVCODEC_MIPS_VP8DSP_MIPS_H 290