diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index 4c6fa67fb8..1389288b7f 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -364,12 +364,7 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) stream->id = ac3_id++; } else if (st->codecpar->codec_id == AV_CODEC_ID_DTS) { stream->id = dts_id++; - } else if (st->codecpar->codec_id == AV_CODEC_ID_PCM_S16BE || - st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) { - if (st->codecpar->bits_per_coded_sample != 16) { - av_log(ctx, AV_LOG_ERROR, "Only 16 bit LPCM streams can be muxed.\n"); - goto fail; - } + } else if (st->codecpar->codec_id == AV_CODEC_ID_PCM_S16BE) { stream->id = lpcm_id++; for (j = 0; j < 4; j++) { if (lpcm_freq_tab[j] == st->codecpar->sample_rate) @@ -392,6 +387,26 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) stream->lpcm_header[1] = (st->codecpar->channels - 1) | (j << 4); stream->lpcm_header[2] = 0x80; stream->lpcm_align = st->codecpar->channels * 2; + } else if (st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) { + int freq; + + switch (st->codecpar->sample_rate) { + case 48000: freq = 0; break; + case 96000: freq = 1; break; + case 44100: freq = 2; break; + case 32000: freq = 3; break; + default: + av_log(ctx, AV_LOG_ERROR, "Unsupported sample rate.\n"); + return AVERROR(EINVAL); + } + + stream->lpcm_header[0] = 0x0c; + stream->lpcm_header[1] = (freq << 4) | + (((st->codecpar->bits_per_coded_sample - 16) / 4) << 6) | + st->codecpar->channels - 1; + stream->lpcm_header[2] = 0x80; + stream->id = lpcm_id++; + stream->lpcm_align = st->codecpar->channels * st->codecpar->bits_per_coded_sample / 8; } else { stream->id = mpa_id++; } diff --git a/libavformat/version.h b/libavformat/version.h index 824b9e7cd6..30f2a84ddb 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -33,7 +33,7 @@ // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 58 #define LIBAVFORMAT_VERSION_MINOR 23 -#define LIBAVFORMAT_VERSION_MICRO 101 +#define LIBAVFORMAT_VERSION_MICRO 102 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \