197
parms->ma_pred_switch = get_bits(pgb, p->ma_predictor_bits);
197
if (p->ma_predictor_bits)
198
parms->ma_pred_switch = get_bits(pgb, p->ma_predictor_bits);
199
200
for (i = 0; i < 5; i++)
200
201
parms->vq_indexes[i] = get_bits(pgb, p->vq_indexes_bits[i]);
202
203
for (i = 0; i < p->subframe_count; i++) {
203
204
parms->pitch_delay[i] = get_bits(pgb, p->pitch_delay_bits[i]);
204
parms->gp_index[i] = get_bits(pgb, p->gp_index_bits);
205
if (p->gp_index_bits)
206
parms->gp_index[i] = get_bits(pgb, p->gp_index_bits);
206
208
for (j = 0; j < p->number_of_fc_indexes; j++)
207
209
parms->fc_indexes[i][j] = get_bits(pgb, p->fc_index_bits[j]);
478
480
SiprContext *ctx = avctx->priv_data;
481
if (avctx->bit_rate > 12200) ctx->mode = MODE_16k;
482
else if (avctx->bit_rate > 7500 ) ctx->mode = MODE_8k5;
483
else if (avctx->bit_rate > 5750 ) ctx->mode = MODE_6k5;
484
else ctx->mode = MODE_5k0;
483
switch (avctx->block_align) {
484
case 20: ctx->mode = MODE_16k; break;
485
case 19: ctx->mode = MODE_8k5; break;
486
case 29: ctx->mode = MODE_6k5; break;
487
case 37: ctx->mode = MODE_5k0; break;
489
av_log(avctx, AV_LOG_ERROR, "Invalid block_align: %d\n", avctx->block_align);
490
return AVERROR(EINVAL);
486
493
av_log(avctx, AV_LOG_DEBUG, "Mode: %s\n", modes[ctx->mode].mode_name);
488
if (ctx->mode == MODE_16k)
495
if (ctx->mode == MODE_16k) {
489
496
ff_sipr_init_16k(ctx);
497
ctx->decode_frame = ff_sipr_decode_frame_16k;
499
ctx->decode_frame = decode_frame;
491
502
for (i = 0; i < LP_FILTER_ORDER; i++)
492
503
ctx->lsp_history[i] = cos((i+1) * M_PI / (LP_FILTER_ORDER + 1));
497
508
avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
510
avcodec_get_frame_defaults(&ctx->frame);
511
avctx->coded_frame = &ctx->frame;
502
static int sipr_decode_frame(AVCodecContext *avctx, void *datap,
503
int *data_size, AVPacket *avpkt)
516
static int sipr_decode_frame(AVCodecContext *avctx, void *data,
517
int *got_frame_ptr, AVPacket *avpkt)
505
519
SiprContext *ctx = avctx->priv_data;
506
520
const uint8_t *buf=avpkt->data;
507
521
SiprParameters parm;
508
522
const SiprModeParam *mode_par = &modes[ctx->mode];
509
523
GetBitContext gb;
511
525
int subframe_size = ctx->mode == MODE_16k ? L_SUBFR_16k : SUBFR_SIZE;
514
528
ctx->avctx = avctx;
515
529
if (avpkt->size < (mode_par->bits_per_frame >> 3)) {
516
530
av_log(avctx, AV_LOG_ERROR,
517
531
"Error processing packet: packet size (%d) too small\n",
523
if (*data_size < subframe_size * mode_par->subframe_count * sizeof(float)) {
524
av_log(avctx, AV_LOG_ERROR,
525
"Error processing packet: output buffer (%d) too small\n",
536
/* get output buffer */
537
ctx->frame.nb_samples = mode_par->frames_per_packet * subframe_size *
538
mode_par->subframe_count;
539
if ((ret = avctx->get_buffer(avctx, &ctx->frame)) < 0) {
540
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
543
samples = (float *)ctx->frame.data[0];
532
545
init_get_bits(&gb, buf, mode_par->bits_per_frame);
534
547
for (i = 0; i < mode_par->frames_per_packet; i++) {
535
548
decode_parameters(&parm, &gb, mode_par);
537
if (ctx->mode == MODE_16k)
538
ff_sipr_decode_frame_16k(ctx, &parm, data);
540
decode_frame(ctx, &parm, data);
550
ctx->decode_frame(ctx, &parm, samples);
542
data += subframe_size * mode_par->subframe_count;
552
samples += subframe_size * mode_par->subframe_count;
545
*data_size = mode_par->frames_per_packet * subframe_size *
546
mode_par->subframe_count * sizeof(float);
556
*(AVFrame *)data = ctx->frame;
548
558
return mode_par->bits_per_frame >> 3;
551
561
AVCodec ff_sipr_decoder = {
563
.type = AVMEDIA_TYPE_AUDIO,
565
.priv_data_size = sizeof(SiprContext),
566
.init = sipr_decoder_init,
567
.decode = sipr_decode_frame,
568
.capabilities = CODEC_CAP_DR1,
560
569
.long_name = NULL_IF_CONFIG_SMALL("RealAudio SIPR / ACELP.NET"),