1/* 2 * Copyright (c) 2021 Loongson Technology Corporation Limited 3 * Contributed by Hecai Yuan <yuanhecai@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/** 23 * @file 24 * VP8 compatible video decoder 25 */ 26 27#include "libavutil/loongarch/cpu.h" 28#include "libavcodec/vp8dsp.h" 29#include "libavutil/attributes.h" 30#include "vp8dsp_loongarch.h" 31 32#define VP8_MC_LOONGARCH_FUNC(IDX, SIZE) \ 33 dsp->put_vp8_epel_pixels_tab[IDX][0][2] = ff_put_vp8_epel##SIZE##_h6_lsx; \ 34 dsp->put_vp8_epel_pixels_tab[IDX][1][0] = ff_put_vp8_epel##SIZE##_v4_lsx; \ 35 dsp->put_vp8_epel_pixels_tab[IDX][1][2] = ff_put_vp8_epel##SIZE##_h6v4_lsx; \ 36 dsp->put_vp8_epel_pixels_tab[IDX][2][0] = ff_put_vp8_epel##SIZE##_v6_lsx; \ 37 dsp->put_vp8_epel_pixels_tab[IDX][2][1] = ff_put_vp8_epel##SIZE##_h4v6_lsx; \ 38 dsp->put_vp8_epel_pixels_tab[IDX][2][2] = ff_put_vp8_epel##SIZE##_h6v6_lsx; 39 40#define VP8_MC_LOONGARCH_COPY(IDX, SIZE) \ 41 dsp->put_vp8_epel_pixels_tab[IDX][0][0] = ff_put_vp8_pixels##SIZE##_lsx; \ 42 dsp->put_vp8_bilinear_pixels_tab[IDX][0][0] = ff_put_vp8_pixels##SIZE##_lsx; 43 44av_cold void ff_vp8dsp_init_loongarch(VP8DSPContext *dsp) 45{ 46 int cpu_flags = av_get_cpu_flags(); 47 48 if (have_lsx(cpu_flags)) { 49 VP8_MC_LOONGARCH_FUNC(0, 16); 50 VP8_MC_LOONGARCH_FUNC(1, 8); 51 52 VP8_MC_LOONGARCH_COPY(0, 16); 53 VP8_MC_LOONGARCH_COPY(1, 8); 54 55 dsp->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16_lsx; 56 dsp->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16_lsx; 57 dsp->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_lsx; 58 dsp->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_lsx; 59 60 dsp->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16_inner_lsx; 61 dsp->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16_inner_lsx; 62 } 63} 64