FFmpeg
Loading...
Searching...
No Matches
hevcdsp_init.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Institute of Software Chinese Academy of Sciences (ISCAS).
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#include "config.h"
22
24#include "libavutil/cpu.h"
25#include "libavutil/riscv/cpu.h"
26
27#include "libavcodec/hevc/dsp.h"
29
30void ff_hevc_add_residual_4x4_8_rvv(uint8_t *_dst, const int16_t *coeffs,
31 ptrdiff_t stride);
32void ff_hevc_add_residual_8x8_8_rvv(uint8_t *_dst, const int16_t *coeffs,
33 ptrdiff_t stride);
34void ff_hevc_add_residual_16x16_8_rvv(uint8_t *_dst, const int16_t *coeffs,
35 ptrdiff_t stride);
36void ff_hevc_add_residual_32x32_8_rvv(uint8_t *_dst, const int16_t *coeffs,
37 ptrdiff_t stride);
38
39#define RVV_FNASSIGN(member, v, h, fn, ext) \
40 member[1][v][h] = ff_h2656_put_pixels_##8_##ext; \
41 member[3][v][h] = ff_h2656_put_pixels_##8_##ext; \
42 member[5][v][h] = ff_h2656_put_pixels_##8_##ext; \
43 member[7][v][h] = ff_h2656_put_pixels_##8_##ext; \
44 member[9][v][h] = ff_h2656_put_pixels_##8_##ext;
45
47{
48#if HAVE_RVV
49 const int flags = av_get_cpu_flags();
50 int vlenb;
51
53 return;
54
55 vlenb = ff_get_rv_vlenb();
56
57 if (flags & AV_CPU_FLAG_RVB) {
58 if (vlenb >= 32) {
59 switch (bit_depth) {
60 case 8:
61 RVV_FNASSIGN(c->put_hevc_qpel, 0, 0, pel_pixels, rvv_256);
62 RVV_FNASSIGN(c->put_hevc_epel, 0, 0, pel_pixels, rvv_256);
63 break;
64 default:
65 break;
66 }
67 } else if (vlenb >= 16) {
68 switch (bit_depth) {
69 case 8:
70 RVV_FNASSIGN(c->put_hevc_qpel, 0, 0, pel_pixels, rvv_128);
71 RVV_FNASSIGN(c->put_hevc_epel, 0, 0, pel_pixels, rvv_128);
72 break;
73 default:
74 break;
75 }
76 }
77 }
78
79 if (vlenb >= 16) {
80 switch (bit_depth){
81 case 8:
82 c->add_residual[0] = ff_hevc_add_residual_4x4_8_rvv;
83 c->add_residual[1] = ff_hevc_add_residual_8x8_8_rvv;
84 c->add_residual[2] = ff_hevc_add_residual_16x16_8_rvv;
85 c->add_residual[3] = ff_hevc_add_residual_32x32_8_rvv;
86 break;
87 default:
88 break;
89 }
90 }
91#endif
92}
uint8_t * _dst
Definition dsp.h:56
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition af_astats.c:246
#define flags(name, subs,...)
Definition cbs_h264.c:74
void ff_hevc_dsp_init_riscv(HEVCDSPContext *c, const int bit_depth)
void ff_hevc_add_residual_8x8_8_rvv(uint8_t *_dst, const int16_t *coeffs, ptrdiff_t stride)
void ff_hevc_add_residual_16x16_8_rvv(uint8_t *_dst, const int16_t *coeffs, ptrdiff_t stride)
#define RVV_FNASSIGN(member, v, h, fn, ext)
void ff_hevc_add_residual_32x32_8_rvv(uint8_t *_dst, const int16_t *coeffs, ptrdiff_t stride)
void ff_hevc_add_residual_4x4_8_rvv(uint8_t *_dst, const int16_t *coeffs, ptrdiff_t stride)
Macro definitions for various function/variable attributes.
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition cpu.c:109
#define AV_CPU_FLAG_RVB
B (bit manipulations)
Definition cpu.h:104
#define AV_CPU_FLAG_RVV_I32
Vectors of 8/16/32-bit int's *‍/.
Definition cpu.h:97
#define stride
static double c[64]