diff options
author | Vladimir Voroshilov <voroshil@gmail.com> | 2008-09-03 01:07:03 +0000 |
---|---|---|
committer | Vladimir Voroshilov <voroshil@gmail.com> | 2008-09-03 01:07:03 +0000 |
commit | bc165ee392f3bf1612d401daf86c998c263b731f (patch) | |
tree | 0a9ebffb8c3a29ddea7d90e6b2344c57fb286a31 /libavcodec/g729dec.c | |
parent | 4834eb191c21af057913955cd7d3f92a685219b9 (diff) | |
download | ffmpeg-bc165ee392f3bf1612d401daf86c998c263b731f.tar.gz |
Another set of approved G.729 chunks (from decoder core)
Originally committed as revision 15168 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/g729dec.c')
-rw-r--r-- | libavcodec/g729dec.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/libavcodec/g729dec.c b/libavcodec/g729dec.c index b2761e4df0..a0a2dba66b 100644 --- a/libavcodec/g729dec.c +++ b/libavcodec/g729dec.c @@ -79,6 +79,49 @@ static inline int g729_get_parity(uint8_t value) return (0x6996966996696996ULL >> (value >> 2)) & 1; } + /* + This filter enhances harmonic components of the fixed-codebook vector to + improve the quality of the reconstructed speech. + + / fc_v[i], i < pitch_delay + fc_v[i] = < + \ fc_v[i] + gain_pitch * fc_v[i-pitch_delay], i >= pitch_delay + */ + ff_acelp_weighted_vector_sum( + fc + pitch_delay_int[i], + fc + pitch_delay_int[i], + fc, + 1 << 14, + av_clip(ctx->gain_pitch, SHARP_MIN, SHARP_MAX), + 0, + 14, + ctx->subframe_size - pitch_delay_int[i]); + + ctx->gain_pitch = cb_gain_1st_8k[parm->gc_1st_index[i]][0] + + cb_gain_2nd_8k[parm->gc_2nd_index[i]][0]; + gain_corr_factor = cb_gain_1st_8k[parm->gc_1st_index[i]][1] + + cb_gain_2nd_8k[parm->gc_2nd_index[i]][1]; + + /* Routine requires rounding to lowest. */ + ff_acelp_interpolate( + ctx->exc + i*ctx->subframe_size, + ctx->exc + i*ctx->subframe_size - pitch_delay_3x/3, + ff_acelp_interp_filter, + 6, + (pitch_delay_3x%3)<<1, + 10, + ctx->subframe_size); + + ff_acelp_weighted_vector_sum( + ctx->exc + i * ctx->subframe_size, + ctx->exc + i * ctx->subframe_size, + fc, + (!voicing && ctx->frame_erasure) ? 0 : ctx->gain_pitch, + ( voicing && ctx->frame_erasure) ? 0 : ctx->gain_code, + 1<<13, + 14, + ctx->subframe_size); + AVCodec g729_decoder = { "g729", |