]> git.sesse.net Git - vlc/blobdiff - src/input/input.c
Input-II now correctly handles private stream 1 (AC3, DVDSPU).
[vlc] / src / input / input.c
index 8c62b4872a7b349dc92b3799d54ee8f118ae390e..517aaddcba6ad61029d811cacf0a8854f0720e49 100644 (file)
@@ -4,6 +4,7 @@
  * decoders.
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
+ * $Id: input.c,v 1.59 2000/12/19 19:08:51 massiot Exp $
  *
  * Authors: 
  *
 #include <string.h>
 #include <errno.h>
 
+#ifdef STATS
+#   include <sys/times.h>
+#endif
+
 #include "config.h"
 #include "common.h"
 #include "threads.h"
@@ -293,6 +298,16 @@ static void EndThread( input_thread_t * p_input )
     pi_status = p_input->pi_status;
     *pi_status = THREAD_END;
 
+#ifdef STATS
+    {
+        struct tms cpu_usage;
+        times( &cpu_usage );
+
+        intf_Msg("input stats: cpu usage (user: %d, system: %d)\n",
+                 cpu_usage.tms_utime, cpu_usage.tms_stime);
+    }
+#endif
+
     /* Destroy all decoder threads */
     for( i_es_loop = 0;
          (i_es_loop < INPUT_MAX_ES)
@@ -338,48 +353,63 @@ static void FileOpen( input_thread_t * p_input )
 
 #define p_config    p_input->p_config
 
-    if( stat( p_config->p_source, &stat_info ) == (-1) )
-    {
-        intf_ErrMsg("Cannot stat() file %s (%s)", p_config->p_source,
-                    strerror(errno));
-        p_input->b_error = 1;
-        return;
-    }
-
-    vlc_mutex_lock( &p_input->stream.stream_lock );
-
-    /* If we are here we can control the pace... */
-    p_input->stream.b_pace_control = 1;
-
-    if( S_ISREG(stat_info.st_mode) || S_ISCHR(stat_info.st_mode)
-         || S_ISBLK(stat_info.st_mode) )
-    {
-        p_input->stream.b_seekable = 1;
-        p_input->stream.i_size = stat_info.st_size;
-    }
-    else if( S_ISFIFO(stat_info.st_mode) || S_ISSOCK(stat_info.st_mode) )
+    if( !strncmp( p_config->p_source, "-", 1 ) )
     {
+        /* stdin */
+        p_input->i_handle = 0;
+        
+        vlc_mutex_lock( &p_input->stream.stream_lock );
+        p_input->stream.b_pace_control = 1;
         p_input->stream.b_seekable = 0;
         p_input->stream.i_size = 0;
+        p_input->stream.i_tell = 0;
+        vlc_mutex_unlock( &p_input->stream.stream_lock );
     }
     else
     {
-        vlc_mutex_unlock( &p_input->stream.stream_lock );
-        intf_ErrMsg("Unknown file type");
-        p_input->b_error = 1;
-        return;
-    }
+        if( stat( p_config->p_source, &stat_info ) == (-1) )
+        {
+            intf_ErrMsg("Cannot stat() file %s (%s)", p_config->p_source,
+                        strerror(errno));
+            p_input->b_error = 1;
+            return;
+        }
 
-    p_input->stream.i_tell = 0;
-    vlc_mutex_unlock( &p_input->stream.stream_lock );
+        vlc_mutex_lock( &p_input->stream.stream_lock );
 
-    intf_Msg( "Opening file %s", p_config->p_source );
-    if( (p_input->i_handle = open( p_config->p_source,
-                                   /*O_NONBLOCK | O_LARGEFILE*/0 )) == (-1) )
-    {
-        intf_ErrMsg("Cannot open file (%s)", strerror(errno));
-        p_input->b_error = 1;
-        return;
+        /* If we are here we can control the pace... */
+        p_input->stream.b_pace_control = 1;
+
+        if( S_ISREG(stat_info.st_mode) || S_ISCHR(stat_info.st_mode)
+             || S_ISBLK(stat_info.st_mode) )
+        {
+            p_input->stream.b_seekable = 1;
+            p_input->stream.i_size = stat_info.st_size;
+        }
+        else if( S_ISFIFO(stat_info.st_mode) || S_ISSOCK(stat_info.st_mode) )
+        {
+            p_input->stream.b_seekable = 0;
+            p_input->stream.i_size = 0;
+        }
+        else
+        {
+            vlc_mutex_unlock( &p_input->stream.stream_lock );
+            intf_ErrMsg("Unknown file type");
+            p_input->b_error = 1;
+            return;
+        }
+
+        p_input->stream.i_tell = 0;
+        vlc_mutex_unlock( &p_input->stream.stream_lock );
+
+        intf_Msg( "Opening file %s", p_config->p_source );
+        if( (p_input->i_handle = open( p_config->p_source,
+                                       /*O_NONBLOCK | O_LARGEFILE*/0 )) == (-1) )
+        {
+            intf_ErrMsg("Cannot open file (%s)", strerror(errno));
+            p_input->b_error = 1;
+            return;
+        }
     }
 
 #undef p_config