# HG changeset patch # User bcoudurier # Date 1211336802 0 # Node ID 129d36178a10012642ea0bdb48c5a54ac1d46b23 # Parent b255db01458d55f1357b6f8b88c12375b9057467 support dvd pcm 20/24 bits, patch by Lars T¸«£uber, lars.taeuber gmx net diff -r b255db01458d -r 129d36178a10 mpeg.c --- a/mpeg.c Tue May 20 23:39:07 2008 +0000 +++ b/mpeg.c Wed May 21 02:26:42 2008 +0000 @@ -474,7 +474,8 @@ codec_id = CODEC_ID_DTS; } else if (startcode >= 0xa0 && startcode <= 0xaf) { type = CODEC_TYPE_AUDIO; - codec_id = CODEC_ID_PCM_S16BE; + /* 16 bit form will be handled as CODEC_ID_PCM_S16BE */ + codec_id = CODEC_ID_PCM_DVD; } else if (startcode >= 0xb0 && startcode <= 0xbf) { type = CODEC_TYPE_AUDIO; codec_id = CODEC_ID_MLP; @@ -519,7 +520,14 @@ freq = (b1 >> 4) & 3; st->codec->sample_rate = lpcm_freq_tab[freq]; st->codec->channels = 1 + (b1 & 7); - st->codec->bit_rate = st->codec->channels * st->codec->sample_rate * 2; + st->codec->bits_per_sample = 16 + ((b1 >> 6) & 3) * 4; + st->codec->bit_rate = st->codec->channels * + st->codec->sample_rate * + st->codec->bits_per_sample; + if (st->codec->bits_per_sample == 16) + st->codec->codec_id = CODEC_ID_PCM_S16BE; + else if (st->codec->bits_per_sample == 28) + return AVERROR(EINVAL); } av_new_packet(pkt, len); get_buffer(s->pb, pkt->data, pkt->size);