]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
try to filter _all_ PATs if no SDT could be found patch by (<gbazin at altern dot...
authormichaelni <michaelni@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 28 Jun 2003 23:44:09 +0000 (23:44 +0000)
committermichaelni <michaelni@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 28 Jun 2003 23:44:09 +0000 (23:44 +0000)
+ mpegtsenc.c compile fix by me

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@1995 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavformat/mpegts.c
libavformat/mpegts.h
libavformat/mpegtsenc.c

index 8e2898398b8a4794e8782a59f1938f92be4b5acd..ab621dbb817914f9e04756fa5db483af506d020f 100644 (file)
@@ -348,7 +348,7 @@ static void pmt_cb(void *opaque, const uint8_t *section, int section_len)
 #ifdef DEBUG_SI
     printf("sid=0x%x sec_num=%d/%d\n", h->id, h->sec_num, h->last_sec_num);
 #endif
-    if (h->tid != PMT_TID || h->id != ts->req_sid)
+    if (h->tid != PMT_TID || (ts->req_sid >= 0 && h->id != ts->req_sid) )
         return;
 
     pcr_pid = get16(&p, p_end) & 0x1fff;
@@ -383,8 +383,10 @@ static void pmt_cb(void *opaque, const uint8_t *section, int section_len)
 
         /* now create ffmpeg stream */
         switch(stream_type) {
-        case STREAM_TYPE_AUDIO:
-        case STREAM_TYPE_VIDEO:
+        case STREAM_TYPE_AUDIO_MPEG1:
+        case STREAM_TYPE_AUDIO_MPEG2:
+        case STREAM_TYPE_VIDEO_MPEG1:
+        case STREAM_TYPE_VIDEO_MPEG2:
             add_pes_stream(ts->stream, pid);
             break;
         default:
@@ -429,7 +431,7 @@ static void pat_cb(void *opaque, const uint8_t *section, int section_len)
         if (sid == 0x0000) {
             /* NIT info */
         } else {
-            if (ts->req_sid == sid) {
+            if (ts->req_sid == sid || ts->req_sid < 0) {
                 ts->pmt_filter = mpegts_open_section_filter(ts, pmt_pid, 
                                                             pmt_cb, ts, 1);
                 goto found;
@@ -861,28 +863,32 @@ static int mpegts_read_header(AVFormatContext *s,
     ts->auto_guess = 0;
     
     if (!ts->auto_guess) {
+        int sid = -1;
+        ts->set_service_ret = -1;
 
         /* first do a scaning to get all the services */
         url_fseek(pb, pos, SEEK_SET);
         mpegts_scan_sdt(ts);
         
         handle_packets(s, MAX_SCAN_PACKETS);
-        
-        /* if no service found, no need to do anything */
-        if (ts->nb_services <= 0)
-            return -1;
-        
-        /* now find the info for the first service */
-        
-        url_fseek(pb, pos, SEEK_SET);
-        service = ts->services[0];
+
+        if (ts->nb_services > 0)
+        {
+            /* tune to first service found */
+            service = ts->services[0];
+            sid = service->sid;
 #ifdef DEBUG_SI
-        printf("tuning to '%s'\n", service->name);
+            printf("tuning to '%s'\n", service->name);
 #endif
-        /* tune to first service found */
+        }
+
+        /* now find the info for the first service if we found any,
+           otherwise try to filter all PATs */
+
+        url_fseek(pb, pos, SEEK_SET);
         ts->stream = s;
-        mpegts_set_service(ts, service->sid, set_service_cb, ts);
-        
+        mpegts_set_service(ts, sid, set_service_cb, ts);
+
         handle_packets(s, MAX_SCAN_PACKETS);
 
         /* if could not find service, exit */
index df0b6de21660a12d8ddad8155c58ac3068501f9a..8296ccfb9884205157c861af54054abfc0e7205d 100644 (file)
 #define PMT_TID   0x02 
 #define SDT_TID   0x42
 
-#define STREAM_TYPE_VIDEO           0x02
-#define STREAM_TYPE_AUDIO           0x03
+#define STREAM_TYPE_VIDEO_MPEG1     0x01
+#define STREAM_TYPE_VIDEO_MPEG2     0x02
+#define STREAM_TYPE_AUDIO_MPEG1     0x03
+#define STREAM_TYPE_AUDIO_MPEG2     0x04
 #define STREAM_TYPE_PRIVATE_SECTION 0x05
 #define STREAM_TYPE_PRIVATE_DATA    0x06
 
index 079f4c724cd7c7fc9a0a599cf830c6876362ecc5..60520de5406faa4887caf0863209a788fdc2be03 100644 (file)
@@ -259,10 +259,10 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
         MpegTSWriteStream *ts_st = st->priv_data;
         switch(st->codec.codec_type) {
         case CODEC_TYPE_VIDEO:
-            stream_type = STREAM_TYPE_VIDEO;
+            stream_type = STREAM_TYPE_VIDEO_MPEG2; //XXX/FIXME is this (and the define) correct?
             break;
         case CODEC_TYPE_AUDIO:
-            stream_type = STREAM_TYPE_AUDIO;
+            stream_type = STREAM_TYPE_AUDIO_MPEG1;
             break;
         default:
             stream_type = STREAM_TYPE_PRIVATE_DATA;