Commit bf4a3007 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Retain certain flags from input_ItemAddOpt

(Oh! another ABI break - if only vlc_input_item_t weren't public)
parent 74b1c6cd
...@@ -66,6 +66,8 @@ struct input_item_t ...@@ -66,6 +66,8 @@ struct input_item_t
int i_options; /**< Number of input options */ int i_options; /**< Number of input options */
char **ppsz_options; /**< Array 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*/ mtime_t i_duration; /**< Duration in milliseconds*/
...@@ -116,6 +118,10 @@ static inline void input_ItemCopyOptions( input_item_t *p_parent, ...@@ -116,6 +118,10 @@ static inline void input_ItemCopyOptions( input_item_t *p_parent,
p_child->i_options * p_child->i_options *
sizeof( char * ) ); sizeof( char * ) );
p_child->ppsz_options[p_child->i_options-1] = psz_option; 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];
} }
} }
...@@ -142,15 +148,18 @@ static inline void input_ItemAddSubItem( input_item_t *p_parent, ...@@ -142,15 +148,18 @@ static inline void input_ItemAddSubItem( input_item_t *p_parent,
vlc_event_send( &p_parent->event_manager, &event ); vlc_event_send( &p_parent->event_manager, &event );
} }
#define VLC_INPUT_OPTION_UNIQUE 0x1 /* Flags handled past input_ItemAddOpt() */
#define VLC_INPUT_OPTION_TRUSTED 0x2 #define VLC_INPUT_OPTION_TRUSTED 0x2
VLC_EXPORT( void, input_ItemAddOpt, ( input_item_t *, const char *str, unsigned flags ) ); /* 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 static inline
void input_ItemAddOption (input_item_t *item, const char *str) int input_ItemAddOption (input_item_t *item, const char *str)
{ {
input_ItemAddOpt (item, str, VLC_INPUT_OPTION_TRUSTED); return input_ItemAddOpt (item, str, VLC_INPUT_OPTION_TRUSTED);
} }
static inline void input_ItemClean( input_item_t *p_i ) static inline void input_ItemClean( input_item_t *p_i )
...@@ -173,6 +182,7 @@ static inline void input_ItemClean( input_item_t *p_i ) ...@@ -173,6 +182,7 @@ static inline void input_ItemClean( input_item_t *p_i )
for( i = 0; i < p_i->i_options; i++ ) for( i = 0; i < p_i->i_options; i++ )
free( p_i->ppsz_options[i] ); free( p_i->ppsz_options[i] );
TAB_CLEAN( p_i->i_options, p_i->ppsz_options ); TAB_CLEAN( p_i->i_options, p_i->ppsz_options );
free( p_i->optflagv);
for( i = 0; i < p_i->i_es; i++ ) for( i = 0; i < p_i->i_es; i++ )
{ {
......
...@@ -226,6 +226,7 @@ static inline void input_ItemInit( vlc_object_t *p_o, input_item_t *p_i ) ...@@ -226,6 +226,7 @@ static inline void input_ItemInit( vlc_object_t *p_o, input_item_t *p_i )
p_i->psz_uri = NULL; p_i->psz_uri = NULL;
TAB_INIT( p_i->i_es, p_i->es ); TAB_INIT( p_i->i_es, p_i->es );
TAB_INIT( p_i->i_options, p_i->ppsz_options ); TAB_INIT( p_i->i_options, p_i->ppsz_options );
p_i->optflagv = NULL, p_i->optflagc = 0;
TAB_INIT( p_i->i_categories, p_i->pp_categories ); TAB_INIT( p_i->i_categories, p_i->pp_categories );
p_i->i_type = ITEM_TYPE_UNKNOWN; p_i->i_type = ITEM_TYPE_UNKNOWN;
......
...@@ -115,11 +115,13 @@ static void input_ItemDestroy ( gc_object_t *p_this ) ...@@ -115,11 +115,13 @@ static void input_ItemDestroy ( gc_object_t *p_this )
free( p_input ); free( p_input );
} }
void input_ItemAddOpt( input_item_t *p_input, const char *psz_option, int input_ItemAddOpt( input_item_t *p_input, const char *psz_option,
unsigned flags ) unsigned flags )
{ {
int err = VLC_SUCCESS;
if( psz_option == NULL ) if( psz_option == NULL )
return; return VLC_EGENERIC;
vlc_mutex_lock( &p_input->lock ); vlc_mutex_lock( &p_input->lock );
if (flags & VLC_INPUT_OPTION_UNIQUE) if (flags & VLC_INPUT_OPTION_UNIQUE)
...@@ -129,10 +131,20 @@ void input_ItemAddOpt( input_item_t *p_input, const char *psz_option, ...@@ -129,10 +131,20 @@ void input_ItemAddOpt( input_item_t *p_input, const char *psz_option,
goto out; goto out;
} }
uint8_t *flagv = realloc (p_input->optflagv, p_input->optflagc + 1);
if (flagv == NULL)
{
err = VLC_ENOMEM;
goto out;
}
p_input->optflagv = flagv;
flagv[p_input->optflagc++] = flags;
INSERT_ELEM( p_input->ppsz_options, p_input->i_options, INSERT_ELEM( p_input->ppsz_options, p_input->i_options,
p_input->i_options, strdup( psz_option ) ); p_input->i_options, strdup( psz_option ) );
out: out:
vlc_mutex_unlock( &p_input->lock ); vlc_mutex_unlock( &p_input->lock );
return err;
} }
int input_ItemAddInfo( input_item_t *p_i, int input_ItemAddInfo( input_item_t *p_i,
...@@ -270,8 +282,6 @@ input_item_t *input_ItemNewWithType( vlc_object_t *p_obj, const char *psz_uri, ...@@ -270,8 +282,6 @@ input_item_t *input_ItemNewWithType( vlc_object_t *p_obj, const char *psz_uri,
p_input->psz_name = strdup( p_input->psz_uri ); p_input->psz_name = strdup( p_input->psz_uri );
p_input->i_duration = i_duration; p_input->i_duration = i_duration;
p_input->ppsz_options = NULL;
p_input->i_options = 0;
for( int i = 0; i < i_options; i++ ) for( int i = 0; i < i_options; i++ )
input_ItemAddOption( p_input, ppsz_options[i] ); input_ItemAddOption( p_input, ppsz_options[i] );
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment