]> git.sesse.net Git - vlc/commitdiff
demux: ts: allow to skip services
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 19 Jan 2015 20:10:39 +0000 (21:10 +0100)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 19 Jan 2015 20:39:02 +0000 (21:39 +0100)
modules/demux/ts.c

index 3233f26acae3f66918659397aa87abd0eee6c29b..a49f9b1d73497e007ce89ee9ad05a9f8af2374a3 100644 (file)
@@ -305,6 +305,11 @@ typedef struct
 
 } ts_pid_t;
 
+typedef struct
+{
+    int i_service;
+} vdr_info_t;
+
 struct demux_sys_t
 {
     stream_t   *stream;
@@ -378,6 +383,8 @@ struct demux_sys_t
         mtime_t     i_first_dts;
     } pcrfix;
 
+    vdr_info_t  vdr;
+
     /* */
     bool        b_start_record;
 };
@@ -607,6 +614,7 @@ static int Open( vlc_object_t *p_this )
     int          i_packet_size, i_packet_header_size = 0;
 
     ts_pid_t    *pat;
+    vdr_info_t   vdr = {0};
 
     /* Search first sync byte */
     i_packet_size = DetectPacketSize( p_demux, &i_packet_header_size );
@@ -632,6 +640,8 @@ static int Open( vlc_object_t *p_this )
     p_sys->i_dvb_start = 0;
     p_sys->i_dvb_length = 0;
 
+    p_sys->vdr = vdr;
+
     p_sys->arib.b25stream = NULL;
     p_sys->stream = p_demux->s;
 
@@ -3091,6 +3101,13 @@ static void SDTCallBack( demux_t *p_demux, dvbpsi_sdt_t *p_sdt )
                  p_srv->b_eit_present, p_srv->i_running_status,
                  p_srv->b_free_ca );
 
+        if( p_sys->vdr.i_service && p_srv->i_service_id != p_sys->vdr.i_service )
+        {
+            msg_Dbg( p_demux, "  * service id=%d skipped (not declared in vdr header)",
+                     p_sys->vdr.i_service );
+            continue;
+        }
+
         p_meta = vlc_meta_New();
         for( p_dr = p_srv->p_first_descriptor; p_dr; p_dr = p_dr->p_next )
         {