diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-06-30 19:47:00 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-06-30 20:16:39 +0200 |
commit | 5968a076222ab892b3a657e51f14969e57d92646 (patch) | |
tree | 0f5d955050e5dfbd53a44729abf9611e05d30e0d /libavcodec | |
parent | 0755033f8af774cea34566adec455fbafd9f66bc (diff) | |
download | ffmpeg-5968a076222ab892b3a657e51f14969e57d92646.tar.gz |
wmaenc: rewrite 2nd stage quantization code
this is faster and more correct
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/wmaenc.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libavcodec/wmaenc.c b/libavcodec/wmaenc.c index 3e39df9d8d..d3210d2066 100644 --- a/libavcodec/wmaenc.c +++ b/libavcodec/wmaenc.c @@ -352,7 +352,7 @@ static int encode_superframe(AVCodecContext *avctx, AVPacket *avpkt, { WMACodecContext *s = avctx->priv_data; const int16_t *samples = (const int16_t *)frame->data[0]; - int i, total_gain, ret; + int i, total_gain, ret, error; s->block_len_bits= s->frame_len_bits; //required by non variable block len s->block_len = 1 << s->block_len_bits; @@ -376,13 +376,14 @@ static int encode_superframe(AVCodecContext *avctx, AVPacket *avpkt, total_gain= 128; for(i=64; i; i>>=1){ - int error = encode_frame(s, s->coefs, avpkt->data, avpkt->size, + error = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain - i); if(error<=0) total_gain-= i; } - encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain); + while(total_gain <= 128 && error > 0) + error = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain++); av_assert0((put_bits_count(&s->pb) & 7) == 0); i= s->block_align - (put_bits_count(&s->pb)+7)/8; av_assert0(i>=0); |