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.
From 78757309bbfbc9d9e48aabd6babc9529f83d5950 Mon Sep 17 00:00:00 2001
From: Gyan Doshi <gyando...@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;
+    }
+
     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@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to