av_freep(&c->node_buf[i]);
av_freep(&c->nodep_buf[i]);
}
-#if FF_API_OLD_ENCODE_AUDIO
- av_freep(&avctx->coded_frame);
-#endif
return 0;
}
a common packet size for VoIP applications */
avctx->frame_size = 320;
}
- avctx->delay = 22;
+ avctx->initial_padding = 22;
if (avctx->trellis) {
/* validate trellis */
}
}
-#if FF_API_OLD_ENCODE_AUDIO
- avctx->coded_frame = avcodec_alloc_frame();
- if (!avctx->coded_frame) {
- ret = AVERROR(ENOMEM);
- goto error;
- }
-#endif
+ ff_g722dsp_init(&c->dsp);
return 0;
error:
static inline void filter_samples(G722Context *c, const int16_t *samples,
int *xlow, int *xhigh)
{
- int xout1, xout2;
+ int xout[2];
c->prev_samples[c->prev_samples_pos++] = samples[0];
c->prev_samples[c->prev_samples_pos++] = samples[1];
- ff_g722_apply_qmf(c->prev_samples + c->prev_samples_pos - 24, &xout1, &xout2);
- *xlow = xout1 + xout2 >> 14;
- *xhigh = xout1 - xout2 >> 14;
+ c->dsp.apply_qmf(c->prev_samples + c->prev_samples_pos - 24, xout);
+ *xlow = xout[0] + xout[1] >> 14;
+ *xhigh = xout[0] - xout[1] >> 14;
if (c->prev_samples_pos >= PREV_SAMPLES_BUF_SIZE) {
memmove(c->prev_samples,
c->prev_samples + c->prev_samples_pos - 22,
if (k < 0)
continue;
- decoded = av_clip((cur_node->state.scale_factor *
+ decoded = av_clip_intp2((cur_node->state.scale_factor *
ff_g722_low_inv_quant6[k] >> 10)
- + cur_node->state.s_predictor, -16384, 16383);
+ + cur_node->state.s_predictor, 14);
dec_diff = xlow - decoded;
#define STORE_NODE(index, UPDATE, VALUE)\
dhigh = cur_node->state.scale_factor *
ff_g722_high_inv_quant[ihigh] >> 10;
- decoded = av_clip(dhigh + cur_node->state.s_predictor,
- -16384, 16383);
+ decoded = av_clip_intp2(dhigh + cur_node->state.s_predictor, 14);
dec_diff = xhigh - decoded;
STORE_NODE(1, ff_g722_update_high_predictor(&node->state, dhigh, ihigh), ihigh);
}
if (frame->pts != AV_NOPTS_VALUE)
- avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
+ avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
*got_packet_ptr = 1;
return 0;
}
AVCodec ff_adpcm_g722_encoder = {
.name = "g722",
+ .long_name = NULL_IF_CONFIG_SMALL("G.722 ADPCM"),
.type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_ADPCM_G722,
.priv_data_size = sizeof(G722Context),
.init = g722_encode_init,
.close = g722_encode_close,
.encode2 = g722_encode_frame,
- .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
- .long_name = NULL_IF_CONFIG_SMALL("G.722 ADPCM"),
+ .capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_NONE },
};