]> git.sesse.net Git - vlc/commitdiff
* Added -a, -c and -s options. (-a doesn't work but I will let the people
authorChristophe Massiot <massiot@videolan.org>
Wed, 20 Dec 2000 17:49:41 +0000 (17:49 +0000)
committerChristophe Massiot <massiot@videolan.org>
Wed, 20 Dec 2000 17:49:41 +0000 (17:49 +0000)
who thought it would be cleaner to put config in environment variables
correct what's wrong in my code).

TODO
include/config.h.in
include/input_ext-intf.h
src/input/input_programs.c
src/input/mpeg_system.c
src/interface/interface.c
src/interface/main.c

diff --git a/TODO b/TODO
index b1f3bec63b70eca5766d25c49fbf8cc13e7835d4..187d8f0c43d22c54273399899d1e727bfa9d7431 100644 (file)
--- a/TODO
+++ b/TODO
@@ -70,7 +70,7 @@ Urgency: Important
 Description: Write input_programs.c
  We need a centralized manner of creating new programs, es, and
  spawning new decoders.
-Status: Todo
+Status: Done 20 Dec 2000 (Meuuh)
 
 Task: 0x40
 Difficulty: Medium
@@ -79,7 +79,7 @@ Description: Fix the PS plugin
  The PS plugin should be able to recover from packet loss, to
  read MPEG-1 .mpg files, and to pre-parse the stream (if possible)
  to build the ES table. Check what's wrong and fix it. Now.
-Status: Todo
+Status: Done
 
 Task: 0x3f
 Difficulty: Easy
@@ -89,7 +89,7 @@ Description: Enhance intf_*Msg
  warning/error:" and \n automatically. The new input already
  uses such a behaviour, so we must hurry. It might be necessary
  to modify all messages in all modules...
-Status: Todo
+Status: Todo 20 Dec 2000 (Meuuh)
 
 # end of input-II tasks, thanks for being with us
 
index caa7d5dc1e7ca68d390ad98986d0f884ff87b2c2..3ac0066d583b74608a167b36187ef824cd6f7e6c 100644 (file)
  * interface, and is in fact an interface limitation */
 #define INPUT_MAX_THREADS               10
 
-/* Maximum number of programs definitions in a TS stream */
-#define INPUT_MAX_PGRM                  10
-
 /* Maximum number of ES definitions in a TS stream */
-#define INPUT_MAX_ES                    10
-
-/* Maximum number of ES in a single program */
-#define INPUT_MAX_PROGRAM_ES            10
+#define INPUT_MAX_ES                    42
 
 /* Maximum number of selected ES in an input thread */
-#define INPUT_MAX_SELECTED_ES           10
+#define INPUT_MAX_SELECTED_ES           42
 
 /* Maximum size of a data packet (128 kB) */
 #define INPUT_MAX_PACKET_SIZE                  131072
 
-/* Maximum number of TS packets in the client at any time
- * INPUT_MAX_TS + 1 must be a power of 2, to optimize the %(INPUT_MAX_TS+1)
- * operation with a &INPUT_MAX_TS in the case of a fifo netlist.
- * It should be > number of fifos * FIFO_SIZE to avoid input deadlock. */
-#define INPUT_MAX_TS                    32767     /* INPUT_MAX_TS + 1 = 2^15 */
-
-/* Same thing with PES packets */
-#define INPUT_MAX_PES                   16383
-
-/* Maximum number of TS packets we read from the socket in one readv().
- * Since you can't put more than 7 TS packets in an Ethernet frame,
- * the maximum value is 7. This number should also limit the stream server,
- * otherwise any supplementary packet is lost. */
-#define INPUT_TS_READ_ONCE              7
-
-/* Use a LIFO or FIFO for TS netlist ? */
-#undef INPUT_LIFO_TS_NETLIST
-
-/* Use a LIFO or FIFO for PES netlist ? */
-#undef INPUT_LIFO_PES_NETLIST
-
 /* Maximum length of a hostname or source name */
 #define INPUT_MAX_SOURCE_LENGTH         100
 
index 67eb43c0d5075e37194dbb7d18e70852665483c7..c52932c7898eedcb549cbddcbaded6045d94e8c9 100644 (file)
@@ -4,7 +4,7 @@
  * control the pace of reading. 
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: input_ext-intf.h,v 1.4 2000/12/20 16:04:31 massiot Exp $
+ * $Id: input_ext-intf.h,v 1.5 2000/12/20 17:49:40 massiot Exp $
  *
  * Authors:
  *
  * Communication input -> interface
  */
 #define INPUT_MAX_PLUGINS   1
+/* FIXME ! */
+#define REQUESTED_MPEG         0
+#define REQUESTED_AC3          1
+#define REQUESTED_LPCM         2
+#define REQUESTED_NOAUDIO    255
 
 /*****************************************************************************
  * es_descriptor_t: elementary stream descriptor
index e228ea6c69d01ab59b17841235a0be10323b3c26..d27ccc530b917db7140943bc285f6197df4983a2 100644 (file)
@@ -2,7 +2,7 @@
  * input_programs.c: es_descriptor_t, pgrm_descriptor_t management
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: input_programs.c,v 1.5 2000/12/20 16:04:31 massiot Exp $
+ * $Id: input_programs.c,v 1.6 2000/12/20 17:49:40 massiot Exp $
  *
  * Authors:
  *
@@ -41,6 +41,8 @@
 #include "input_ext-dec.h"
 #include "input.h"
 
+#include "main.h"                                     /* --noaudio --novideo */
+
 /*
  * NOTICE : all of these functions expect you to have taken the lock on
  * p_input->stream.lock
@@ -88,6 +90,7 @@ pgrm_descriptor_t * input_AddProgram( input_thread_t * p_input,
     /* Init this entry */
     p_input->stream.pp_programs[i_pgrm_index]->i_number = i_pgrm_id;
     p_input->stream.pp_programs[i_pgrm_index]->b_is_ok = 0;
+    p_input->stream.pp_programs[i_pgrm_index]->i_version = 0;
 
     p_input->stream.pp_programs[i_pgrm_index]->i_es_number = 0;
     p_input->stream.pp_programs[i_pgrm_index]->pp_es = NULL;
@@ -431,20 +434,36 @@ int input_SelectES( input_thread_t * p_input, es_descriptor_t * p_es )
     {
     case MPEG1_AUDIO_ES:
     case MPEG2_AUDIO_ES:
-        p_es->thread_id = adec_CreateThread( GetAdecConfig( p_input, p_es ) );
+        if( p_main->b_audio )
+        {
+            p_es->thread_id = adec_CreateThread( GetAdecConfig( p_input,
+                                                                p_es ) );
+        }
         break;
 
     case MPEG1_VIDEO_ES:
     case MPEG2_VIDEO_ES:
-        p_es->thread_id = vpar_CreateThread( GetVdecConfig( p_input, p_es ) );
+        if( p_main->b_video )
+        {
+            p_es->thread_id = vpar_CreateThread( GetVdecConfig( p_input,
+                                                                p_es ) );
+        }
         break;
 
     case AC3_AUDIO_ES:
-        p_es->thread_id = ac3dec_CreateThread( GetAdecConfig( p_input, p_es ) );
+        if( p_main->b_audio )
+        {
+            p_es->thread_id = ac3dec_CreateThread( GetAdecConfig( p_input,
+                                                                  p_es ) );
+        }
         break;
 
     case DVD_SPU_ES:
-        p_es->thread_id = spudec_CreateThread( GetVdecConfig( p_input, p_es ) );
+        if( p_main->b_video )
+        {
+            p_es->thread_id = spudec_CreateThread( GetVdecConfig( p_input,
+                                                                  p_es ) );
+        }
         break;
 
     default:
index cb05f36d0ef46c5d6ba55a262f2301bc43503977..67dd67be84aa5be64e7b1fcb45447b91ee74e50e 100644 (file)
@@ -2,7 +2,7 @@
  * mpeg_system.c: TS, PS and PES management
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: mpeg_system.c,v 1.10 2000/12/20 16:04:31 massiot Exp $
+ * $Id: mpeg_system.c,v 1.11 2000/12/20 17:49:40 massiot Exp $
  *
  * Authors: 
  *
 #include "input_ext-dec.h"
 
 #include "input.h"
-
 #include "mpeg_system.h"
 
+#include "main.h"                           /* AC3/MPEG channel, SPU channel */
+
 /*****************************************************************************
  * Local prototypes
  *****************************************************************************/
@@ -815,25 +816,47 @@ es_descriptor_t * input_ParsePS( input_thread_t * p_input,
                         /* MPEG audio */
                         p_es->i_type = MPEG2_AUDIO_ES;
 #ifdef AUTO_SPAWN
-                        input_SelectES( p_input, p_es );
+                        if( main_GetIntVariable( INPUT_DVD_AUDIO_VAR,
+                                                 REQUESTED_MPEG ) 
+                          && main_GetIntVariable( INPUT_DVD_CHANNEL_VAR, 0 )
+                                == (p_es->i_stream_id & 0x1F) )
+                        {
+                            input_SelectES( p_input, p_es );
+                        }
 #endif
                     }
                     else if( (i_id & 0xF0FF) == 0x80BD )
                     {
-                        /* AC3 audio */
+                        /* AC3 audio (0x80->0x8F) */
                         p_es->i_type = AC3_AUDIO_ES;
 #ifdef AUTO_SPAWN
-                        input_SelectES( p_input, p_es );
+                        if( main_GetIntVariable( INPUT_DVD_AUDIO_VAR,
+                                                 REQUESTED_AC3 )
+                         && main_GetIntVariable( INPUT_DVD_CHANNEL_VAR, 0 )
+                                == ((p_es->i_stream_id & 0xF00) >> 8) )
+                        {
+                            input_SelectES( p_input, p_es );
+                        }
 #endif
                     }
-                    else if( (i_id & 0xF0FF) == 0x20BD )
+                    else if( (i_id & 0xE0FF) == 0x20BD )
                     {
-                        /* Subtitles video */
+                        /* Subtitles video (0x20->0x3F) */
                         p_es->i_type = DVD_SPU_ES;
 #ifdef AUTO_SPAWN
-                        input_SelectES( p_input, p_es );
+                        if( main_GetIntVariable( INPUT_DVD_SUBTITLE_VAR, 0 )
+                                == ((p_es->i_stream_id & 0x1F00) >> 8) )
+                        {
+                            input_SelectES( p_input, p_es );
+                        }
 #endif
                     }
+                    else if( (i_id & 0xF0FF) == 0xA0BD )
+                    {
+                        /* LPCM audio (0xA0->0xAF) */
+                        p_es->i_type = LPCM_AUDIO_ES;
+                        /* FIXME : write the decoder */
+                    }
                     else
                     {
                         p_es->i_type = UNKNOWN_ES;
index 259fa9c231895c4d979d71711c9b4609635e2a4d..d9852a0899626fd989c732311d57c913c477ed2c 100644 (file)
@@ -31,8 +31,6 @@
 #include <stdlib.h>                                      /* free(), strtol() */
 #include <stdio.h>                                                   /* FILE */
 #include <string.h>                                            /* strerror() */
-#include <sys/types.h>                        /* on BSD, uio.h needs types.h */
-#include <sys/uio.h>                                          /* for input.h */
 
 #include "config.h"
 #include "common.h"
@@ -40,6 +38,7 @@
 #include "mtime.h"
 #include "plugins.h"
 #include "playlist.h"
+
 #include "stream_control.h"
 #include "input_ext-intf.h"
 
index 70b9ae3dd90678800e97d66cac70ce866feb0fa3..08db6043efe6ebd77f476c9263644d6aa7a91e2e 100644 (file)
@@ -432,11 +432,14 @@ void main_PutIntVariable( char *psz_name, int i_value )
 static void SetDefaultConfiguration( void )
 {
     /*
-     * All features are activated by default execpted vlans
+     * All features are activated by default except vlans
      */
     p_main->b_audio  = 1;
     p_main->b_video  = 1;
     p_main->b_vlans  = 0;
+
+    /* This is |_|lt1m4t3 |<l|_|d63 */
+    main_PutIntVariable( INPUT_DVD_SUBTITLE_VAR, -1 );
 }
 
 /*****************************************************************************
@@ -537,20 +540,17 @@ static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
             main_PutPszVariable( YUV_METHOD_VAR, optarg );
             break;
 
-            /* FIXME */
-#if 0
         /* DVD options */
         case 'a':
-            if ( ! strcmp(optarg, "mpeg") )
-                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_MPEG );
+            if ( ! strcmp(optarg, "ac3") )
+                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_AC3 );
             else if ( ! strcmp(optarg, "lpcm") )
                 main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_LPCM );
             else if ( ! strcmp(optarg, "off") )
                 main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_NOAUDIO );
             else
-                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_AC3 );
+                main_PutIntVariable( INPUT_DVD_AUDIO_VAR, REQUESTED_MPEG );
             break;
-#endif
         case 'c':
             main_PutIntVariable( INPUT_DVD_CHANNEL_VAR, atoi(optarg) );
             break;