From 5968a076222ab892b3a657e51f14969e57d92646 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 30 Jun 2012 19:47:00 +0200 Subject: wmaenc: rewrite 2nd stage quantization code this is faster and more correct Signed-off-by: Michael Niedermayer --- libavcodec/wmaenc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'libavcodec/wmaenc.c') 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); -- cgit v1.2.1