Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * G.729, G729 Annex D postfilter
3
 * Copyright (c) 2008 Vladimir Voroshilov
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
#ifndef FFMPEG_G729POSTFILTER_H
22
#define FFMPEG_G729POSTFILTER_H
23
 
24
#include 
25
#include "dsputil.h"
26
 
27
/**
28
 * tilt compensation factor (G.729, k1>0)
29
 * 0.2 in Q15
30
 */
31
#define G729_TILT_FACTOR_PLUS       6554
32
 
33
/**
34
 * tilt compensation factor (G.729, k1<0)
35
 * 0.9 in Q15
36
 */
37
#define G729_TILT_FACTOR_MINUS     29491
38
 
39
/* 4.2.2 */
40
#define FORMANT_PP_FACTOR_NUM  18022             //0.55 in Q15
41
#define FORMANT_PP_FACTOR_DEN  22938             //0.70 in Q15
42
 
43
/**
44
 * gain adjustment factor (G.729, 4.2.4)
45
 * 0.9875 in Q15
46
 */
47
#define G729_AGC_FACTOR            32358
48
#define G729_AGC_FAC1 (32768-G729_AGC_FACTOR)
49
 
50
/**
51
 * 1.0 / (1.0 + 0.5) in Q15
52
 * where 0.5 is the minimum value of
53
 * weight factor, controlling amount of long-term postfiltering
54
 */
55
#define MIN_LT_FILT_FACTOR_A       21845
56
 
57
/**
58
 * Short interpolation filter length
59
 */
60
#define SHORT_INT_FILT_LEN         2
61
 
62
/**
63
 * Long interpolation filter length
64
 */
65
#define LONG_INT_FILT_LEN          8
66
 
67
/**
68
 * Number of analyzed fractional pitch delays in second stage of long-term
69
 * postfilter
70
 */
71
#define ANALYZED_FRAC_DELAYS       7
72
 
73
/**
74
 * Amount of past residual signal data stored in buffer
75
 */
76
#define RES_PREV_DATA_SIZE (PITCH_DELAY_MAX + LONG_INT_FILT_LEN + 1)
77
 
78
/**
79
 * \brief Signal postfiltering (4.2)
80
 * \param dsp initialized DSP context
81
 * \param ht_prev_data [in/out] (Q12) pointer to variable receiving tilt
82
 *                     compensation filter data from previous subframe
83
 * \param voicing [in/out] (Q0) pointer to variable receiving voicing decision
84
 * \param lp_filter_coeffs (Q12) LP filter coefficients
85
 * \param pitch_delay_int integer part of the pitch delay
86
 * \param residual [in/out] (Q0) residual signal buffer (used in long-term postfilter)
87
 * \param res_filter_data [in/out] (Q0) speech data of previous subframe
88
 * \param pos_filter_data [in/out] (Q0) previous speech data for short-term postfilter
89
 * \param speech [in/out] (Q0) signal buffer
90
 * \param subframe_size size of subframe
91
 *
92
 * Filtering has the following  stages:
93
 *   Long-term postfilter (4.2.1)
94
 *   Short-term postfilter (4.2.2).
95
 *   Tilt-compensation (4.2.3)
96
 */
97
void ff_g729_postfilter(DSPContext *dsp, int16_t* ht_prev_data, int* voicing,
98
                     const int16_t *lp_filter_coeffs, int pitch_delay_int,
99
                     int16_t* residual, int16_t* res_filter_data,
100
                     int16_t* pos_filter_data, int16_t *speech,
101
                     int subframe_size);
102
 
103
/**
104
 * \brief Adaptive gain control (4.2.4)
105
 * \param gain_before (Q0) gain of speech before applying postfilters
106
 * \param gain_after  (Q0) gain of speech after applying postfilters
107
 * \param speech [in/out] (Q0) signal buffer
108
 * \param subframe_size length of subframe
109
 * \param gain_prev (Q12) previous value of gain coefficient
110
 *
111
 * \return (Q12) last value of gain coefficient
112
 */
113
int16_t ff_g729_adaptive_gain_control(int gain_before, int gain_after, int16_t *speech,
114
                                   int subframe_size, int16_t gain_prev);
115
 
116
#endif // FFMPEG_G729POSTFILTER_H