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];