Originally committed as revision 19127 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
| @@ -39,8 +39,7 @@ | |||
| * first stage LSP codebook | |||
| * (10-dimensional, with 128 entries (3.24 of G.729) | |||
| */ | |||
| static const int16_t cb_lsp_1st[1<<VQ_1ST_BITS][10] = | |||
| { /* (2.13) */ | |||
| static const int16_t cb_lsp_1st[1<<VQ_1ST_BITS][10] = { /* (2.13) */ | |||
| { 1486, 2168, 3751, 9074, 12134, 13944, 17983, 19173, 21190, 21820}, | |||
| { 1730, 2640, 3450, 4870, 6126, 7876, 15644, 17817, 20294, 21902}, | |||
| { 1568, 2256, 3088, 4874, 11063, 13393, 18307, 19293, 21109, 21741}, | |||
| @@ -175,8 +174,7 @@ static const int16_t cb_lsp_1st[1<<VQ_1ST_BITS][10] = | |||
| * second stage LSP codebook, high and low parts | |||
| (both 5-dimensional, with 32 entries (3.2.4 of G.729) | |||
| */ | |||
| static const int16_t cb_lsp_2nd[1<<VQ_2ND_BITS][10] = | |||
| { /* (2.13) */ | |||
| static const int16_t cb_lsp_2nd[1<<VQ_2ND_BITS][10] = { /* (2.13) */ | |||
| { -435, -815, -742, 1033, -518, 582, -1201, 829, 86, 385}, | |||
| { -833, -891, 463, -8, -1251, 1450, 72, -231, 864, 661}, | |||
| {-1021, 231, -306, 321, -220, -163, -526, -754, -1633, 267}, | |||
| @@ -214,8 +212,7 @@ static const int16_t cb_lsp_2nd[1<<VQ_2ND_BITS][10] = | |||
| /** | |||
| * gain codebook (first stage), 8k mode (3.9.2 of G.729) | |||
| */ | |||
| static const int16_t cb_gain_1st_8k[1<<GC_1ST_IDX_BITS_8K][2] = | |||
| { /*(0.14) (2.13) */ | |||
| static const int16_t cb_gain_1st_8k[1<<GC_1ST_IDX_BITS_8K][2] = { /*(0.14) (2.13) */ | |||
| { 3242 , 9949 }, | |||
| { 1551 , 2425 }, | |||
| { 2678 , 27162 }, | |||
| @@ -229,8 +226,7 @@ static const int16_t cb_gain_1st_8k[1<<GC_1ST_IDX_BITS_8K][2] = | |||
| /** | |||
| * gain codebook (second stage), 8k mode (3.9.2 of G.729) | |||
| */ | |||
| static const int16_t cb_gain_2nd_8k[1<<GC_2ND_IDX_BITS_8K][2] = | |||
| { /*(1.14) (1.13) */ | |||
| static const int16_t cb_gain_2nd_8k[1<<GC_2ND_IDX_BITS_8K][2] = { /*(1.14) (1.13) */ | |||
| { 5142 , 592 }, | |||
| { 17299 , 1861 }, | |||
| { 6160 , 2395 }, | |||
| @@ -252,8 +248,7 @@ static const int16_t cb_gain_2nd_8k[1<<GC_2ND_IDX_BITS_8K][2] = | |||
| /** | |||
| * 4th order Moving Average (MA) Predictor codebook (3.2.4 of G.729) | |||
| */ | |||
| static const int16_t cb_ma_predictor[2][MA_NP][10] = | |||
| { /* (0.15) */ | |||
| static const int16_t cb_ma_predictor[2][MA_NP][10] = { /* (0.15) */ | |||
| { | |||
| { 8421, 9109, 9175, 8965, 9034, 9057, 8765, 8775, 9106, 8673}, | |||
| { 7018, 7189, 7638, 7307, 7444, 7379, 7038, 6956, 6930, 6868}, | |||
| @@ -71,8 +71,7 @@ | |||
| */ | |||
| #define SHARP_MAX 13017 | |||
| typedef struct | |||
| { | |||
| typedef struct { | |||
| int sample_rate; | |||
| uint8_t packed_frame_size; ///< input frame size(in bytes) | |||
| uint8_t unpacked_frame_size;///< output frame size (in bytes) | |||
| @@ -98,53 +97,40 @@ static inline int get_parity(uint8_t value) | |||
| return (0x6996966996696996ULL >> (value >> 2)) & 1; | |||
| } | |||
| if(avctx->channels != 1) | |||
| { | |||
| if (avctx->channels != 1) { | |||
| av_log(avctx, AV_LOG_ERROR, "Only mono sound is supported (requested channels: %d).\n", avctx->channels); | |||
| return AVERROR_NOFMT; | |||
| } | |||
| 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]); | |||
| if(ctx->frame_erasure) | |||
| { | |||
| ctx->gain_pitch = (29491 * ctx->gain_pitch) >> 15; // 0.9 (0.15) | |||
| ctx->gain_code = (2007 * ctx->gain_code) >> 11; // 0.98 in (0.11) | |||
| 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]); | |||
| if (ctx->frame_erasure) { | |||
| ctx->gain_pitch = (29491 * ctx->gain_pitch) >> 15; // 0.90 (0.15) | |||
| ctx->gain_code = ( 2007 * ctx->gain_code ) >> 11; // 0.98 (0.11) | |||
| gain_corr_factor = 0; | |||
| } | |||
| else | |||
| { | |||
| } else { | |||
| 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]; | |||
| 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); | |||
| if (buf_size<packed_frame_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); | |||
| if (buf_size < packed_frame_size) { | |||
| av_log(avctx, AV_LOG_ERROR, "Error processing packet: packet size too small\n"); | |||
| return AVERROR(EIO); | |||
| } | |||
| if (*data_size<unpacked_frame_size) | |||
| { | |||
| if (*data_size < unpacked_frame_size) { | |||
| av_log(avctx, AV_LOG_ERROR, "Error processing packet: output buffer too small\n"); | |||
| return AVERROR(EIO); | |||
| } | |||