Mercurial > libavcodec.hg
comparison flacdec.c @ 9244:cbf65173eed3 libavcodec
flacdec: allow sample rate to change mid-stream, but log a warning
message when it does
author | jbr |
---|---|
date | Sun, 22 Mar 2009 22:38:06 +0000 |
parents | 4f827ca90571 |
children | f8973e93809a |
comparison
equal
deleted
inserted
replaced
9243:c09443000c4b | 9244:cbf65173eed3 |
---|---|
561 s->max_blocksize); | 561 s->max_blocksize); |
562 return -1; | 562 return -1; |
563 } | 563 } |
564 | 564 |
565 /* sample rate */ | 565 /* sample rate */ |
566 if (sr_code == 0) { | 566 if (sr_code < 12) { |
567 samplerate= s->samplerate; | |
568 } else if (sr_code < 12) { | |
569 samplerate = ff_flac_sample_rate_table[sr_code]; | 567 samplerate = ff_flac_sample_rate_table[sr_code]; |
570 } else if (sr_code == 12) { | 568 } else if (sr_code == 12) { |
571 samplerate = get_bits(gb, 8) * 1000; | 569 samplerate = get_bits(gb, 8) * 1000; |
572 } else if (sr_code == 13) { | 570 } else if (sr_code == 13) { |
573 samplerate = get_bits(gb, 16); | 571 samplerate = get_bits(gb, 16); |
576 } else { | 574 } else { |
577 av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", | 575 av_log(s->avctx, AV_LOG_ERROR, "illegal sample rate code %d\n", |
578 sr_code); | 576 sr_code); |
579 return -1; | 577 return -1; |
580 } | 578 } |
579 if (samplerate == 0) { | |
580 samplerate = s->samplerate; | |
581 } else if (samplerate != s->samplerate) { | |
582 av_log(s->avctx, AV_LOG_WARNING, "sample rate changed from %d to %d\n", | |
583 s->samplerate, samplerate); | |
584 } | |
581 | 585 |
582 /* header CRC-8 check */ | 586 /* header CRC-8 check */ |
583 skip_bits(gb, 8); | 587 skip_bits(gb, 8); |
584 if (av_crc(av_crc_get_table(AV_CRC_8_ATM), 0, gb->buffer, | 588 if (av_crc(av_crc_get_table(AV_CRC_8_ATM), 0, gb->buffer, |
585 get_bits_count(gb)/8)) { | 589 get_bits_count(gb)/8)) { |
586 av_log(s->avctx, AV_LOG_ERROR, "header crc mismatch\n"); | 590 av_log(s->avctx, AV_LOG_ERROR, "header crc mismatch\n"); |
587 return -1; | 591 return -1; |
588 } | 592 } |
589 | 593 |
590 s->blocksize = blocksize; | 594 s->blocksize = blocksize; |
591 s->samplerate = samplerate; | 595 s->samplerate = s->avctx->sample_rate = samplerate; |
592 s->bps = bps; | 596 s->bps = bps; |
593 s->ch_mode = ch_mode; | 597 s->ch_mode = ch_mode; |
594 | 598 |
595 // dump_headers(s->avctx, (FLACStreaminfo *)s); | 599 // dump_headers(s->avctx, (FLACStreaminfo *)s); |
596 | 600 |