Here is a new version, that doesn't touch the way ffmpeg behaves
without further user actions:

I added a new flag to AVFormatContext, that activates the check for
private streams, when set. It can be used like this:

    AVFormatContext * formatContext = avformat_alloc_context();
    formatContext->flags |= AVFMT_FLAG_MPEGTS_RECOGNIZE_PRIVATE_STREAMS;
    avformat_open_input(&formatContext, fileName, NULL, NULL);

---
 libavformat/avformat.h |  1 +
 libavformat/mpegts.c   | 10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 719c23b..f5dd3a8 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -1394,6 +1394,7 @@ typedef struct AVFormatContext {
 #define AVFMT_FLAG_PRIV_OPT    0x20000 ///< Enable use of private options by 
delaying codec open (this could be made default once all code is converted)
 #define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep 
it separate.
 #define AVFMT_FLAG_FAST_SEEK   0x80000 ///< Enable fast, but inaccurate seeks 
for some formats
+#define AVFMT_FLAG_MPEGTS_RECOGNIZE_PRIVATE_STREAMS 0x100000 ///< In MPEG-TS 
files, private streams will be recognized as such and not probed for encoded 
data
 
     /**
      * @deprecated deprecated in favor of probesize2
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index aeb2335..2f4ae20 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -705,6 +705,11 @@ static const StreamType ISO_types[] = {
     { 0 },
 };
 
+static const StreamType ISO_type_private_stream[] = {
+    { 0x06, AVMEDIA_TYPE_DATA,  AV_CODEC_ID_BIN_DATA   },
+    { 0 },
+};
+
 static const StreamType HDMV_types[] = {
     { 0x80, AVMEDIA_TYPE_AUDIO,    AV_CODEC_ID_PCM_BLURAY        },
     { 0x81, AVMEDIA_TYPE_AUDIO,    AV_CODEC_ID_AC3               },
@@ -800,6 +805,11 @@ static int mpegts_set_stream_info(AVStream *st, PESContext 
*pes,
     st->codec->codec_tag = pes->stream_type;
 
     mpegts_find_stream_type(st, pes->stream_type, ISO_types);
+    if (st->codec->codec_id == AV_CODEC_ID_NONE &&
+        (pes->stream->flags & AVFMT_FLAG_MPEGTS_RECOGNIZE_PRIVATE_STREAMS))
+    {
+        mpegts_find_stream_type(st, pes->stream_type, ISO_type_private_stream);
+    }
     if ((prog_reg_desc == AV_RL32("HDMV") ||
          prog_reg_desc == AV_RL32("HDPR")) &&
         st->codec->codec_id == AV_CODEC_ID_NONE) {
-- 
1.9.1

Attachment: signature.asc
Description: PGP signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to