|
|
|
@@ -353,7 +353,8 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx) |
|
|
|
if (!s->is_mpeg2 && |
|
|
|
(st->codecpar->codec_id == AV_CODEC_ID_AC3 || |
|
|
|
st->codecpar->codec_id == AV_CODEC_ID_DTS || |
|
|
|
st->codecpar->codec_id == AV_CODEC_ID_PCM_S16BE)) |
|
|
|
st->codecpar->codec_id == AV_CODEC_ID_PCM_S16BE || |
|
|
|
st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD)) |
|
|
|
av_log(ctx, AV_LOG_WARNING, |
|
|
|
"%s in MPEG-1 system streams is not widely supported, " |
|
|
|
"consider using the vob or the dvd muxer " |
|
|
|
@@ -363,7 +364,12 @@ 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) { |
|
|
|
} 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; |
|
|
|
} |
|
|
|
stream->id = lpcm_id++; |
|
|
|
for (j = 0; j < 4; j++) { |
|
|
|
if (lpcm_freq_tab[j] == st->codecpar->sample_rate) |
|
|
|
@@ -1150,6 +1156,19 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
pkt_desc->pts = pts; |
|
|
|
pkt_desc->dts = dts; |
|
|
|
|
|
|
|
if (st->codecpar->codec_id == AV_CODEC_ID_PCM_DVD) { |
|
|
|
if (size < 3) { |
|
|
|
av_log(ctx, AV_LOG_ERROR, "Invalid packet size %d\n", size); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
|
|
|
|
/* Skip first 3 bytes of packet data, which comprise PCM header |
|
|
|
and will be written fresh by this muxer. */ |
|
|
|
buf += 3; |
|
|
|
size -= 3; |
|
|
|
} |
|
|
|
|
|
|
|
pkt_desc->unwritten_size = |
|
|
|
pkt_desc->size = size; |
|
|
|
if (!stream->predecode_packet) |
|
|
|
|