|
|
@ -504,11 +504,6 @@ static int decode_frame(FLACContext *s) |
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "invalid channel mode: %d\n", ch_mode); |
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "invalid channel mode: %d\n", ch_mode); |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
if (channels != s->channels) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "switching channel layout mid-stream " |
|
|
|
|
|
|
|
"is not supported\n"); |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* bits per sample */ |
|
|
|
/* bits per sample */ |
|
|
|
bps_code = get_bits(gb, 3); |
|
|
|
bps_code = get_bits(gb, 3); |
|
|
@ -518,20 +513,6 @@ static int decode_frame(FLACContext *s) |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
bps = sample_size_table[bps_code]; |
|
|
|
bps = sample_size_table[bps_code]; |
|
|
|
if (bps && bps != s->bps) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not " |
|
|
|
|
|
|
|
"supported\n"); |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (s->bps > 16) { |
|
|
|
|
|
|
|
s->avctx->sample_fmt = SAMPLE_FMT_S32; |
|
|
|
|
|
|
|
s->sample_shift = 32 - s->bps; |
|
|
|
|
|
|
|
s->is32 = 1; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
s->avctx->sample_fmt = SAMPLE_FMT_S16; |
|
|
|
|
|
|
|
s->sample_shift = 16 - s->bps; |
|
|
|
|
|
|
|
s->is32 = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* reserved bit */ |
|
|
|
/* reserved bit */ |
|
|
|
if (get_bits1(gb)) { |
|
|
|
if (get_bits1(gb)) { |
|
|
@ -556,11 +537,6 @@ static int decode_frame(FLACContext *s) |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
blocksize = ff_flac_blocksize_table[bs_code]; |
|
|
|
blocksize = ff_flac_blocksize_table[bs_code]; |
|
|
|
} |
|
|
|
} |
|
|
|
if (blocksize > s->max_blocksize) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", blocksize, |
|
|
|
|
|
|
|
s->max_blocksize); |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* sample rate */ |
|
|
|
/* sample rate */ |
|
|
|
if (sr_code < 12) { |
|
|
|
if (sr_code < 12) { |
|
|
@ -576,12 +552,6 @@ static int decode_frame(FLACContext *s) |
|
|
|
sr_code); |
|
|
|
sr_code); |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
if (samplerate == 0) { |
|
|
|
|
|
|
|
samplerate = s->samplerate; |
|
|
|
|
|
|
|
} else if (samplerate != s->samplerate) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_WARNING, "sample rate changed from %d to %d\n", |
|
|
|
|
|
|
|
s->samplerate, samplerate); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* header CRC-8 check */ |
|
|
|
/* header CRC-8 check */ |
|
|
|
skip_bits(gb, 8); |
|
|
|
skip_bits(gb, 8); |
|
|
@ -591,10 +561,42 @@ static int decode_frame(FLACContext *s) |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (channels != s->channels) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "switching channel layout mid-stream " |
|
|
|
|
|
|
|
"is not supported\n"); |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
s->ch_mode = ch_mode; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bps && bps != s->bps) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not " |
|
|
|
|
|
|
|
"supported\n"); |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (s->bps > 16) { |
|
|
|
|
|
|
|
s->avctx->sample_fmt = SAMPLE_FMT_S32; |
|
|
|
|
|
|
|
s->sample_shift = 32 - s->bps; |
|
|
|
|
|
|
|
s->is32 = 1; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
s->avctx->sample_fmt = SAMPLE_FMT_S16; |
|
|
|
|
|
|
|
s->sample_shift = 16 - s->bps; |
|
|
|
|
|
|
|
s->is32 = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (blocksize > s->max_blocksize) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", blocksize, |
|
|
|
|
|
|
|
s->max_blocksize); |
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
} |
|
|
|
s->blocksize = blocksize; |
|
|
|
s->blocksize = blocksize; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (samplerate == 0) { |
|
|
|
|
|
|
|
samplerate = s->samplerate; |
|
|
|
|
|
|
|
} else if (samplerate != s->samplerate) { |
|
|
|
|
|
|
|
av_log(s->avctx, AV_LOG_WARNING, "sample rate changed from %d to %d\n", |
|
|
|
|
|
|
|
s->samplerate, samplerate); |
|
|
|
|
|
|
|
} |
|
|
|
s->samplerate = s->avctx->sample_rate = samplerate; |
|
|
|
s->samplerate = s->avctx->sample_rate = samplerate; |
|
|
|
s->bps = bps; |
|
|
|
|
|
|
|
s->ch_mode = ch_mode; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// dump_headers(s->avctx, (FLACStreaminfo *)s);
|
|
|
|
// dump_headers(s->avctx, (FLACStreaminfo *)s);
|
|
|
|
|
|
|
|
|
|
|
|