Mercurial > libavcodec.hg
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);