changeset 5070:11e86c7bdc25 libavformat

Only set CODEC_ID_PROBE when a packet from a stream having a PES header is read.
author bcoudurier
date Thu, 25 Jun 2009 19:01:16 +0000
parents 9fd4808c3916
children b2aa396484d4
files mpegts.c
diffstat 1 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mpegts.c	Thu Jun 25 18:48:57 2009 +0000
+++ b/mpegts.c	Thu Jun 25 19:01:16 2009 +0000
@@ -553,7 +553,7 @@
     av_set_pts_info(st, 33, 1, 90000);
     st->priv_data = pes;
     st->codec->codec_type = CODEC_TYPE_DATA;
-    st->codec->codec_id   = CODEC_ID_PROBE;
+    st->codec->codec_id   = CODEC_ID_NONE;
     st->need_parsing = AVSTREAM_PARSE_FULL;
     pes->st = st;
 
@@ -564,13 +564,13 @@
 
     mpegts_find_stream_type(st, pes->stream_type, ISO_types);
     if (prog_reg_desc == AV_RL32("HDMV") &&
-        st->codec->codec_id == CODEC_ID_PROBE)
+        st->codec->codec_id == CODEC_ID_NONE)
         mpegts_find_stream_type(st, pes->stream_type, HDMV_types);
-    if (st->codec->codec_id == CODEC_ID_PROBE)
+    if (st->codec->codec_id == CODEC_ID_NONE)
         mpegts_find_stream_type(st, pes->stream_type, MISC_types);
 
     /* stream was not present in PMT, guess based on PES start code */
-    if (st->codec->codec_id == CODEC_ID_PROBE) {
+    if (st->codec->codec_id == CODEC_ID_NONE) {
         if (code >= 0x1c0 && code <= 0x1df) {
             st->codec->codec_type = CODEC_TYPE_AUDIO;
             st->codec->codec_id = CODEC_ID_MP2;
@@ -687,7 +687,7 @@
             dprintf(ts->stream, "tag: 0x%02x len=%d\n",
                    desc_tag, desc_len);
 
-            if (st->codec->codec_id == CODEC_ID_PROBE &&
+            if (st->codec->codec_id == CODEC_ID_NONE &&
                 stream_type == STREAM_TYPE_PRIVATE_DATA)
                 mpegts_find_stream_type(st, desc_tag, DESC_types);
 
@@ -713,7 +713,7 @@
             case 0x05: /* registration descriptor */
                 st->codec->codec_tag = bytestream_get_le32(&p);
                 dprintf(ts->stream, "reg_desc=%.4s\n", (char*)&st->codec->codec_tag);
-                if (st->codec->codec_id == CODEC_ID_PROBE &&
+                if (st->codec->codec_id == CODEC_ID_NONE &&
                     stream_type == STREAM_TYPE_PRIVATE_DATA)
                     mpegts_find_stream_type(st, st->codec->codec_tag, REGD_types);
                 break;
@@ -955,6 +955,11 @@
                         code != 0x1ff && code != 0x1f2 && /* program_stream_directory, DSMCC_stream */
                         code != 0x1f8) {                  /* ITU-T Rec. H.222.1 type E stream */
                         pes->state = MPEGTS_PESHEADER;
+                        if (pes->st->codec->codec_id == CODEC_ID_NONE) {
+                            dprintf(pes->stream, "pid=%x stream_type=%x probing\n",
+                                    pes->pid, pes->stream_type);
+                            pes->st->codec->codec_id = CODEC_ID_PROBE;
+                        }
                     } else {
                         pes->state = MPEGTS_PAYLOAD;
                         pes->data_index = 0;