FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
lsp.h
Go to the documentation of this file.
1
/*
2
* LSP computing for ACELP-based codecs
3
*
4
* Copyright (c) 2008 Vladimir Voroshilov
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_LSP_H
24
#define AVCODEC_LSP_H
25
26
#include <stdint.h>
27
28
/**
29
(I.F) means fixed-point value with F fractional and I integer bits
30
*/
31
32
/**
33
* @brief ensure a minimum distance between LSFs
34
* @param[in,out] lsfq LSF to check and adjust
35
* @param lsfq_min_distance minimum distance between LSFs
36
* @param lsfq_min minimum allowed LSF value
37
* @param lsfq_max maximum allowed LSF value
38
* @param lp_order LP filter order
39
*/
40
void
ff_acelp_reorder_lsf
(int16_t* lsfq,
int
lsfq_min_distance,
int
lsfq_min,
int
lsfq_max,
int
lp_order);
41
42
/**
43
* Adjust the quantized LSFs so they are increasing and not too close.
44
*
45
* This step is not mentioned in the AMR spec but is in the reference C decoder.
46
* Omitting this step creates audible distortion on the sinusoidal sweep
47
* test vectors in 3GPP TS 26.074.
48
*
49
* @param[in,out] lsf LSFs in Hertz
50
* @param min_spacing minimum distance between two consecutive lsf values
51
* @param size size of the lsf vector
52
*/
53
void
ff_set_min_dist_lsf
(
float
*lsf,
double
min_spacing,
int
size
);
54
55
/**
56
* @brief Convert LSF to LSP
57
* @param[out] lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
58
* @param lsf normalized LSF coefficients (0 <= (2.13) < 0x2000 * PI)
59
* @param lp_order LP filter order
60
*
61
* @remark It is safe to pass the same array into the lsf and lsp parameters.
62
*/
63
void
ff_acelp_lsf2lsp
(int16_t *lsp,
const
int16_t *lsf,
int
lp_order);
64
65
/**
66
* Floating point version of ff_acelp_lsf2lsp()
67
*/
68
void
ff_acelp_lsf2lspd
(
double
*lsp,
const
float
*lsf,
int
lp_order);
69
70
/**
71
* @brief LSP to LP conversion (3.2.6 of G.729)
72
* @param[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000)
73
* @param lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
74
* @param lp_half_order LP filter order, divided by 2
75
*/
76
void
ff_acelp_lsp2lpc
(int16_t* lp,
const
int16_t* lsp,
int
lp_half_order);
77
78
/**
79
* LSP to LP conversion (5.2.4 of AMR-WB)
80
*/
81
void
ff_amrwb_lsp2lpc
(
const
double
*lsp,
float
*lp,
int
lp_order);
82
83
/**
84
* @brief Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3.2.5 and 3.2.6 of G.729)
85
* @param[out] lp_1st decoded LP coefficients for first subframe (-0x8000 <= (3.12) < 0x8000)
86
* @param[out] lp_2nd decoded LP coefficients for second subframe (-0x8000 <= (3.12) < 0x8000)
87
* @param lsp_2nd LSP coefficients of the second subframe (-0x8000 <= (0.15) < 0x8000)
88
* @param lsp_prev LSP coefficients from the second subframe of the previous frame (-0x8000 <= (0.15) < 0x8000)
89
* @param lp_order LP filter order
90
*/
91
void
ff_acelp_lp_decode
(int16_t* lp_1st, int16_t* lp_2nd,
const
int16_t* lsp_2nd,
const
int16_t* lsp_prev,
int
lp_order);
92
93
94
#define MAX_LP_HALF_ORDER 10
95
#define MAX_LP_ORDER (2*MAX_LP_HALF_ORDER)
96
97
/**
98
* Reconstruct LPC coefficients from the line spectral pair frequencies.
99
*
100
* @param lsp line spectral pairs in cosine domain
101
* @param lpc linear predictive coding coefficients
102
* @param lp_half_order half the number of the amount of LPCs to be
103
* reconstructed, need to be smaller or equal to MAX_LP_HALF_ORDER
104
*
105
* @note buffers should have a minimux size of 2*lp_half_order elements.
106
*
107
* TIA/EIA/IS-733 2.4.3.3.5
108
*/
109
void
ff_acelp_lspd2lpc
(
const
double
*lsp,
float
*lpc,
int
lp_half_order);
110
111
/**
112
* Sort values in ascending order.
113
*
114
* @note O(n) if data already sorted, O(n^2) - otherwise
115
*/
116
void
ff_sort_nearly_sorted_floats
(
float
*vals,
int
len
);
117
118
/**
119
* Compute the Pa / (1 + z(-1)) or Qa / (1 - z(-1)) coefficients
120
* needed for LSP to LPC conversion.
121
* We only need to calculate the 6 first elements of the polynomial.
122
*
123
* @param lsp line spectral pairs in cosine domain
124
* @param[out] f polynomial input/output as a vector
125
*
126
* TIA/EIA/IS-733 2.4.3.3.5-1/2
127
*/
128
void
ff_lsp2polyf
(
const
double
*lsp,
double
*f,
int
lp_half_order);
129
130
#endif
/* AVCODEC_LSP_H */
Generated on Sun Mar 8 2015 02:34:55 for FFmpeg by
1.8.2