]> git.sesse.net Git - vlc/blobdiff - src/input/var.c
Fixed record stream in case of stream_Read(NULL) and clean up.
[vlc] / src / input / var.c
index 663e4b3e589311c0cfad79fb0b2ec1a189bd84a1..7dbb4057115a85a6d2ec219cd3c54e72f3d47a57 100644 (file)
@@ -61,6 +61,10 @@ static int EsDelayCallback ( vlc_object_t *p_this, char const *psz_cmd,
 static int BookmarkCallback( vlc_object_t *p_this, char const *psz_cmd,
                              vlc_value_t oldval, vlc_value_t newval, void * );
 
+static int RecordCallback( vlc_object_t *p_this, char const *psz_cmd,
+                           vlc_value_t oldval, vlc_value_t newval,
+                           void *p_data );
+
 typedef struct
 {
     const char *psz_name;
@@ -69,6 +73,9 @@ typedef struct
 static void InputAddCallbacks( input_thread_t *, const vlc_input_callback_t * );
 static void InputDelCallbacks( input_thread_t *, const vlc_input_callback_t * );
 
+#ifdef CALLBACK /* For windows */
+# undef CALLBACK /* We don't care of this one here */
+#endif
 /* List all callbacks added by input */
 #define CALLBACK(name,cb) { name, cb }
 static const vlc_input_callback_t p_input_callbacks[] =
@@ -90,6 +97,7 @@ static const vlc_input_callback_t p_input_callbacks[] =
     CALLBACK( "video-es", ESCallback ),
     CALLBACK( "audio-es", ESCallback ),
     CALLBACK( "spu-es", ESCallback ),
+    CALLBACK( "record", RecordCallback ),
 
     CALLBACK( NULL, NULL )
 };
@@ -104,6 +112,8 @@ static const vlc_input_callback_t p_input_title_callbacks[] =
 {
     CALLBACK( "next-chapter", SeekpointCallback ),
     CALLBACK( "prev-chapter", SeekpointCallback ),
+
+    CALLBACK( NULL, NULL )
 };
 #undef CALLBACK
 
@@ -184,9 +194,6 @@ void input_ControlVarInit ( input_thread_t *p_input )
     val.i_time = 0;
     var_Change( p_input, "spu-delay", VLC_VAR_SETVALUE, &val, NULL );
 
-    p_input->p->pts_adjust.auto_adjust = var_CreateGetBool(
-            p_input, "auto-adjust-pts-delay" );
-
     /* Video ES */
     var_Create( p_input, "video-es", VLC_VAR_INTEGER | VLC_VAR_HASCHOICE );
     text.psz_string = _("Video Track");
@@ -278,9 +285,12 @@ void input_ControlVarNavigation( input_thread_t *p_input )
 
     /* Create title and navigation */
     val.psz_string = malloc( sizeof("title ") + 5 );
+    if( !val.psz_string )
+        return;
+
     for( i = 0; i < p_input->p->i_title; i++ )
     {
-        vlc_value_t val2, text, text2;
+        vlc_value_t val2, text2;
         int j;
 
         /* Add Navigation entries */
@@ -294,8 +304,9 @@ void input_ControlVarNavigation( input_thread_t *p_input )
         if( p_input->p->title[i]->psz_name == NULL ||
             *p_input->p->title[i]->psz_name == '\0' )
         {
-            asprintf( &text.psz_string, _("Title %i"),
-                      i + p_input->p->i_title_offset );
+            if( asprintf( &text.psz_string, _("Title %i"),
+                      i + p_input->p->i_title_offset ) == -1 )
+                continue;
         }
         else
         {
@@ -317,8 +328,9 @@ void input_ControlVarNavigation( input_thread_t *p_input )
                 *p_input->p->title[i]->seekpoint[j]->psz_name == '\0' )
             {
                 /* Default value */
-                asprintf( &text2.psz_string, _("Chapter %i"),
-                          j + p_input->p->i_seekpoint_offset );
+                if( asprintf( &text2.psz_string, _("Chapter %i"),
+                          j + p_input->p->i_seekpoint_offset ) == -1 )
+                    continue;
             }
             else
             {
@@ -342,7 +354,7 @@ void input_ControlVarNavigation( input_thread_t *p_input )
 void input_ControlVarTitle( input_thread_t *p_input, int i_title )
 {
     input_title_t *t = p_input->p->title[i_title];
-    vlc_value_t val;
+    vlc_value_t val, text;
     int  i;
 
     /* Create/Destroy command variables */
@@ -353,8 +365,6 @@ void input_ControlVarTitle( input_thread_t *p_input, int i_title )
     }
     else if( var_Get( p_input, "next-chapter", &val ) != VLC_SUCCESS )
     {
-        vlc_value_t text;
-
         var_Create( p_input, "next-chapter", VLC_VAR_VOID );
         text.psz_string = _("Next chapter");
         var_Change( p_input, "next-chapter", VLC_VAR_SETTEXT, &text, NULL );
@@ -370,15 +380,15 @@ void input_ControlVarTitle( input_thread_t *p_input, int i_title )
     var_Change( p_input, "chapter", VLC_VAR_CLEARCHOICES, NULL, NULL );
     for( i = 0; i <  t->i_seekpoint; i++ )
     {
-        vlc_value_t text;
         val.i_int = i;
 
         if( t->seekpoint[i]->psz_name == NULL ||
             *t->seekpoint[i]->psz_name == '\0' )
         {
             /* Default value */
-            asprintf( &text.psz_string, _("Chapter %i"),
-                      i + p_input->p->i_seekpoint_offset );
+            if( asprintf( &text.psz_string, _("Chapter %i"),
+                      i + p_input->p->i_seekpoint_offset ) == -1 )
+                continue;
         }
         else
         {
@@ -396,8 +406,6 @@ void input_ControlVarTitle( input_thread_t *p_input, int i_title )
  *****************************************************************************/
 void input_ConfigVarInit ( input_thread_t *p_input )
 {
-    vlc_value_t val;
-
     /* Create Object Variables for private use only */
 
     if( !p_input->b_preparsing )
@@ -452,14 +460,24 @@ void input_ConfigVarInit ( input_thread_t *p_input )
                     VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
         var_Create( p_input, "clock-synchro",
                     VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+        var_Create( p_input, "auto-adjust-pts-delay",
+                    VLC_VAR_BOOL | VLC_VAR_DOINHERIT);
     }
 
     var_Create( p_input, "seekable", VLC_VAR_BOOL );
-    val.b_bool = true; /* Fixed later*/
-    var_Change( p_input, "seekable", VLC_VAR_SETVALUE, &val, NULL );
+    var_SetBool( p_input, "seekable", true ); /* Fixed later*/
+
     var_Create( p_input, "can-pause", VLC_VAR_BOOL );
-    val.b_bool = true; /* Fixed later*/
-    var_Change( p_input, "can-pause", VLC_VAR_SETVALUE, &val, NULL );
+    var_SetBool( p_input, "can-pause", true ); /* Fixed later*/
+
+    var_Create( p_input, "can-record", VLC_VAR_BOOL );
+    var_SetBool( p_input, "can-record", false ); /* Fixed later*/
+
+    var_Create( p_input, "record", VLC_VAR_BOOL );
+    var_SetBool( p_input, "record", false );
+
+    var_Create( p_input, "teletext-es", VLC_VAR_INTEGER );
+    var_SetInteger( p_input, "teletext-es", -1 );
 
     /* */
     var_Create( p_input, "access-filter", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
@@ -766,3 +784,15 @@ static int BookmarkCallback( vlc_object_t *p_this, char const *psz_cmd,
 
     return VLC_SUCCESS;
 }
+
+static int RecordCallback( vlc_object_t *p_this, char const *psz_cmd,
+                           vlc_value_t oldval, vlc_value_t newval,
+                           void *p_data )
+{
+    input_thread_t *p_input = (input_thread_t*)p_this;
+    VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data);
+
+    input_ControlPush( p_input, INPUT_CONTROL_SET_RECORD_STATE, &newval );
+
+    return VLC_SUCCESS;
+}