diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2010-09-11 19:52:09 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2010-09-11 19:52:09 +0000 |
commit | c7d89948a3b74bf813afccc346a1a1463a28f34d (patch) | |
tree | 4613230846f6404cfdd11fd82e0e866c2b52c865 | |
parent | 680861ca73eeaf5ca93db3d87b76fa527acb4421 (diff) | |
download | ffmpeg-c7d89948a3b74bf813afccc346a1a1463a28f34d.tar.gz |
Set a constant frame size for encoding G.726 audio.
Originally committed as revision 25107 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/g726.c | 9 | ||||
-rw-r--r-- | tests/ref/acodec/g726 | 8 |
2 files changed, 12 insertions, 5 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"), }; diff --git a/tests/ref/acodec/g726 b/tests/ref/acodec/g726 index e0399bf23f..d2dbe5048c 100644 --- a/tests/ref/acodec/g726 +++ b/tests/ref/acodec/g726 @@ -1,4 +1,4 @@ -5d8cce28f83dd33c3c7eaf43a5db5294 *./tests/data/acodec/g726.wav -24082 ./tests/data/acodec/g726.wav -4f1ba1af75dee64625a1c852e6cd01d3 *./tests/data/g726.acodec.out.wav -stddev: 8504.69 PSNR: 17.74 MAXDIFF:31645 bytes: 96104/ 1058400 +fd090ddf05cc3401cc75c4a5ace1d05a *./tests/data/acodec/g726.wav +24052 ./tests/data/acodec/g726.wav +74abea06027375111eeac1b2f8c7d3af *./tests/data/g726.acodec.out.wav +stddev: 8554.55 PSNR: 17.69 MAXDIFF:29353 bytes: 95984/ 1058400 |