FFmpeg
4.0
libavcodec
sipr.h
Go to the documentation of this file.
1
/*
2
* SIPR / ACELP.NET decoder
3
*
4
* Copyright (c) 2008 Vladimir Voroshilov
5
* Copyright (c) 2009 Vitor Sessak
6
*
7
* This file is part of FFmpeg.
8
*
9
* FFmpeg is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU Lesser General Public
11
* License as published by the Free Software Foundation; either
12
* version 2.1 of the License, or (at your option) any later version.
13
*
14
* FFmpeg is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public
20
* License along with FFmpeg; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
*/
23
24
#ifndef AVCODEC_SIPR_H
25
#define AVCODEC_SIPR_H
26
27
#include "
avcodec.h
"
28
#include "
acelp_pitch_delay.h
"
29
#include "
libavutil/mem.h
"
30
31
#define LP_FILTER_ORDER_16k 16
32
#define L_SUBFR_16k 80
33
#define PITCH_MIN 30
34
#define PITCH_MAX 281
35
36
#define LSFQ_DIFF_MIN (0.0125 * M_PI)
37
38
#define LP_FILTER_ORDER 10
39
40
/** Number of past samples needed for excitation interpolation */
41
#define L_INTERPOL (LP_FILTER_ORDER + 1)
42
43
/** Subframe size for all modes except 16k */
44
#define SUBFR_SIZE 48
45
46
#define SUBFRAME_COUNT_16k 2
47
48
typedef
enum
{
49
MODE_16k
,
50
MODE_8k5
,
51
MODE_6k5
,
52
MODE_5k0
,
53
MODE_COUNT
54
}
SiprMode
;
55
56
typedef
struct
SiprParameters
{
57
int
ma_pred_switch
;
///< switched moving average predictor
58
int
vq_indexes
[5];
59
int
pitch_delay
[5];
///< pitch delay
60
int
gp_index
[5];
///< adaptive-codebook gain indexes
61
int16_t
fc_indexes
[5][10];
///< fixed-codebook indexes
62
int
gc_index
[5];
///< fixed-codebook gain indexes
63
}
SiprParameters
;
64
65
typedef
struct
SiprContext
{
66
AVCodecContext
*
avctx
;
67
68
SiprMode
mode
;
69
70
float
past_pitch_gain
;
71
float
lsf_history[
LP_FILTER_ORDER_16k
];
72
73
float
excitation[
L_INTERPOL
+
PITCH_MAX
+ 2 *
L_SUBFR_16k
];
74
75
DECLARE_ALIGNED
(16,
float
, synth_buf)[
LP_FILTER_ORDER
+ 5*
SUBFR_SIZE
+ 6];
76
77
float
lsp_history[
LP_FILTER_ORDER
];
78
float
gain_mem
;
79
float
energy_history[4];
80
float
highpass_filt_mem[2];
81
float
postfilter_mem[
PITCH_DELAY_MAX
+
LP_FILTER_ORDER
];
82
83
/* 5k0 */
84
float
tilt_mem
;
85
float
postfilter_agc
;
86
float
postfilter_mem5k0[
PITCH_DELAY_MAX
+
LP_FILTER_ORDER
];
87
float
postfilter_syn5k0[
LP_FILTER_ORDER
+
SUBFR_SIZE
*5];
88
89
/* 16k */
90
int
pitch_lag_prev
;
91
float
iir_mem[
LP_FILTER_ORDER_16k
+1];
92
float
filt_buf[2][
LP_FILTER_ORDER_16k
+1];
93
float
*filt_mem[2];
94
float
mem_preemph[
LP_FILTER_ORDER_16k
];
95
float
synth[
LP_FILTER_ORDER_16k
];
96
double
lsp_history_16k[16];
97
98
void
(*
decode_frame
)(
struct
SiprContext
*
ctx
,
SiprParameters
*
params
,
99
float
*out_data);
100
}
SiprContext
;
101
102
extern
const
float
ff_pow_0_5
[16];
103
104
void
ff_sipr_init_16k
(
SiprContext
*
ctx
);
105
106
void
ff_sipr_decode_frame_16k
(
SiprContext
*
ctx
,
SiprParameters
*
params
,
107
float
*out_data);
108
109
#endif
/* AVCODEC_SIPR_H */
SiprParameters::gp_index
int gp_index[5]
adaptive-codebook gain indexes
Definition:
sipr.h:60
SiprParameters::pitch_delay
int pitch_delay[5]
pitch delay
Definition:
sipr.h:59
SiprParameters::vq_indexes
int vq_indexes[5]
Definition:
sipr.h:58
MODE_8k5
Definition:
sipr.h:50
SiprContext
Definition:
sipr.h:65
SiprContext::pitch_lag_prev
int pitch_lag_prev
Definition:
sipr.h:90
SUBFR_SIZE
#define SUBFR_SIZE
Subframe size for all modes except 16k.
Definition:
sipr.h:44
mem.h
Memory handling functions.
SiprMode
SiprMode
Definition:
sipr.h:48
PITCH_DELAY_MAX
#define PITCH_DELAY_MAX
Definition:
acelp_pitch_delay.h:31
L_INTERPOL
#define L_INTERPOL
Number of past samples needed for excitation interpolation.
Definition:
sipr.h:41
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
Definition:
mem.h:112
MODE_16k
Definition:
sipr.h:49
SiprParameters
Definition:
sipr.h:56
MODE_COUNT
Definition:
sipr.h:53
decode_frame
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition:
4xm.c:827
MODE_5k0
Definition:
sipr.h:52
PITCH_MAX
#define PITCH_MAX
Definition:
sipr.h:34
SiprContext::avctx
AVCodecContext * avctx
Definition:
sipr.h:66
MODE_6k5
Definition:
sipr.h:51
LP_FILTER_ORDER
#define LP_FILTER_ORDER
Definition:
sipr.h:38
ctx
AVFormatContext * ctx
Definition:
movenc.c:48
L_SUBFR_16k
#define L_SUBFR_16k
Definition:
sipr.h:32
SiprParameters::fc_indexes
int16_t fc_indexes[5][10]
fixed-codebook indexes
Definition:
sipr.h:61
avcodec.h
Libavcodec external API header.
void
typedef void(RENAME(mix_any_func_type))
Definition:
rematrix_template.c:52
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
params
const char const char * params
Definition:
avisynth_c.h:775
SiprParameters::gc_index
int gc_index[5]
fixed-codebook gain indexes
Definition:
sipr.h:62
SiprContext::gain_mem
float gain_mem
Definition:
sipr.h:78
ff_sipr_decode_frame_16k
void ff_sipr_decode_frame_16k(SiprContext *ctx, SiprParameters *params, float *out_data)
Definition:
sipr16k.c:176
LP_FILTER_ORDER_16k
#define LP_FILTER_ORDER_16k
Definition:
sipr.h:31
acelp_pitch_delay.h
SiprContext::postfilter_agc
float postfilter_agc
Definition:
sipr.h:85
SiprParameters::ma_pred_switch
int ma_pred_switch
switched moving average predictor
Definition:
sipr.h:57
SiprContext::past_pitch_gain
float past_pitch_gain
Definition:
sipr.h:70
SiprContext::mode
SiprMode mode
Definition:
sipr.h:68
ff_pow_0_5
const float ff_pow_0_5[16]
Definition:
sipr.c:135
SiprContext::tilt_mem
float tilt_mem
Definition:
sipr.h:84
ff_sipr_init_16k
void ff_sipr_init_16k(SiprContext *ctx)
Definition:
sipr16k.c:271
Generated on Tue May 22 2018 07:06:41 for FFmpeg by
1.8.13