summaryrefslogtreecommitdiff
path: root/libavcodec/g726.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2010-09-11 19:52:09 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2010-09-11 19:52:09 +0000
commitc7d89948a3b74bf813afccc346a1a1463a28f34d (patch)
tree4613230846f6404cfdd11fd82e0e866c2b52c865 /libavcodec/g726.c
parent680861ca73eeaf5ca93db3d87b76fa527acb4421 (diff)
Set a constant frame size for encoding G.726 audio.
Originally committed as revision 25107 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/g726.c')
-rw-r--r--libavcodec/g726.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libavcodec/g726.c b/libavcodec/g726.c
index 6192b2b18c..4c63bf3895 100644
--- a/libavcodec/g726.c
+++ b/libavcodec/g726.c
@@ -334,6 +334,11 @@ static av_cold int g726_init(AVCodecContext * avctx)
if (avctx->codec->decode)
avctx->sample_fmt = SAMPLE_FMT_S16;
+ /* select a frame size that will end on a byte boundary and have a size of
+ approximately 1024 bytes */
+ if (avctx->codec->encode)
+ avctx->frame_size = ((int[]){ 4096, 2736, 2048, 1640 })[index];
+
return 0;
}
@@ -350,10 +355,11 @@ static int g726_encode_frame(AVCodecContext *avctx,
G726Context *c = avctx->priv_data;
const short *samples = data;
PutBitContext pb;
+ int i;
init_put_bits(&pb, dst, 1024*1024);
- for (; buf_size; buf_size--)
+ for (i = 0; i < avctx->frame_size; i++)
put_bits(&pb, c->code_size, g726_encode(c, *samples++));
flush_put_bits(&pb);
@@ -394,6 +400,7 @@ AVCodec adpcm_g726_encoder = {
g726_encode_frame,
g726_close,
NULL,
+ .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
.sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
};