Stop parsing in read_header only after finding pmt, and
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Wed, 29 Jul 2009 02:17:08 +0000 (02:17 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Wed, 29 Jul 2009 02:17:08 +0000 (02:17 +0000)
do not close pat filter so further pmt can be parsed.
Fix issue #1294.

Originally committed as revision 19530 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/mpegts.c

index 0d38e6f..f6dff78 100644 (file)
@@ -640,6 +640,11 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
     p += program_info_length;
     if (p >= p_end)
         return;
+
+    // stop parsing after pmt, we found header
+    if (!ts->stream->nb_streams)
+        ts->stop_parse = 1;
+
     for(;;) {
         st = 0;
         stream_type = get8(&p, p_end);
@@ -725,7 +730,6 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
         p = desc_list_end;
     }
     /* all parameters are there */
-    ts->stop_parse++;
     mpegts_close_filter(ts, filter);
 }
 
@@ -762,17 +766,12 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
             /* NIT info */
         } else {
             av_new_program(ts->stream, sid);
-            ts->stop_parse--;
             mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);
             add_pat_entry(ts, sid);
             add_pid_to_pmt(ts, sid, 0); //add pat pid to program
             add_pid_to_pmt(ts, sid, pmt_pid);
         }
     }
-    /* not found */
-    ts->stop_parse++;
-
-    mpegts_close_filter(ts, filter);
 }
 
 static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)