1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com) 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H 22cabdff1aSopenharmony_ci#define AVCODEC_MIPS_HEVCDSP_MIPS_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#include "libavcodec/hevcdsp.h" 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#define MC(PEL, DIR, WIDTH) \ 27cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_msa(int16_t *dst, \ 28cabdff1aSopenharmony_ci uint8_t *src, \ 29cabdff1aSopenharmony_ci ptrdiff_t src_stride, \ 30cabdff1aSopenharmony_ci int height, \ 31cabdff1aSopenharmony_ci intptr_t mx, \ 32cabdff1aSopenharmony_ci intptr_t my, \ 33cabdff1aSopenharmony_ci int width) 34cabdff1aSopenharmony_ci 35cabdff1aSopenharmony_ciMC(pel, pixels, 4); 36cabdff1aSopenharmony_ciMC(pel, pixels, 6); 37cabdff1aSopenharmony_ciMC(pel, pixels, 8); 38cabdff1aSopenharmony_ciMC(pel, pixels, 12); 39cabdff1aSopenharmony_ciMC(pel, pixels, 16); 40cabdff1aSopenharmony_ciMC(pel, pixels, 24); 41cabdff1aSopenharmony_ciMC(pel, pixels, 32); 42cabdff1aSopenharmony_ciMC(pel, pixels, 48); 43cabdff1aSopenharmony_ciMC(pel, pixels, 64); 44cabdff1aSopenharmony_ci 45cabdff1aSopenharmony_ciMC(qpel, h, 4); 46cabdff1aSopenharmony_ciMC(qpel, h, 8); 47cabdff1aSopenharmony_ciMC(qpel, h, 12); 48cabdff1aSopenharmony_ciMC(qpel, h, 16); 49cabdff1aSopenharmony_ciMC(qpel, h, 24); 50cabdff1aSopenharmony_ciMC(qpel, h, 32); 51cabdff1aSopenharmony_ciMC(qpel, h, 48); 52cabdff1aSopenharmony_ciMC(qpel, h, 64); 53cabdff1aSopenharmony_ci 54cabdff1aSopenharmony_ciMC(qpel, v, 4); 55cabdff1aSopenharmony_ciMC(qpel, v, 8); 56cabdff1aSopenharmony_ciMC(qpel, v, 12); 57cabdff1aSopenharmony_ciMC(qpel, v, 16); 58cabdff1aSopenharmony_ciMC(qpel, v, 24); 59cabdff1aSopenharmony_ciMC(qpel, v, 32); 60cabdff1aSopenharmony_ciMC(qpel, v, 48); 61cabdff1aSopenharmony_ciMC(qpel, v, 64); 62cabdff1aSopenharmony_ci 63cabdff1aSopenharmony_ciMC(qpel, hv, 4); 64cabdff1aSopenharmony_ciMC(qpel, hv, 8); 65cabdff1aSopenharmony_ciMC(qpel, hv, 12); 66cabdff1aSopenharmony_ciMC(qpel, hv, 16); 67cabdff1aSopenharmony_ciMC(qpel, hv, 24); 68cabdff1aSopenharmony_ciMC(qpel, hv, 32); 69cabdff1aSopenharmony_ciMC(qpel, hv, 48); 70cabdff1aSopenharmony_ciMC(qpel, hv, 64); 71cabdff1aSopenharmony_ci 72cabdff1aSopenharmony_ciMC(epel, h, 4); 73cabdff1aSopenharmony_ciMC(epel, h, 6); 74cabdff1aSopenharmony_ciMC(epel, h, 8); 75cabdff1aSopenharmony_ciMC(epel, h, 12); 76cabdff1aSopenharmony_ciMC(epel, h, 16); 77cabdff1aSopenharmony_ciMC(epel, h, 24); 78cabdff1aSopenharmony_ciMC(epel, h, 32); 79cabdff1aSopenharmony_ciMC(epel, h, 48); 80cabdff1aSopenharmony_ciMC(epel, h, 64); 81cabdff1aSopenharmony_ci 82cabdff1aSopenharmony_ciMC(epel, v, 4); 83cabdff1aSopenharmony_ciMC(epel, v, 6); 84cabdff1aSopenharmony_ciMC(epel, v, 8); 85cabdff1aSopenharmony_ciMC(epel, v, 12); 86cabdff1aSopenharmony_ciMC(epel, v, 16); 87cabdff1aSopenharmony_ciMC(epel, v, 24); 88cabdff1aSopenharmony_ciMC(epel, v, 32); 89cabdff1aSopenharmony_ciMC(epel, v, 48); 90cabdff1aSopenharmony_ciMC(epel, v, 64); 91cabdff1aSopenharmony_ci 92cabdff1aSopenharmony_ciMC(epel, hv, 4); 93cabdff1aSopenharmony_ciMC(epel, hv, 6); 94cabdff1aSopenharmony_ciMC(epel, hv, 8); 95cabdff1aSopenharmony_ciMC(epel, hv, 12); 96cabdff1aSopenharmony_ciMC(epel, hv, 16); 97cabdff1aSopenharmony_ciMC(epel, hv, 24); 98cabdff1aSopenharmony_ciMC(epel, hv, 32); 99cabdff1aSopenharmony_ciMC(epel, hv, 48); 100cabdff1aSopenharmony_ciMC(epel, hv, 64); 101cabdff1aSopenharmony_ci 102cabdff1aSopenharmony_ci#undef MC 103cabdff1aSopenharmony_ci 104cabdff1aSopenharmony_ci#define UNI_MC(PEL, DIR, WIDTH) \ 105cabdff1aSopenharmony_civoid ff_hevc_put_hevc_uni_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \ 106cabdff1aSopenharmony_ci ptrdiff_t dst_stride, \ 107cabdff1aSopenharmony_ci uint8_t *src, \ 108cabdff1aSopenharmony_ci ptrdiff_t src_stride, \ 109cabdff1aSopenharmony_ci int height, \ 110cabdff1aSopenharmony_ci intptr_t mx, \ 111cabdff1aSopenharmony_ci intptr_t my, \ 112cabdff1aSopenharmony_ci int width) 113cabdff1aSopenharmony_ci 114cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 4); 115cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 6); 116cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 8); 117cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 12); 118cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 16); 119cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 24); 120cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 32); 121cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 48); 122cabdff1aSopenharmony_ciUNI_MC(pel, pixels, 64); 123cabdff1aSopenharmony_ci 124cabdff1aSopenharmony_ciUNI_MC(qpel, h, 4); 125cabdff1aSopenharmony_ciUNI_MC(qpel, h, 8); 126cabdff1aSopenharmony_ciUNI_MC(qpel, h, 12); 127cabdff1aSopenharmony_ciUNI_MC(qpel, h, 16); 128cabdff1aSopenharmony_ciUNI_MC(qpel, h, 24); 129cabdff1aSopenharmony_ciUNI_MC(qpel, h, 32); 130cabdff1aSopenharmony_ciUNI_MC(qpel, h, 48); 131cabdff1aSopenharmony_ciUNI_MC(qpel, h, 64); 132cabdff1aSopenharmony_ci 133cabdff1aSopenharmony_ciUNI_MC(qpel, v, 4); 134cabdff1aSopenharmony_ciUNI_MC(qpel, v, 8); 135cabdff1aSopenharmony_ciUNI_MC(qpel, v, 12); 136cabdff1aSopenharmony_ciUNI_MC(qpel, v, 16); 137cabdff1aSopenharmony_ciUNI_MC(qpel, v, 24); 138cabdff1aSopenharmony_ciUNI_MC(qpel, v, 32); 139cabdff1aSopenharmony_ciUNI_MC(qpel, v, 48); 140cabdff1aSopenharmony_ciUNI_MC(qpel, v, 64); 141cabdff1aSopenharmony_ci 142cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 4); 143cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 8); 144cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 12); 145cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 16); 146cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 24); 147cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 32); 148cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 48); 149cabdff1aSopenharmony_ciUNI_MC(qpel, hv, 64); 150cabdff1aSopenharmony_ci 151cabdff1aSopenharmony_ciUNI_MC(epel, h, 4); 152cabdff1aSopenharmony_ciUNI_MC(epel, h, 6); 153cabdff1aSopenharmony_ciUNI_MC(epel, h, 8); 154cabdff1aSopenharmony_ciUNI_MC(epel, h, 12); 155cabdff1aSopenharmony_ciUNI_MC(epel, h, 16); 156cabdff1aSopenharmony_ciUNI_MC(epel, h, 24); 157cabdff1aSopenharmony_ciUNI_MC(epel, h, 32); 158cabdff1aSopenharmony_ciUNI_MC(epel, h, 48); 159cabdff1aSopenharmony_ciUNI_MC(epel, h, 64); 160cabdff1aSopenharmony_ci 161cabdff1aSopenharmony_ciUNI_MC(epel, v, 4); 162cabdff1aSopenharmony_ciUNI_MC(epel, v, 6); 163cabdff1aSopenharmony_ciUNI_MC(epel, v, 8); 164cabdff1aSopenharmony_ciUNI_MC(epel, v, 12); 165cabdff1aSopenharmony_ciUNI_MC(epel, v, 16); 166cabdff1aSopenharmony_ciUNI_MC(epel, v, 24); 167cabdff1aSopenharmony_ciUNI_MC(epel, v, 32); 168cabdff1aSopenharmony_ciUNI_MC(epel, v, 48); 169cabdff1aSopenharmony_ciUNI_MC(epel, v, 64); 170cabdff1aSopenharmony_ci 171cabdff1aSopenharmony_ciUNI_MC(epel, hv, 4); 172cabdff1aSopenharmony_ciUNI_MC(epel, hv, 6); 173cabdff1aSopenharmony_ciUNI_MC(epel, hv, 8); 174cabdff1aSopenharmony_ciUNI_MC(epel, hv, 12); 175cabdff1aSopenharmony_ciUNI_MC(epel, hv, 16); 176cabdff1aSopenharmony_ciUNI_MC(epel, hv, 24); 177cabdff1aSopenharmony_ciUNI_MC(epel, hv, 32); 178cabdff1aSopenharmony_ciUNI_MC(epel, hv, 48); 179cabdff1aSopenharmony_ciUNI_MC(epel, hv, 64); 180cabdff1aSopenharmony_ci 181cabdff1aSopenharmony_ci#undef UNI_MC 182cabdff1aSopenharmony_ci 183cabdff1aSopenharmony_ci#define UNI_W_MC(PEL, DIR, WIDTH) \ 184cabdff1aSopenharmony_civoid ff_hevc_put_hevc_uni_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \ 185cabdff1aSopenharmony_ci ptrdiff_t \ 186cabdff1aSopenharmony_ci dst_stride, \ 187cabdff1aSopenharmony_ci uint8_t *src, \ 188cabdff1aSopenharmony_ci ptrdiff_t \ 189cabdff1aSopenharmony_ci src_stride, \ 190cabdff1aSopenharmony_ci int height, \ 191cabdff1aSopenharmony_ci int denom, \ 192cabdff1aSopenharmony_ci int weight, \ 193cabdff1aSopenharmony_ci int offset, \ 194cabdff1aSopenharmony_ci intptr_t mx, \ 195cabdff1aSopenharmony_ci intptr_t my, \ 196cabdff1aSopenharmony_ci int width) 197cabdff1aSopenharmony_ci 198cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 4); 199cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 6); 200cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 8); 201cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 12); 202cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 16); 203cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 24); 204cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 32); 205cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 48); 206cabdff1aSopenharmony_ciUNI_W_MC(pel, pixels, 64); 207cabdff1aSopenharmony_ci 208cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 4); 209cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 8); 210cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 12); 211cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 16); 212cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 24); 213cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 32); 214cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 48); 215cabdff1aSopenharmony_ciUNI_W_MC(qpel, h, 64); 216cabdff1aSopenharmony_ci 217cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 4); 218cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 8); 219cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 12); 220cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 16); 221cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 24); 222cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 32); 223cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 48); 224cabdff1aSopenharmony_ciUNI_W_MC(qpel, v, 64); 225cabdff1aSopenharmony_ci 226cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 4); 227cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 8); 228cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 12); 229cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 16); 230cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 24); 231cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 32); 232cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 48); 233cabdff1aSopenharmony_ciUNI_W_MC(qpel, hv, 64); 234cabdff1aSopenharmony_ci 235cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 4); 236cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 6); 237cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 8); 238cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 12); 239cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 16); 240cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 24); 241cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 32); 242cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 48); 243cabdff1aSopenharmony_ciUNI_W_MC(epel, h, 64); 244cabdff1aSopenharmony_ci 245cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 4); 246cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 6); 247cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 8); 248cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 12); 249cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 16); 250cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 24); 251cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 32); 252cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 48); 253cabdff1aSopenharmony_ciUNI_W_MC(epel, v, 64); 254cabdff1aSopenharmony_ci 255cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 4); 256cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 6); 257cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 8); 258cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 12); 259cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 16); 260cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 24); 261cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 32); 262cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 48); 263cabdff1aSopenharmony_ciUNI_W_MC(epel, hv, 64); 264cabdff1aSopenharmony_ci 265cabdff1aSopenharmony_ci#undef UNI_W_MC 266cabdff1aSopenharmony_ci 267cabdff1aSopenharmony_ci#define BI_MC(PEL, DIR, WIDTH) \ 268cabdff1aSopenharmony_civoid ff_hevc_put_hevc_bi_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \ 269cabdff1aSopenharmony_ci ptrdiff_t dst_stride, \ 270cabdff1aSopenharmony_ci uint8_t *src, \ 271cabdff1aSopenharmony_ci ptrdiff_t src_stride, \ 272cabdff1aSopenharmony_ci int16_t *src_16bit, \ 273cabdff1aSopenharmony_ci int height, \ 274cabdff1aSopenharmony_ci intptr_t mx, \ 275cabdff1aSopenharmony_ci intptr_t my, \ 276cabdff1aSopenharmony_ci int width) 277cabdff1aSopenharmony_ci 278cabdff1aSopenharmony_ciBI_MC(pel, pixels, 4); 279cabdff1aSopenharmony_ciBI_MC(pel, pixels, 6); 280cabdff1aSopenharmony_ciBI_MC(pel, pixels, 8); 281cabdff1aSopenharmony_ciBI_MC(pel, pixels, 12); 282cabdff1aSopenharmony_ciBI_MC(pel, pixels, 16); 283cabdff1aSopenharmony_ciBI_MC(pel, pixels, 24); 284cabdff1aSopenharmony_ciBI_MC(pel, pixels, 32); 285cabdff1aSopenharmony_ciBI_MC(pel, pixels, 48); 286cabdff1aSopenharmony_ciBI_MC(pel, pixels, 64); 287cabdff1aSopenharmony_ci 288cabdff1aSopenharmony_ciBI_MC(qpel, h, 4); 289cabdff1aSopenharmony_ciBI_MC(qpel, h, 8); 290cabdff1aSopenharmony_ciBI_MC(qpel, h, 12); 291cabdff1aSopenharmony_ciBI_MC(qpel, h, 16); 292cabdff1aSopenharmony_ciBI_MC(qpel, h, 24); 293cabdff1aSopenharmony_ciBI_MC(qpel, h, 32); 294cabdff1aSopenharmony_ciBI_MC(qpel, h, 48); 295cabdff1aSopenharmony_ciBI_MC(qpel, h, 64); 296cabdff1aSopenharmony_ci 297cabdff1aSopenharmony_ciBI_MC(qpel, v, 4); 298cabdff1aSopenharmony_ciBI_MC(qpel, v, 8); 299cabdff1aSopenharmony_ciBI_MC(qpel, v, 12); 300cabdff1aSopenharmony_ciBI_MC(qpel, v, 16); 301cabdff1aSopenharmony_ciBI_MC(qpel, v, 24); 302cabdff1aSopenharmony_ciBI_MC(qpel, v, 32); 303cabdff1aSopenharmony_ciBI_MC(qpel, v, 48); 304cabdff1aSopenharmony_ciBI_MC(qpel, v, 64); 305cabdff1aSopenharmony_ci 306cabdff1aSopenharmony_ciBI_MC(qpel, hv, 4); 307cabdff1aSopenharmony_ciBI_MC(qpel, hv, 8); 308cabdff1aSopenharmony_ciBI_MC(qpel, hv, 12); 309cabdff1aSopenharmony_ciBI_MC(qpel, hv, 16); 310cabdff1aSopenharmony_ciBI_MC(qpel, hv, 24); 311cabdff1aSopenharmony_ciBI_MC(qpel, hv, 32); 312cabdff1aSopenharmony_ciBI_MC(qpel, hv, 48); 313cabdff1aSopenharmony_ciBI_MC(qpel, hv, 64); 314cabdff1aSopenharmony_ci 315cabdff1aSopenharmony_ciBI_MC(epel, h, 4); 316cabdff1aSopenharmony_ciBI_MC(epel, h, 6); 317cabdff1aSopenharmony_ciBI_MC(epel, h, 8); 318cabdff1aSopenharmony_ciBI_MC(epel, h, 12); 319cabdff1aSopenharmony_ciBI_MC(epel, h, 16); 320cabdff1aSopenharmony_ciBI_MC(epel, h, 24); 321cabdff1aSopenharmony_ciBI_MC(epel, h, 32); 322cabdff1aSopenharmony_ciBI_MC(epel, h, 48); 323cabdff1aSopenharmony_ciBI_MC(epel, h, 64); 324cabdff1aSopenharmony_ci 325cabdff1aSopenharmony_ciBI_MC(epel, v, 4); 326cabdff1aSopenharmony_ciBI_MC(epel, v, 6); 327cabdff1aSopenharmony_ciBI_MC(epel, v, 8); 328cabdff1aSopenharmony_ciBI_MC(epel, v, 12); 329cabdff1aSopenharmony_ciBI_MC(epel, v, 16); 330cabdff1aSopenharmony_ciBI_MC(epel, v, 24); 331cabdff1aSopenharmony_ciBI_MC(epel, v, 32); 332cabdff1aSopenharmony_ciBI_MC(epel, v, 48); 333cabdff1aSopenharmony_ciBI_MC(epel, v, 64); 334cabdff1aSopenharmony_ci 335cabdff1aSopenharmony_ciBI_MC(epel, hv, 4); 336cabdff1aSopenharmony_ciBI_MC(epel, hv, 6); 337cabdff1aSopenharmony_ciBI_MC(epel, hv, 8); 338cabdff1aSopenharmony_ciBI_MC(epel, hv, 12); 339cabdff1aSopenharmony_ciBI_MC(epel, hv, 16); 340cabdff1aSopenharmony_ciBI_MC(epel, hv, 24); 341cabdff1aSopenharmony_ciBI_MC(epel, hv, 32); 342cabdff1aSopenharmony_ciBI_MC(epel, hv, 48); 343cabdff1aSopenharmony_ciBI_MC(epel, hv, 64); 344cabdff1aSopenharmony_ci 345cabdff1aSopenharmony_ci#undef BI_MC 346cabdff1aSopenharmony_ci 347cabdff1aSopenharmony_ci#define BI_W_MC(PEL, DIR, WIDTH) \ 348cabdff1aSopenharmony_civoid ff_hevc_put_hevc_bi_w_##PEL##_##DIR##WIDTH##_8_msa(uint8_t *dst, \ 349cabdff1aSopenharmony_ci ptrdiff_t \ 350cabdff1aSopenharmony_ci dst_stride, \ 351cabdff1aSopenharmony_ci uint8_t *src, \ 352cabdff1aSopenharmony_ci ptrdiff_t \ 353cabdff1aSopenharmony_ci src_stride, \ 354cabdff1aSopenharmony_ci int16_t *src_16bit, \ 355cabdff1aSopenharmony_ci int height, \ 356cabdff1aSopenharmony_ci int denom, \ 357cabdff1aSopenharmony_ci int weight0, \ 358cabdff1aSopenharmony_ci int weight1, \ 359cabdff1aSopenharmony_ci int offset0, \ 360cabdff1aSopenharmony_ci int offset1, \ 361cabdff1aSopenharmony_ci intptr_t mx, \ 362cabdff1aSopenharmony_ci intptr_t my, \ 363cabdff1aSopenharmony_ci int width) 364cabdff1aSopenharmony_ci 365cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 4); 366cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 6); 367cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 8); 368cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 12); 369cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 16); 370cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 24); 371cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 32); 372cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 48); 373cabdff1aSopenharmony_ciBI_W_MC(pel, pixels, 64); 374cabdff1aSopenharmony_ci 375cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 4); 376cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 8); 377cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 12); 378cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 16); 379cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 24); 380cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 32); 381cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 48); 382cabdff1aSopenharmony_ciBI_W_MC(qpel, h, 64); 383cabdff1aSopenharmony_ci 384cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 4); 385cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 8); 386cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 12); 387cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 16); 388cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 24); 389cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 32); 390cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 48); 391cabdff1aSopenharmony_ciBI_W_MC(qpel, v, 64); 392cabdff1aSopenharmony_ci 393cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 4); 394cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 8); 395cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 12); 396cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 16); 397cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 24); 398cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 32); 399cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 48); 400cabdff1aSopenharmony_ciBI_W_MC(qpel, hv, 64); 401cabdff1aSopenharmony_ci 402cabdff1aSopenharmony_ciBI_W_MC(epel, h, 4); 403cabdff1aSopenharmony_ciBI_W_MC(epel, h, 6); 404cabdff1aSopenharmony_ciBI_W_MC(epel, h, 8); 405cabdff1aSopenharmony_ciBI_W_MC(epel, h, 12); 406cabdff1aSopenharmony_ciBI_W_MC(epel, h, 16); 407cabdff1aSopenharmony_ciBI_W_MC(epel, h, 24); 408cabdff1aSopenharmony_ciBI_W_MC(epel, h, 32); 409cabdff1aSopenharmony_ciBI_W_MC(epel, h, 48); 410cabdff1aSopenharmony_ciBI_W_MC(epel, h, 64); 411cabdff1aSopenharmony_ci 412cabdff1aSopenharmony_ciBI_W_MC(epel, v, 4); 413cabdff1aSopenharmony_ciBI_W_MC(epel, v, 6); 414cabdff1aSopenharmony_ciBI_W_MC(epel, v, 8); 415cabdff1aSopenharmony_ciBI_W_MC(epel, v, 12); 416cabdff1aSopenharmony_ciBI_W_MC(epel, v, 16); 417cabdff1aSopenharmony_ciBI_W_MC(epel, v, 24); 418cabdff1aSopenharmony_ciBI_W_MC(epel, v, 32); 419cabdff1aSopenharmony_ciBI_W_MC(epel, v, 48); 420cabdff1aSopenharmony_ciBI_W_MC(epel, v, 64); 421cabdff1aSopenharmony_ci 422cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 4); 423cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 6); 424cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 8); 425cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 12); 426cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 16); 427cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 24); 428cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 32); 429cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 48); 430cabdff1aSopenharmony_ciBI_W_MC(epel, hv, 64); 431cabdff1aSopenharmony_ci 432cabdff1aSopenharmony_ci#undef BI_W_MC 433cabdff1aSopenharmony_ci 434cabdff1aSopenharmony_civoid ff_hevc_loop_filter_luma_h_8_msa(uint8_t *src, 435cabdff1aSopenharmony_ci ptrdiff_t src_stride, 436cabdff1aSopenharmony_ci int32_t beta, int32_t *tc, 437cabdff1aSopenharmony_ci uint8_t *no_p, uint8_t *no_q); 438cabdff1aSopenharmony_ci 439cabdff1aSopenharmony_civoid ff_hevc_loop_filter_luma_v_8_msa(uint8_t *src, 440cabdff1aSopenharmony_ci ptrdiff_t src_stride, 441cabdff1aSopenharmony_ci int32_t beta, int32_t *tc, 442cabdff1aSopenharmony_ci uint8_t *no_p, uint8_t *no_q); 443cabdff1aSopenharmony_ci 444cabdff1aSopenharmony_civoid ff_hevc_loop_filter_chroma_h_8_msa(uint8_t *src, 445cabdff1aSopenharmony_ci ptrdiff_t src_stride, 446cabdff1aSopenharmony_ci int32_t *tc, uint8_t *no_p, 447cabdff1aSopenharmony_ci uint8_t *no_q); 448cabdff1aSopenharmony_ci 449cabdff1aSopenharmony_civoid ff_hevc_loop_filter_chroma_v_8_msa(uint8_t *src, 450cabdff1aSopenharmony_ci ptrdiff_t src_stride, 451cabdff1aSopenharmony_ci int32_t *tc, uint8_t *no_p, 452cabdff1aSopenharmony_ci uint8_t *no_q); 453cabdff1aSopenharmony_ci 454cabdff1aSopenharmony_civoid ff_hevc_sao_band_filter_0_8_msa(uint8_t *dst, uint8_t *src, 455cabdff1aSopenharmony_ci ptrdiff_t stride_dst, ptrdiff_t stride_src, 456cabdff1aSopenharmony_ci int16_t *sao_offset_val, int sao_left_class, 457cabdff1aSopenharmony_ci int width, int height); 458cabdff1aSopenharmony_ci 459cabdff1aSopenharmony_civoid ff_hevc_sao_edge_filter_8_msa(uint8_t *dst, uint8_t *src, 460cabdff1aSopenharmony_ci ptrdiff_t stride_dst, 461cabdff1aSopenharmony_ci int16_t *sao_offset_val, 462cabdff1aSopenharmony_ci int eo, int width, int height); 463cabdff1aSopenharmony_ci 464cabdff1aSopenharmony_civoid ff_hevc_idct_4x4_msa(int16_t *coeffs, int col_limit); 465cabdff1aSopenharmony_civoid ff_hevc_idct_8x8_msa(int16_t *coeffs, int col_limit); 466cabdff1aSopenharmony_civoid ff_hevc_idct_16x16_msa(int16_t *coeffs, int col_limit); 467cabdff1aSopenharmony_civoid ff_hevc_idct_32x32_msa(int16_t *coeffs, int col_limit); 468cabdff1aSopenharmony_civoid ff_hevc_idct_dc_4x4_msa(int16_t *coeffs); 469cabdff1aSopenharmony_civoid ff_hevc_idct_dc_8x8_msa(int16_t *coeffs); 470cabdff1aSopenharmony_civoid ff_hevc_idct_dc_16x16_msa(int16_t *coeffs); 471cabdff1aSopenharmony_civoid ff_hevc_idct_dc_32x32_msa(int16_t *coeffs); 472cabdff1aSopenharmony_civoid ff_hevc_addblk_4x4_msa(uint8_t *dst, int16_t *pi16Coeffs, 473cabdff1aSopenharmony_ci ptrdiff_t stride); 474cabdff1aSopenharmony_civoid ff_hevc_addblk_8x8_msa(uint8_t *dst, int16_t *pi16Coeffs, 475cabdff1aSopenharmony_ci ptrdiff_t stride); 476cabdff1aSopenharmony_civoid ff_hevc_addblk_16x16_msa(uint8_t *dst, int16_t *pi16Coeffs, 477cabdff1aSopenharmony_ci ptrdiff_t stride); 478cabdff1aSopenharmony_civoid ff_hevc_addblk_32x32_msa(uint8_t *dst, int16_t *pi16Coeffs, 479cabdff1aSopenharmony_ci ptrdiff_t stride); 480cabdff1aSopenharmony_civoid ff_hevc_idct_luma_4x4_msa(int16_t *pi16Coeffs); 481cabdff1aSopenharmony_ci 482cabdff1aSopenharmony_ci/* Loongson optimization */ 483cabdff1aSopenharmony_ci#define L_MC(PEL, DIR, WIDTH, TYPE) \ 484cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_##DIR##WIDTH##_8_##TYPE(int16_t *dst, \ 485cabdff1aSopenharmony_ci uint8_t *src, \ 486cabdff1aSopenharmony_ci ptrdiff_t src_stride, \ 487cabdff1aSopenharmony_ci int height, \ 488cabdff1aSopenharmony_ci intptr_t mx, \ 489cabdff1aSopenharmony_ci intptr_t my, \ 490cabdff1aSopenharmony_ci int width) 491cabdff1aSopenharmony_ciL_MC(qpel, h, 4, mmi); 492cabdff1aSopenharmony_ciL_MC(qpel, h, 8, mmi); 493cabdff1aSopenharmony_ciL_MC(qpel, h, 12, mmi); 494cabdff1aSopenharmony_ciL_MC(qpel, h, 16, mmi); 495cabdff1aSopenharmony_ciL_MC(qpel, h, 24, mmi); 496cabdff1aSopenharmony_ciL_MC(qpel, h, 32, mmi); 497cabdff1aSopenharmony_ciL_MC(qpel, h, 48, mmi); 498cabdff1aSopenharmony_ciL_MC(qpel, h, 64, mmi); 499cabdff1aSopenharmony_ci 500cabdff1aSopenharmony_ciL_MC(qpel, hv, 4, mmi); 501cabdff1aSopenharmony_ciL_MC(qpel, hv, 8, mmi); 502cabdff1aSopenharmony_ciL_MC(qpel, hv, 12, mmi); 503cabdff1aSopenharmony_ciL_MC(qpel, hv, 16, mmi); 504cabdff1aSopenharmony_ciL_MC(qpel, hv, 24, mmi); 505cabdff1aSopenharmony_ciL_MC(qpel, hv, 32, mmi); 506cabdff1aSopenharmony_ciL_MC(qpel, hv, 48, mmi); 507cabdff1aSopenharmony_ciL_MC(qpel, hv, 64, mmi); 508cabdff1aSopenharmony_ci 509cabdff1aSopenharmony_ci#define L_BI_MC(PEL, DIR, WIDTH, TYPE) \ 510cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_bi_##DIR##WIDTH##_8_##TYPE(uint8_t *dst, \ 511cabdff1aSopenharmony_ci ptrdiff_t dst_stride, \ 512cabdff1aSopenharmony_ci uint8_t *src, \ 513cabdff1aSopenharmony_ci ptrdiff_t src_stride, \ 514cabdff1aSopenharmony_ci int16_t *src2, \ 515cabdff1aSopenharmony_ci int height, \ 516cabdff1aSopenharmony_ci intptr_t mx, \ 517cabdff1aSopenharmony_ci intptr_t my, \ 518cabdff1aSopenharmony_ci int width) 519cabdff1aSopenharmony_ci 520cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 8, mmi); 521cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 16, mmi); 522cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 24, mmi); 523cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 32, mmi); 524cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 48, mmi); 525cabdff1aSopenharmony_ciL_BI_MC(pel, pixels, 64, mmi); 526cabdff1aSopenharmony_ci 527cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 4, mmi); 528cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 8, mmi); 529cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 12, mmi); 530cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 16, mmi); 531cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 24, mmi); 532cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 32, mmi); 533cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 48, mmi); 534cabdff1aSopenharmony_ciL_BI_MC(qpel, hv, 64, mmi); 535cabdff1aSopenharmony_ci 536cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 4, mmi); 537cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 8, mmi); 538cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 12, mmi); 539cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 16, mmi); 540cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 24, mmi); 541cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 32, mmi); 542cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 48, mmi); 543cabdff1aSopenharmony_ciL_BI_MC(qpel, h, 64, mmi); 544cabdff1aSopenharmony_ci 545cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 4, mmi); 546cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 8, mmi); 547cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 12, mmi); 548cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 16, mmi); 549cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 24, mmi); 550cabdff1aSopenharmony_ciL_BI_MC(epel, hv, 32, mmi); 551cabdff1aSopenharmony_ci#undef L_BI_MC 552cabdff1aSopenharmony_ci 553cabdff1aSopenharmony_ci#define L_UNI_MC(PEL, DIR, WIDTH, TYPE) \ 554cabdff1aSopenharmony_civoid ff_hevc_put_hevc_##PEL##_uni_##DIR##WIDTH##_8_##TYPE(uint8_t *dst, \ 555cabdff1aSopenharmony_ci ptrdiff_t dst_stride, \ 556cabdff1aSopenharmony_ci uint8_t *src, \ 557cabdff1aSopenharmony_ci ptrdiff_t src_stride, \ 558cabdff1aSopenharmony_ci int height, \ 559cabdff1aSopenharmony_ci intptr_t mx, \ 560cabdff1aSopenharmony_ci intptr_t my, \ 561cabdff1aSopenharmony_ci int width) 562cabdff1aSopenharmony_ci 563cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 4, mmi); 564cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 8, mmi); 565cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 12, mmi); 566cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 16, mmi); 567cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 24, mmi); 568cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 32, mmi); 569cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 48, mmi); 570cabdff1aSopenharmony_ciL_UNI_MC(qpel, hv, 64, mmi); 571cabdff1aSopenharmony_ci#undef L_UNI_MC 572cabdff1aSopenharmony_ci 573cabdff1aSopenharmony_ci#endif // #ifndef AVCODEC_MIPS_HEVCDSP_MIPS_H 574