FFmpeg  4.4.5
hevcdsp.h
Go to the documentation of this file.
1 /*
2  * HEVC video decoder
3  *
4  * Copyright (C) 2012 - 2013 Guillaume Martres
5  * Copyright (C) 2013 - 2014 Pierre-Edouard Lepere
6  *
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with FFmpeg; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24 
25 #ifndef AVCODEC_HEVCDSP_H
26 #define AVCODEC_HEVCDSP_H
27 
28 #include "libavutil/mem_internal.h"
29 
30 #include "get_bits.h"
31 
32 #define MAX_PB_SIZE 64
33 
34 typedef struct SAOParams {
35  int offset_abs[3][4]; ///< sao_offset_abs
36  int offset_sign[3][4]; ///< sao_offset_sign
37 
38  uint8_t band_position[3]; ///< sao_band_position
39 
40  int eo_class[3]; ///< sao_eo_class
41 
42  int16_t offset_val[3][5]; ///<SaoOffsetVal
43 
44  uint8_t type_idx[3]; ///< sao_type_idx
45 } SAOParams;
46 
47 typedef struct HEVCDSPContext {
48  void (*put_pcm)(uint8_t *_dst, ptrdiff_t _stride, int width, int height,
49  struct GetBitContext *gb, int pcm_bit_depth);
50 
51  void (*add_residual[4])(uint8_t *dst, int16_t *res, ptrdiff_t stride);
52 
53  void (*dequant)(int16_t *coeffs, int16_t log2_size);
54 
55  void (*transform_rdpcm)(int16_t *coeffs, int16_t log2_size, int mode);
56 
57  void (*transform_4x4_luma)(int16_t *coeffs);
58 
59  void (*idct[4])(int16_t *coeffs, int col_limit);
60 
61  void (*idct_dc[4])(int16_t *coeffs);
62 
63  void (*sao_band_filter[5])(uint8_t *_dst, uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src,
64  int16_t *sao_offset_val, int sao_left_class, int width, int height);
65 
66  /* implicit stride_src parameter has value of 2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE */
67  void (*sao_edge_filter[5])(uint8_t *_dst /* align 16 */, uint8_t *_src /* align 32 */, ptrdiff_t stride_dst,
68  int16_t *sao_offset_val, int sao_eo_class, int width, int height);
69 
70  void (*sao_edge_restore[2])(uint8_t *_dst, uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src,
71  struct SAOParams *sao, int *borders, int _width, int _height, int c_idx,
72  uint8_t *vert_edge, uint8_t *horiz_edge, uint8_t *diag_edge);
73 
74  void (*put_hevc_qpel[10][2][2])(int16_t *dst, uint8_t *src, ptrdiff_t srcstride,
75  int height, intptr_t mx, intptr_t my, int width);
76  void (*put_hevc_qpel_uni[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride,
77  int height, intptr_t mx, intptr_t my, int width);
78  void (*put_hevc_qpel_uni_w[10][2][2])(uint8_t *_dst, ptrdiff_t _dststride, uint8_t *_src, ptrdiff_t _srcstride,
79  int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width);
80 
81  void (*put_hevc_qpel_bi[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride,
82  int16_t *src2,
83  int height, intptr_t mx, intptr_t my, int width);
84  void (*put_hevc_qpel_bi_w[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride,
85  int16_t *src2,
86  int height, int denom, int wx0, int wx1,
87  int ox0, int ox1, intptr_t mx, intptr_t my, int width);
88  void (*put_hevc_epel[10][2][2])(int16_t *dst, uint8_t *src, ptrdiff_t srcstride,
89  int height, intptr_t mx, intptr_t my, int width);
90 
91  void (*put_hevc_epel_uni[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride,
92  int height, intptr_t mx, intptr_t my, int width);
93  void (*put_hevc_epel_uni_w[10][2][2])(uint8_t *_dst, ptrdiff_t _dststride, uint8_t *_src, ptrdiff_t _srcstride,
94  int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width);
95  void (*put_hevc_epel_bi[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride,
96  int16_t *src2,
97  int height, intptr_t mx, intptr_t my, int width);
98  void (*put_hevc_epel_bi_w[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride,
99  int16_t *src2,
100  int height, int denom, int wx0, int ox0, int wx1,
101  int ox1, intptr_t mx, intptr_t my, int width);
102 
104  int beta, int32_t *tc,
105  uint8_t *no_p, uint8_t *no_q);
107  int beta, int32_t *tc,
108  uint8_t *no_p, uint8_t *no_q);
110  int32_t *tc, uint8_t *no_p, uint8_t *no_q);
112  int32_t *tc, uint8_t *no_p, uint8_t *no_q);
114  int beta, int32_t *tc,
115  uint8_t *no_p, uint8_t *no_q);
117  int beta, int32_t *tc,
118  uint8_t *no_p, uint8_t *no_q);
120  int32_t *tc, uint8_t *no_p,
121  uint8_t *no_q);
123  int32_t *tc, uint8_t *no_p,
124  uint8_t *no_q);
126 
128 
129 extern const int8_t ff_hevc_epel_filters[7][4];
130 extern const int8_t ff_hevc_qpel_filters[3][16];
131 
137 
138 #endif /* AVCODEC_HEVCDSP_H */
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
Definition: af_astats.c:254
uint8_t
int32_t
mode
Use these values in ebur128_init (or'ed).
Definition: ebur128.h:83
bitstream reader API header.
void ff_hevc_dsp_init_mips(HEVCDSPContext *c, const int bit_depth)
void ff_hevc_dsp_init_aarch64(HEVCDSPContext *c, const int bit_depth)
void ff_hevc_dsp_init_ppc(HEVCDSPContext *c, const int bit_depth)
Definition: hevcdsp.c:110
void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth)
Definition: hevcdsp_init.c:709
const int8_t ff_hevc_epel_filters[7][4]
Definition: hevcdsp.c:94
const int8_t ff_hevc_qpel_filters[3][16]
Definition: hevcdsp.c:104
void ff_hevc_dsp_init_arm(HEVCDSPContext *c, const int bit_depth)
void ff_hevc_dsp_init(HEVCDSPContext *hpc, int bit_depth)
Definition: hevcdsp.c:126
int stride
Definition: mace.c:144
#define tc
Definition: regdef.h:69
typedef void(RENAME(mix_any_func_type))
void(* sao_band_filter[5])(uint8_t *_dst, uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, int16_t *sao_offset_val, int sao_left_class, int width, int height)
Definition: hevcdsp.h:63
void(* put_hevc_epel_bi[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride, int16_t *src2, int height, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:95
void(* put_hevc_epel[10][2][2])(int16_t *dst, uint8_t *src, ptrdiff_t srcstride, int height, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:88
void(* hevc_v_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:111
void(* transform_rdpcm)(int16_t *coeffs, int16_t log2_size, int mode)
Definition: hevcdsp.h:55
void(* sao_edge_filter[5])(uint8_t *_dst, uint8_t *_src, ptrdiff_t stride_dst, int16_t *sao_offset_val, int sao_eo_class, int width, int height)
Definition: hevcdsp.h:67
void(* hevc_h_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:109
void(* transform_4x4_luma)(int16_t *coeffs)
Definition: hevcdsp.h:57
void(* put_hevc_qpel[10][2][2])(int16_t *dst, uint8_t *src, ptrdiff_t srcstride, int height, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:74
void(* put_hevc_qpel_uni[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *src, ptrdiff_t srcstride, int height, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:76
void(* idct[4])(int16_t *coeffs, int col_limit)
Definition: hevcdsp.h:59
void(* hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, int beta, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:106
void(* put_hevc_epel_uni_w[10][2][2])(uint8_t *_dst, ptrdiff_t _dststride, uint8_t *_src, ptrdiff_t _srcstride, int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:93
void(* put_pcm)(uint8_t *_dst, ptrdiff_t _stride, int width, int height, struct GetBitContext *gb, int pcm_bit_depth)
Definition: hevcdsp.h:48
void(* add_residual[4])(uint8_t *dst, int16_t *res, ptrdiff_t stride)
Definition: hevcdsp.h:51
void(* put_hevc_qpel_uni_w[10][2][2])(uint8_t *_dst, ptrdiff_t _dststride, uint8_t *_src, ptrdiff_t _srcstride, int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:78
void(* idct_dc[4])(int16_t *coeffs)
Definition: hevcdsp.h:61
void(* put_hevc_qpel_bi[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride, int16_t *src2, int height, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:81
void(* hevc_h_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:119
void(* put_hevc_qpel_bi_w[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride, int16_t *src2, int height, int denom, int wx0, int wx1, int ox0, int ox1, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:84
void(* hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, int beta, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:103
void(* put_hevc_epel_uni[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride, int height, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:91
void(* hevc_v_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, int beta, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:116
void(* hevc_h_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, int beta, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:113
void(* put_hevc_epel_bi_w[10][2][2])(uint8_t *dst, ptrdiff_t dststride, uint8_t *_src, ptrdiff_t _srcstride, int16_t *src2, int height, int denom, int wx0, int ox0, int wx1, int ox1, intptr_t mx, intptr_t my, int width)
Definition: hevcdsp.h:98
void(* hevc_v_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, int32_t *tc, uint8_t *no_p, uint8_t *no_q)
Definition: hevcdsp.h:122
void(* dequant)(int16_t *coeffs, int16_t log2_size)
Definition: hevcdsp.h:53
void(* sao_edge_restore[2])(uint8_t *_dst, uint8_t *_src, ptrdiff_t _stride_dst, ptrdiff_t _stride_src, struct SAOParams *sao, int *borders, int _width, int _height, int c_idx, uint8_t *vert_edge, uint8_t *horiz_edge, uint8_t *diag_edge)
Definition: hevcdsp.h:70
int offset_abs[3][4]
sao_offset_abs
Definition: hevcdsp.h:35
int eo_class[3]
sao_eo_class
Definition: hevcdsp.h:40
uint8_t type_idx[3]
sao_type_idx
Definition: hevcdsp.h:44
int16_t offset_val[3][5]
SaoOffsetVal.
Definition: hevcdsp.h:42
int offset_sign[3][4]
sao_offset_sign
Definition: hevcdsp.h:36
uint8_t band_position[3]
sao_band_position
Definition: hevcdsp.h:38
#define src
Definition: vp8dsp.c:255
#define height
#define width
static double c[64]