From 7e52fd6bca83043750d7a1cbcc52e89aad9847f8 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sun, 23 Dec 2012 17:55:09 -0500 Subject: g723.1: decode directly to the user-provided AVFrame --- libavcodec/g723_1.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'libavcodec/g723_1.c') diff --git a/libavcodec/g723_1.c b/libavcodec/g723_1.c index b1fbe9869a..377a718ffb 100644 --- a/libavcodec/g723_1.c +++ b/libavcodec/g723_1.c @@ -76,7 +76,6 @@ typedef struct { typedef struct g723_1_context { AVClass *class; - AVFrame frame; G723_1_Subframe subframe[4]; enum FrameType cur_frame_type; @@ -117,9 +116,6 @@ static av_cold int g723_1_decode_init(AVCodecContext *avctx) avctx->sample_rate = 8000; p->pf_gain = 1 << 12; - avcodec_get_frame_defaults(&p->frame); - avctx->coded_frame = &p->frame; - memcpy(p->prev_lsp, dc_lsp, LPC_ORDER * sizeof(*p->prev_lsp)); memcpy(p->sid_lsp, dc_lsp, LPC_ORDER * sizeof(*p->sid_lsp)); @@ -1191,6 +1187,7 @@ static int g723_1_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt) { G723_1_Context *p = avctx->priv_data; + AVFrame *frame = data; const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; int dec_mode = buf[0] & 3; @@ -1220,13 +1217,13 @@ static int g723_1_decode_frame(AVCodecContext *avctx, void *data, p->cur_frame_type = UNTRANSMITTED_FRAME; } - p->frame.nb_samples = FRAME_LEN; - if ((ret = ff_get_buffer(avctx, &p->frame)) < 0) { + frame->nb_samples = FRAME_LEN; + if ((ret = ff_get_buffer(avctx, frame)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } - out = (int16_t *)p->frame.data[0]; + out = (int16_t *)frame->data[0]; if (p->cur_frame_type == ACTIVE_FRAME) { if (!bad_frame) @@ -1297,7 +1294,7 @@ static int g723_1_decode_frame(AVCodecContext *avctx, void *data, (FRAME_LEN + PITCH_MAX) * sizeof(*p->excitation)); memset(p->prev_excitation, 0, PITCH_MAX * sizeof(*p->excitation)); - memset(p->frame.data[0], 0, + memset(frame->data[0], 0, (FRAME_LEN + LPC_ORDER) * sizeof(int16_t)); } else { int16_t *buf = p->audio + LPC_ORDER; @@ -1346,8 +1343,7 @@ static int g723_1_decode_frame(AVCodecContext *avctx, void *data, out[i] = av_clip_int16(p->audio[LPC_ORDER + i] << 1); } - *got_frame_ptr = 1; - *(AVFrame *)data = p->frame; + *got_frame_ptr = 1; return frame_size[dec_mode]; } -- cgit v1.2.3