diff vorbis_enc.c @ 10344:2b8a327189cd libavcodec

put_bits can only reliably write up to 31 bit bits, above it relies on undefined shift behaviour. Document this, fix the assert and add a put_bits32 to handle writing 32 bits and use that where necessary.
author reimar
date Thu, 01 Oct 2009 15:40:29 +0000
parents 5462710f17ee
children 84cca0a953c5
line wrap: on
line diff
--- a/vorbis_enc.c	Thu Oct 01 15:30:27 2009 +0000
+++ b/vorbis_enc.c	Thu Oct 01 15:40:29 2009 +0000
@@ -386,7 +386,7 @@
         mant = -mant;
     }
     res |= mant | (exp << 21);
-    put_bits(pb, 32, res);
+    put_bits32(pb, res);
 }
 
 static void put_codebook_header(PutBitContext *pb, vorbis_enc_codebook *cb)
@@ -531,12 +531,12 @@
     init_put_bits(&pb, p, buffer_len);
     put_bits(&pb, 8, 1); //magic
     ff_put_string(&pb, "vorbis", 0);
-    put_bits(&pb, 32, 0); // version
+    put_bits32(&pb, 0); // version
     put_bits(&pb,  8, venc->channels);
-    put_bits(&pb, 32, venc->sample_rate);
-    put_bits(&pb, 32, 0); // bitrate
-    put_bits(&pb, 32, 0); // bitrate
-    put_bits(&pb, 32, 0); // bitrate
+    put_bits32(&pb, venc->sample_rate);
+    put_bits32(&pb, 0); // bitrate
+    put_bits32(&pb, 0); // bitrate
+    put_bits32(&pb, 0); // bitrate
     put_bits(&pb,  4, venc->log2_blocksize[0]);
     put_bits(&pb,  4, venc->log2_blocksize[1]);
     put_bits(&pb,  1, 1); // framing
@@ -550,8 +550,8 @@
     init_put_bits(&pb, p, buffer_len);
     put_bits(&pb, 8, 3); //magic
     ff_put_string(&pb, "vorbis", 0);
-    put_bits(&pb, 32, 0); // vendor length TODO
-    put_bits(&pb, 32, 0); // amount of comments
+    put_bits32(&pb, 0); // vendor length TODO
+    put_bits32(&pb, 0); // amount of comments
     put_bits(&pb,  1, 1); // framing
 
     flush_put_bits(&pb);