Browse Source

gsm: decode directly to the user-provided AVFrame

tags/n1.2
Justin Ruggles 13 years ago
parent
commit
6fdfdb23d3
2 changed files with 5 additions and 12 deletions
  1. +5
    -11
      libavcodec/gsmdec.c
  2. +0
    -1
      libavcodec/gsmdec_data.h

+ 5
- 11
libavcodec/gsmdec.c View File

@@ -34,8 +34,6 @@

static av_cold int gsm_init(AVCodecContext *avctx)
{
GSMContext *s = avctx->priv_data;

avctx->channels = 1;
avctx->channel_layout = AV_CH_LAYOUT_MONO;
avctx->sample_rate = 8000;
@@ -51,16 +49,13 @@ static av_cold int gsm_init(AVCodecContext *avctx)
avctx->block_align = GSM_MS_BLOCK_SIZE;
}

avcodec_get_frame_defaults(&s->frame);
avctx->coded_frame = &s->frame;

return 0;
}

static int gsm_decode_frame(AVCodecContext *avctx, void *data,
int *got_frame_ptr, AVPacket *avpkt)
{
GSMContext *s = avctx->priv_data;
AVFrame *frame = data;
int res;
GetBitContext gb;
const uint8_t *buf = avpkt->data;
@@ -73,12 +68,12 @@ static int gsm_decode_frame(AVCodecContext *avctx, void *data,
}

/* get output buffer */
s->frame.nb_samples = avctx->frame_size;
if ((res = ff_get_buffer(avctx, &s->frame)) < 0) {
frame->nb_samples = avctx->frame_size;
if ((res = ff_get_buffer(avctx, frame)) < 0) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return res;
}
samples = (int16_t *)s->frame.data[0];
samples = (int16_t *)frame->data[0];

switch (avctx->codec_id) {
case AV_CODEC_ID_GSM:
@@ -95,8 +90,7 @@ static int gsm_decode_frame(AVCodecContext *avctx, void *data,
return res;
}

*got_frame_ptr = 1;
*(AVFrame *)data = s->frame;
*got_frame_ptr = 1;

return avctx->block_align;
}


+ 0
- 1
libavcodec/gsmdec_data.h View File

@@ -26,7 +26,6 @@
#include "avcodec.h"

typedef struct GSMContext {
AVFrame frame;
// Contains first 120 elements from the previous frame
// (used by long_term_synth according to the "lag"),
// then in the following 160 elements the current


Loading…
Cancel
Save