]> git.sesse.net Git - vlc/blobdiff - include/vlc_input.h
Retain certain flags from input_ItemAddOpt
[vlc] / include / vlc_input.h
index 08d13d8b888a7b2c5d4887e78c96a94801e1b2a4..4e94fb2cd590828da4034088a3d598e7314dff26 100644 (file)
@@ -66,6 +66,8 @@ struct input_item_t
 
     int        i_options;            /**< Number of input options */
     char       **ppsz_options;       /**< Array of input options */
+    uint8_t    *optflagv;            /**< Some flags of input options */
+    unsigned   optflagc;
 
     mtime_t    i_duration;           /**< Duration in milliseconds*/
 
@@ -106,17 +108,26 @@ static inline void input_ItemCopyOptions( input_item_t *p_parent,
     for( i = 0 ; i< p_parent->i_options; i++ )
     {
         char *psz_option= strdup( p_parent->ppsz_options[i] );
+        if( !strcmp( psz_option, "meta-file" ) )
+        {
+            free( psz_option );
+            continue;
+        }
         p_child->i_options++;
         p_child->ppsz_options = (char **)realloc( p_child->ppsz_options,
                                                   p_child->i_options *
                                                   sizeof( char * ) );
         p_child->ppsz_options[p_child->i_options-1] = psz_option;
+        p_child->optflagc++;
+        p_child->optflagv = (uint8_t *)realloc( p_child->optflagv,
+                                                p_child->optflagc );
+        p_child->optflagv[p_child->optflagc - 1] = p_parent->optflagv[i];
     }
 }
 
 static inline void input_item_SetName( input_item_t *p_item, const char *psz_name )
 {
-    if( p_item->psz_name ) free( p_item->psz_name );
+    free( p_item->psz_name );
     p_item->psz_name = strdup( psz_name );
 }
 
@@ -125,8 +136,7 @@ static inline void input_item_SetName( input_item_t *p_item, const char *psz_nam
  * It is not the input item's responsability to keep all the ref of
  * the input item children. */
 static inline void input_ItemAddSubItem( input_item_t *p_parent,
-                                         input_item_t *p_child, 
-                                         vlc_bool_t b_node )
+                                         input_item_t *p_child )
 {
     vlc_event_t event;
 
@@ -135,12 +145,22 @@ static inline void input_ItemAddSubItem( input_item_t *p_parent,
     /* Notify interested third parties */
     event.type = vlc_InputItemSubItemAdded;
     event.u.input_item_subitem_added.p_new_child = p_child;
-    event.u.input_item_subitem_added.b_node = b_node;
     vlc_event_send( &p_parent->event_manager, &event );
 }
 
-VLC_EXPORT( void, input_ItemAddOption,( input_item_t *, const char * ) );
-VLC_EXPORT( void, input_ItemAddOptionNoDup,( input_item_t *, const char * ) );
+/* Flags handled past input_ItemAddOpt() */
+#define VLC_INPUT_OPTION_TRUSTED 0x2
+
+/* Flags handled within input_ItemAddOpt() */
+#define VLC_INPUT_OPTION_UNIQUE  0x100
+
+VLC_EXPORT( int, input_ItemAddOpt, ( input_item_t *, const char *str, unsigned flags ) );
+
+static inline
+int input_ItemAddOption (input_item_t *item, const char *str)
+{
+    return input_ItemAddOpt (item, str, VLC_INPUT_OPTION_TRUSTED);
+}
 
 static inline void input_ItemClean( input_item_t *p_i )
 {
@@ -160,11 +180,9 @@ static inline void input_ItemClean( input_item_t *p_i )
         vlc_meta_Delete( p_i->p_meta );
 
     for( i = 0; i < p_i->i_options; i++ )
-    {
-        if( p_i->ppsz_options[i] )
-            free( p_i->ppsz_options[i] );
-    }
+        free( p_i->ppsz_options[i] );
     TAB_CLEAN( p_i->i_options, p_i->ppsz_options );
+    free( p_i->optflagv);
 
     for( i = 0; i < p_i->i_es; i++ )
     {
@@ -182,15 +200,13 @@ static inline void input_ItemClean( input_item_t *p_i )
         {
             struct info_t *p_info = p_category->pp_infos[j];
 
-            if( p_info->psz_name )
-                free( p_info->psz_name);
-            if( p_info->psz_value )
-                free( p_info->psz_value );
+            free( p_info->psz_name);
+            free( p_info->psz_value );
             free( p_info );
         }
         TAB_CLEAN( p_category->i_infos, p_category->pp_infos );
 
-        if( p_category->psz_name ) free( p_category->psz_name );
+        free( p_category->psz_name );
         free( p_category );
     }
     TAB_CLEAN( p_i->i_categories, p_i->pp_categories );
@@ -252,8 +268,8 @@ static inline char * input_item_GetURI( input_item_t * p_i )
 static inline void input_item_SetURI( input_item_t * p_i, char * psz_uri )
 {
     vlc_mutex_lock( &p_i->lock );
-    if( p_i->psz_uri ) free( p_i->psz_uri );
-        p_i->psz_uri = strdup( psz_uri );
+    free( p_i->psz_uri );
+    p_i->psz_uri = strdup( psz_uri );
     vlc_mutex_unlock( &p_i->lock );
 }
 
@@ -428,7 +444,7 @@ static inline seekpoint_t *vlc_seekpoint_New( void )
 static inline void vlc_seekpoint_Delete( seekpoint_t *point )
 {
     if( !point ) return;
-    if( point->psz_name ) free( point->psz_name );
+    free( point->psz_name );
     free( point );
 }
 
@@ -479,13 +495,13 @@ static inline void vlc_input_title_Delete( input_title_t *t )
     if( t == NULL )
         return;
 
-    if( t->psz_name ) free( t->psz_name );
+    free( t->psz_name );
     for( i = 0; i < t->i_seekpoint; i++ )
     {
-        if( t->seekpoint[i]->psz_name ) free( t->seekpoint[i]->psz_name );
+        free( t->seekpoint[i]->psz_name );
         free( t->seekpoint[i] );
     }
-    if( t->seekpoint ) free( t->seekpoint );
+    free( t->seekpoint );
     free( t );
 }
 
@@ -559,8 +575,7 @@ static inline void vlc_input_attachment_Delete( input_attachment_t *a )
     free( a->psz_name );
     free( a->psz_mime );
     free( a->psz_description );
-    if( a->p_data )
-        free( a->p_data );
+    free( a->p_data );
     free( a );
 }
 /*****************************************************************************