1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-01-13 21:28:01 +02:00

Remove the struct SiprModeParam of the context. This will simplify splitting

the file for future 16k mode decoder code.

Originally committed as revision 21184 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Vitor Sessak 2010-01-13 04:29:55 +00:00
parent f3da24c4c3
commit 1c3c129b8f

View File

@ -130,7 +130,6 @@ typedef struct {
AVCodecContext *avctx; AVCodecContext *avctx;
DSPContext dsp; DSPContext dsp;
SiprModeParam m;
SiprMode mode; SiprMode mode;
float past_pitch_gain; float past_pitch_gain;
@ -410,7 +409,8 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
float *out_data) float *out_data)
{ {
int i, j; int i, j;
int frame_size = ctx->m.subframe_count * SUBFR_SIZE; int subframe_count = modes[ctx->mode].subframe_count;
int frame_size = subframe_count * SUBFR_SIZE;
float Az[LP_FILTER_ORDER * MAX_SUBFRAME_COUNT]; float Az[LP_FILTER_ORDER * MAX_SUBFRAME_COUNT];
float *excitation; float *excitation;
float ir_buf[SUBFR_SIZE + LP_FILTER_ORDER]; float ir_buf[SUBFR_SIZE + LP_FILTER_ORDER];
@ -424,13 +424,13 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
memset(ir_buf, 0, LP_FILTER_ORDER * sizeof(float)); memset(ir_buf, 0, LP_FILTER_ORDER * sizeof(float));
lsf_decode_fp(lsf_new, ctx->lsf_history, params); lsf_decode_fp(lsf_new, ctx->lsf_history, params);
sipr_decode_lp(lsf_new, ctx->lsp_history, Az, ctx->m.subframe_count); sipr_decode_lp(lsf_new, ctx->lsp_history, Az, subframe_count);
memcpy(ctx->lsp_history, lsf_new, LP_FILTER_ORDER * sizeof(float)); memcpy(ctx->lsp_history, lsf_new, LP_FILTER_ORDER * sizeof(float));
excitation = ctx->excitation + PITCH_DELAY_MAX + L_INTERPOL; excitation = ctx->excitation + PITCH_DELAY_MAX + L_INTERPOL;
for (i = 0; i < ctx->m.subframe_count; i++) { for (i = 0; i < subframe_count; i++) {
float *pAz = Az + i*LP_FILTER_ORDER; float *pAz = Az + i*LP_FILTER_ORDER;
float fixed_vector[SUBFR_SIZE]; float fixed_vector[SUBFR_SIZE];
int T0,T0_frac; int T0,T0_frac;
@ -450,7 +450,7 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
decode_fixed_sparse(&fixed_cb, params->fc_indexes[i], ctx->mode, decode_fixed_sparse(&fixed_cb, params->fc_indexes[i], ctx->mode,
ctx->past_pitch_gain < 0.8); ctx->past_pitch_gain < 0.8);
eval_ir(pAz, T0, impulse_response, ctx->m.pitch_sharp_factor); eval_ir(pAz, T0, impulse_response, modes[ctx->mode].pitch_sharp_factor);
convolute_with_sparse(fixed_vector, &fixed_cb, impulse_response, convolute_with_sparse(fixed_vector, &fixed_cb, impulse_response,
SUBFR_SIZE); SUBFR_SIZE);
@ -497,7 +497,7 @@ static void decode_frame(SiprContext *ctx, SiprParameters *params,
LP_FILTER_ORDER * sizeof(float)); LP_FILTER_ORDER * sizeof(float));
if (ctx->mode == MODE_5k0) { if (ctx->mode == MODE_5k0) {
for (i = 0; i < ctx->m.subframe_count; i++) { for (i = 0; i < subframe_count; i++) {
float energy = ff_dot_productf(ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE, float energy = ff_dot_productf(ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE, ctx->postfilter_syn5k0 + LP_FILTER_ORDER + i*SUBFR_SIZE,
SUBFR_SIZE); SUBFR_SIZE);
@ -532,8 +532,7 @@ static av_cold int sipr_decoder_init(AVCodecContext * avctx)
else if (avctx->bit_rate > 5750 ) ctx->mode = MODE_6k5; else if (avctx->bit_rate > 5750 ) ctx->mode = MODE_6k5;
else ctx->mode = MODE_5k0; else ctx->mode = MODE_5k0;
ctx->m = modes[ctx->mode]; av_log(avctx, AV_LOG_DEBUG, "Mode: %s\n", modes[ctx->mode].mode_name);
av_log(avctx, AV_LOG_DEBUG, "Mode: %s\n", ctx->m.mode_name);
for (i = 0; i < LP_FILTER_ORDER; i++) for (i = 0; i < LP_FILTER_ORDER; i++)
ctx->lsp_history[i] = cos((i+1) * M_PI / (LP_FILTER_ORDER + 1)); ctx->lsp_history[i] = cos((i+1) * M_PI / (LP_FILTER_ORDER + 1));
@ -560,12 +559,13 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *datap,
SiprContext *ctx = avctx->priv_data; SiprContext *ctx = avctx->priv_data;
const uint8_t *buf=avpkt->data; const uint8_t *buf=avpkt->data;
SiprParameters parm; SiprParameters parm;
const SiprModeParam *mode_par = &modes[ctx->mode];
GetBitContext gb; GetBitContext gb;
float *data = datap; float *data = datap;
int i; int i;
ctx->avctx = avctx; ctx->avctx = avctx;
if (avpkt->size < (ctx->m.bits_per_frame >> 3)) { if (avpkt->size < (mode_par->bits_per_frame >> 3)) {
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"Error processing packet: packet size (%d) too small\n", "Error processing packet: packet size (%d) too small\n",
avpkt->size); avpkt->size);
@ -573,7 +573,7 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *datap,
*data_size = 0; *data_size = 0;
return -1; return -1;
} }
if (*data_size < SUBFR_SIZE * ctx->m.subframe_count * sizeof(float)) { if (*data_size < SUBFR_SIZE * mode_par->subframe_count * sizeof(float)) {
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"Error processing packet: output buffer (%d) too small\n", "Error processing packet: output buffer (%d) too small\n",
*data_size); *data_size);
@ -582,19 +582,19 @@ static int sipr_decode_frame(AVCodecContext *avctx, void *datap,
return -1; return -1;
} }
init_get_bits(&gb, buf, ctx->m.bits_per_frame); init_get_bits(&gb, buf, mode_par->bits_per_frame);
for (i = 0; i < ctx->m.frames_per_packet; i++) { for (i = 0; i < mode_par->frames_per_packet; i++) {
decode_parameters(&parm, &gb, &ctx->m); decode_parameters(&parm, &gb, mode_par);
decode_frame(ctx, &parm, data); decode_frame(ctx, &parm, data);
data += SUBFR_SIZE * ctx->m.subframe_count; data += SUBFR_SIZE * mode_par->subframe_count;
} }
*data_size = ctx->m.frames_per_packet * SUBFR_SIZE * *data_size = mode_par->frames_per_packet * SUBFR_SIZE *
ctx->m.subframe_count * sizeof(float); mode_par->subframe_count * sizeof(float);
return ctx->m.bits_per_frame >> 3; return mode_par->bits_per_frame >> 3;
}; };
AVCodec sipr_decoder = { AVCodec sipr_decoder = {