[FFmpeg-devel] [PATCH 3/4] avformat/mpegenc - accept PCM_DVD streams
Michael Niedermayer
michael at niedermayer.cc
Sat Feb 3 00:32:55 EET 2018
On Thu, Feb 01, 2018 at 07:52:55PM +0530, Gyan Doshi wrote:
> On 1/29/2018 6:53 PM, Gyan Doshi wrote:
> >
> >On 1/29/2018 3:47 PM, Carl Eugen Hoyos wrote:
> >
> >>How did you test this patch?
> >
> >By remuxing with patched ffmpeg and then checking with ffprobe, but not
> >ffplay!
> ...
> >Sorry, I'll rework and submit.
>
> Revised and tested patch attached.
> mpegenc.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
> 21908814c802dffad710828d1e5ec27168586636 v2-0001-avformat-mpegenc-accept-PCM_DVD-streams.patch
> From 78757309bbfbc9d9e48aabd6babc9529f83d5950 Mon Sep 17 00:00:00 2001
> From: Gyan Doshi <gyandoshi at gmail.com>
> Date: Thu, 1 Feb 2018 19:12:03 +0530
> Subject: [PATCH v2] avformat/mpegenc - accept PCM_DVD streams
>
> PCM_S16BE stream packets in MPEG-PS have a 3-byte header
> and recognized as PCM_DVD by the demuxer which prevents
> their proper remuxing in MPEG-1/2 PS.
> ---
> libavformat/mpegenc.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
> index c77c3dfe41..598df662f4 100644
> --- a/libavformat/mpegenc.c
> +++ b/libavformat/mpegenc.c
> @@ -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,10 @@ 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->codec_id == AV_CODEC_ID_PCM_DVD)
> + av_log(ctx, AV_LOG_WARNING, "Only 16-bit LPCM streams are supported.\n");
> stream->id = lpcm_id++;
> for (j = 0; j < 4; j++) {
> if (lpcm_freq_tab[j] == st->codecpar->sample_rate)
> @@ -1150,8 +1154,17 @@ 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) {
> + /* Skip first 3 bytes of packet data, which comprise PCM header
> + and will be written fresh by this muxer. */
> + buf += 3;
> + size -= 3;
Can this be reached with size < 3 ?
if so it would probably do something bad
> + }
> +
> pkt_desc->unwritten_size =
> pkt_desc->size = size;
> +
> if (!stream->predecode_packet)
> stream->predecode_packet = pkt_desc;
> stream->next_packet = &pkt_desc->next;
> --
> 2.11.1.windows.1
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Its not that you shouldnt use gotos but rather that you should write
readable code and code with gotos often but not always is less readable
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180202/d14ab15c/attachment.sig>
More information about the ffmpeg-devel
mailing list