aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-06-30 19:47:00 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-06-30 20:16:39 +0200
commit5968a076222ab892b3a657e51f14969e57d92646 (patch)
tree0f5d955050e5dfbd53a44729abf9611e05d30e0d
parent0755033f8af774cea34566adec455fbafd9f66bc (diff)
downloadffmpeg-5968a076222ab892b3a657e51f14969e57d92646.tar.gz
wmaenc: rewrite 2nd stage quantization code
this is faster and more correct Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/wmaenc.c7
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);