[FFmpeg-cvslog] wmaenc: rewrite 2nd stage quantization code

Michael Niedermayer git at videolan.org
Sat Jun 30 20:48:27 CEST 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Jun 30 19:47:00 2012 +0200| [5968a076222ab892b3a657e51f14969e57d92646] | committer: Michael Niedermayer

wmaenc: rewrite 2nd stage quantization code

this is faster and more correct

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5968a076222ab892b3a657e51f14969e57d92646
---

 libavcodec/wmaenc.c |    7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavcodec/wmaenc.c b/libavcodec/wmaenc.c
index 3e39df9..d3210d2 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);



More information about the ffmpeg-cvslog mailing list