Mercurial > libavcodec.hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
10343:b1218e0b0f2b | 10344:2b8a327189cd |
---|---|
384 if (mant < 0) { | 384 if (mant < 0) { |
385 res |= (1 << 31); | 385 res |= (1 << 31); |
386 mant = -mant; | 386 mant = -mant; |
387 } | 387 } |
388 res |= mant | (exp << 21); | 388 res |= mant | (exp << 21); |
389 put_bits(pb, 32, res); | 389 put_bits32(pb, res); |
390 } | 390 } |
391 | 391 |
392 static void put_codebook_header(PutBitContext *pb, vorbis_enc_codebook *cb) | 392 static void put_codebook_header(PutBitContext *pb, vorbis_enc_codebook *cb) |
393 { | 393 { |
394 int i; | 394 int i; |
529 | 529 |
530 // identification header | 530 // identification header |
531 init_put_bits(&pb, p, buffer_len); | 531 init_put_bits(&pb, p, buffer_len); |
532 put_bits(&pb, 8, 1); //magic | 532 put_bits(&pb, 8, 1); //magic |
533 ff_put_string(&pb, "vorbis", 0); | 533 ff_put_string(&pb, "vorbis", 0); |
534 put_bits(&pb, 32, 0); // version | 534 put_bits32(&pb, 0); // version |
535 put_bits(&pb, 8, venc->channels); | 535 put_bits(&pb, 8, venc->channels); |
536 put_bits(&pb, 32, venc->sample_rate); | 536 put_bits32(&pb, venc->sample_rate); |
537 put_bits(&pb, 32, 0); // bitrate | 537 put_bits32(&pb, 0); // bitrate |
538 put_bits(&pb, 32, 0); // bitrate | 538 put_bits32(&pb, 0); // bitrate |
539 put_bits(&pb, 32, 0); // bitrate | 539 put_bits32(&pb, 0); // bitrate |
540 put_bits(&pb, 4, venc->log2_blocksize[0]); | 540 put_bits(&pb, 4, venc->log2_blocksize[0]); |
541 put_bits(&pb, 4, venc->log2_blocksize[1]); | 541 put_bits(&pb, 4, venc->log2_blocksize[1]); |
542 put_bits(&pb, 1, 1); // framing | 542 put_bits(&pb, 1, 1); // framing |
543 | 543 |
544 flush_put_bits(&pb); | 544 flush_put_bits(&pb); |
548 | 548 |
549 // comment header | 549 // comment header |
550 init_put_bits(&pb, p, buffer_len); | 550 init_put_bits(&pb, p, buffer_len); |
551 put_bits(&pb, 8, 3); //magic | 551 put_bits(&pb, 8, 3); //magic |
552 ff_put_string(&pb, "vorbis", 0); | 552 ff_put_string(&pb, "vorbis", 0); |
553 put_bits(&pb, 32, 0); // vendor length TODO | 553 put_bits32(&pb, 0); // vendor length TODO |
554 put_bits(&pb, 32, 0); // amount of comments | 554 put_bits32(&pb, 0); // amount of comments |
555 put_bits(&pb, 1, 1); // framing | 555 put_bits(&pb, 1, 1); // framing |
556 | 556 |
557 flush_put_bits(&pb); | 557 flush_put_bits(&pb); |
558 hlens[1] = put_bits_count(&pb) >> 3; | 558 hlens[1] = put_bits_count(&pb) >> 3; |
559 buffer_len -= hlens[1]; | 559 buffer_len -= hlens[1]; |