]> git.sesse.net Git - vlc/blobdiff - modules/demux/ts.c
Fixed AVI palette support.
[vlc] / modules / demux / ts.c
index a49ba41840dd10db9b59df803758c3de4a764981..9d2ef54ce44e3e634fe51a838f5fff297c54aade 100644 (file)
@@ -185,6 +185,14 @@ vlc_module_end();
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
+static const char *const ppsz_teletext_type[] = {
+ "",
+ N_("Teletext"),
+ N_("Teletext subtitles"),
+ N_("Teletext additional information"),
+ N_("Teletext programme schedule"),
+ N_("Teletext hearing impaired subtitles")
+};
 
 typedef struct
 {
@@ -370,6 +378,9 @@ struct demux_sys_t
 
     /* */
     bool        b_meta;
+
+    /* */
+    bool        b_start_record;
 };
 
 static int Demux    ( demux_t *p_demux );
@@ -642,6 +653,7 @@ static int Open( vlc_object_t *p_this )
     p_sys->b_udp_out = false;
     p_sys->i_ts_read = 50;
     p_sys->csa = NULL;
+    p_sys->b_start_record = false;
 
     /* Init PAT handler */
     pat = &p_sys->pid[0];
@@ -1091,6 +1103,13 @@ static int Demux( demux_t *p_demux )
             }
         }
 
+        if( p_sys->b_start_record )
+        {
+            /* Enable recording once synchronized */
+            stream_Control( p_demux->s, STREAM_SET_RECORD_STATE, true, "ts" );
+            p_sys->b_start_record = false;
+        }
+
         if( p_sys->b_udp_out )
         {
             memcpy( &p_sys->buffer[i_pkt * p_sys->i_packet_size],
@@ -1190,6 +1209,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
 {
     demux_sys_t *p_sys = p_demux->p_sys;
     double f, *pf;
+    bool b_bool, *pb_bool;
     int64_t i64;
     int64_t *pi64;
     int i_int;
@@ -1386,6 +1406,19 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
             return VLC_SUCCESS;
         }
 
+        case DEMUX_CAN_RECORD:
+            pb_bool = (bool*)va_arg( args, bool * );
+            *pb_bool = true;
+            return VLC_SUCCESS;
+
+        case DEMUX_SET_RECORD_STATE:
+            b_bool = (bool)va_arg( args, int );
+
+            if( !b_bool )
+                stream_Control( p_demux->s, STREAM_SET_RECORD_STATE, false );
+            p_sys->b_start_record = b_bool;
+            return VLC_SUCCESS;
+
         case DEMUX_GET_FPS:
         case DEMUX_SET_TIME:
         default:
@@ -3378,8 +3411,8 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
                         for( n = 0; n < sub->i_pages_number; n++ )
                         {
                             dvbpsi_teletextpage_t *p_page = &sub->p_pages[n];
-                            if( (p_page->i_teletext_type == 0x2)
-                                 || (p_page->i_teletext_type == 0x5) )
+                            if( p_page->i_teletext_type > 0x0 &&
+                                p_page->i_teletext_type < 0x6 )
                             {
                                 ts_es_t *p_es;
 
@@ -3415,36 +3448,21 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
                                             p_page->i_iso6392_language_code, 3 );
                                     p_es->fmt.psz_language[3] = 0;
                                 }
-                                switch( p_page->i_teletext_type )
-                                {
-                                case 0x2:
-                                    p_es->fmt.psz_description =
-                                        strdup(_("Teletext subtitles"));
-                                    msg_Dbg( p_demux,
-                                             "    * sub lan=%s page=%d%x",
-                                             p_es->fmt.psz_language,
-                                             p_page->i_teletext_magazine_number,
-                                             p_page->i_teletext_page_number );
-                                    break;
+                                p_es->fmt.psz_description = strdup(_(ppsz_teletext_type[p_page->i_teletext_type]));
 
-                                case 0x5:
-                                    p_es->fmt.psz_description =
-                                        strdup(_("Teletext hearing impaired subtitles"));
-                                    msg_Dbg( p_demux,
-                                             "    * hearing impaired lan=%s page=%d%x",
+                                msg_Dbg( p_demux,
+                                             "    * ttxt type=%s lan=%s page=%d%02x",
+                                             p_es->fmt.psz_description,
                                              p_es->fmt.psz_language,
                                              p_page->i_teletext_magazine_number,
                                              p_page->i_teletext_page_number );
-                                    break;
-                                default:
-                                    break;
-                                }
 
+                                /* Hack, FIXME This stores the initial page for this track,
+                                   so that it can be used by the telx and zvbi decoders. */
                                 p_es->fmt.subs.dvb.i_id =
                                     p_page->i_teletext_page_number;
-                                /* Hack, FIXME */
                                 p_es->fmt.subs.dvb.i_id |=
-                                ((int)p_page->i_teletext_magazine_number << 16);
+                                    ((int)p_page->i_teletext_magazine_number << 16);
 
                                 i++;
                             }