Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
bbcddc3e
Commit
bbcddc3e
authored
Jun 28, 2004
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* all: re-enabled meta-datas.
parent
7c5028ac
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
113 additions
and
241 deletions
+113
-241
src/input/input.c
src/input/input.c
+103
-241
src/input/var.c
src/input/var.c
+10
-0
No files found.
src/input/input.c
View file @
bbcddc3e
...
@@ -69,6 +69,8 @@ static void InputSourceClean( input_thread_t *, input_source_t * );
...
@@ -69,6 +69,8 @@ static void InputSourceClean( input_thread_t *, input_source_t * );
static
void
SlaveDemux
(
input_thread_t
*
p_input
);
static
void
SlaveDemux
(
input_thread_t
*
p_input
);
static
void
SlaveSeek
(
input_thread_t
*
p_input
);
static
void
SlaveSeek
(
input_thread_t
*
p_input
);
static
vlc_meta_t
*
InputMetaUser
(
input_thread_t
*
p_input
);
/*****************************************************************************
/*****************************************************************************
* input_CreateThread: creates a new input thread
* input_CreateThread: creates a new input thread
*****************************************************************************
*****************************************************************************
...
@@ -470,9 +472,7 @@ static int Run( input_thread_t *p_input )
...
@@ -470,9 +472,7 @@ static int Run( input_thread_t *p_input )
/* We have finish to demux data but not to play them */
/* We have finish to demux data but not to play them */
while
(
!
p_input
->
b_die
)
while
(
!
p_input
->
b_die
)
{
{
#if 0
if
(
input_EsOutDecodersEmpty
(
p_input
->
p_es_out
)
)
if
(
input_EsOutDecodersEmpty
(
p_input
->
p_es_out
)
)
#endif
break
;
break
;
msg_Dbg
(
p_input
,
"waiting decoder fifos to empty"
);
msg_Dbg
(
p_input
,
"waiting decoder fifos to empty"
);
...
@@ -505,6 +505,8 @@ static int Init( input_thread_t * p_input )
...
@@ -505,6 +505,8 @@ static int Init( input_thread_t * p_input )
char
*
psz_subtitle
;
char
*
psz_subtitle
;
vlc_value_t
val
;
vlc_value_t
val
;
double
f_fps
;
double
f_fps
;
vlc_meta_t
*
p_meta
,
*
p_meta_user
;
int
i
;
/* Initialize optional stream output. (before access/demuxer) */
/* Initialize optional stream output. (before access/demuxer) */
psz
=
var_GetString
(
p_input
,
"sout"
);
psz
=
var_GetString
(
p_input
,
"sout"
);
...
@@ -531,19 +533,6 @@ static int Init( input_thread_t * p_input )
...
@@ -531,19 +533,6 @@ static int Init( input_thread_t * p_input )
goto
error
;
goto
error
;
}
}
#if 0
{
input_source_t *extra;
char *psz_extra = "/home/fenrir/a.avi";
extra = InputSourceNew( p_input );
if( !InputSourceInit( p_input, extra, psz_extra ) )
{
TAB_APPEND( p_input->i_slave, p_input->slave, extra );
}
}
#endif
/* Create global title (from master) */
/* Create global title (from master) */
p_input
->
i_title
=
p_input
->
input
.
i_title
;
p_input
->
i_title
=
p_input
->
input
.
i_title
;
p_input
->
title
=
p_input
->
input
.
title
;
p_input
->
title
=
p_input
->
input
.
title
;
...
@@ -568,10 +557,6 @@ static int Init( input_thread_t * p_input )
...
@@ -568,10 +557,6 @@ static int Init( input_thread_t * p_input )
if
(
val
.
i_int
<
0
)
if
(
val
.
i_int
<
0
)
p_input
->
i_pts_delay
-=
(
val
.
i_int
*
1000
);
p_input
->
i_pts_delay
-=
(
val
.
i_int
*
1000
);
/* TODO: check meta data from users */
/* TODO: get meta data from demuxer */
/* Load master infos */
/* Load master infos */
/* Init length */
/* Init length */
if
(
!
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_LENGTH
,
if
(
!
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_LENGTH
,
...
@@ -666,7 +651,6 @@ static int Init( input_thread_t * p_input )
...
@@ -666,7 +651,6 @@ static int Init( input_thread_t * p_input )
char
**
subs
=
subtitles_Detect
(
p_input
,
psz_autopath
,
char
**
subs
=
subtitles_Detect
(
p_input
,
psz_autopath
,
p_input
->
input
.
p_item
->
psz_uri
);
p_input
->
input
.
p_item
->
psz_uri
);
input_source_t
*
sub
;
input_source_t
*
sub
;
int
i
;
for
(
i
=
0
;
subs
[
i
]
!=
NULL
;
i
++
)
for
(
i
=
0
;
subs
[
i
]
!=
NULL
;
i
++
)
{
{
...
@@ -730,15 +714,6 @@ static int Init( input_thread_t * p_input )
...
@@ -730,15 +714,6 @@ static int Init( input_thread_t * p_input )
es_out_Control
(
p_input
->
p_es_out
,
ES_OUT_SET_MODE
,
es_out_Control
(
p_input
->
p_es_out
,
ES_OUT_SET_MODE
,
val
.
b_bool
?
ES_OUT_MODE_ALL
:
ES_OUT_MODE_AUTO
);
val
.
b_bool
?
ES_OUT_MODE_ALL
:
ES_OUT_MODE_AUTO
);
/* TODO select forced subs */
#if 0
if( p_sub_toselect )
{
es_out_Control( p_input->p_es_out, ES_OUT_SET_ES,
p_sub_toselect->p_es, VLC_TRUE );
}
#endif
if
(
p_input
->
p_sout
)
if
(
p_input
->
p_sout
)
{
{
if
(
p_input
->
p_sout
->
i_out_pace_nocontrol
>
0
)
if
(
p_input
->
p_sout
->
i_out_pace_nocontrol
>
0
)
...
@@ -753,137 +728,74 @@ static int Init( input_thread_t * p_input )
...
@@ -753,137 +728,74 @@ static int Init( input_thread_t * p_input )
p_input
->
b_out_pace_control
?
"asynch"
:
"synch"
);
p_input
->
b_out_pace_control
?
"asynch"
:
"synch"
);
}
}
msg_Dbg
(
p_input
,
"`%s' sucessfully opened"
,
/* Get meta data from users */
p_input
->
input
.
p_item
->
psz_uri
);
p_meta_user
=
InputMetaUser
(
p_input
);
/* initialization is complete */
p_input
->
i_state
=
PLAYING_S
;
val
.
i_int
=
PLAYING_S
;
var_Change
(
p_input
,
"state"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
return
VLC_SUCCESS
;
error:
if
(
p_input
->
p_es_out
)
input_EsOutDelete
(
p_input
->
p_es_out
);
if
(
p_input
->
p_sout
)
sout_DeleteInstance
(
p_input
->
p_sout
);
/* Mark them deleted */
p_input
->
input
.
p_demux
=
NULL
;
p_input
->
input
.
p_stream
=
NULL
;
p_input
->
input
.
p_access
=
NULL
;
p_input
->
p_es_out
=
NULL
;
p_input
->
p_sout
=
NULL
;
return
VLC_EGENERIC
;
#if 0
vlc_meta_t *p_meta = NULL, *p_meta_user = NULL;
// float f_fps;
double f_fps;
mtime_t i_length;
FIXME
p_input->input.i_cr_average = config_GetInt( p_input, "cr-average" );
p_input->stream.control.i_status = INIT_S;
p_input->stream.control.i_rate = DEFAULT_RATE;
/* Init input_thread_sys_t */
/* Get meta data from master input */
p_input->p_sys = malloc( sizeof( input_thread_sys_t ) );
if
(
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_META
,
&
p_meta
)
)
p_input->p_sys->i_sub = 0;
p_meta
=
NULL
;
p_input->p_sys->sub = NULL;
/* Get meta information from user */
/* Merge them */
var_Create( p_input, "meta-title", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
if
(
p_meta
==
NULL
)
var_Create( p_input, "meta-author", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_input, "meta-artist", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_input, "meta-genre", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_input, "meta-copyright", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
var_Create( p_input, "meta-description", VLC_VAR_STRING|VLC_VAR_DOINHERIT);
var_Create( p_input, "meta-date", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_input, "meta-url", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
if( (p_meta_user = vlc_meta_New()) )
{
{
vlc_value_t val;
p_meta
=
p_meta_user
;
var_Get( p_input, "meta-title", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_TITLE, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-author", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_AUTHOR, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-artist", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_ARTIST, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-genre", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_GENRE, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-copyright", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_COPYRIGHT, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-description", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_DESCRIPTION, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-date", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_DATE, val.psz_string );
free( val.psz_string );
var_Get( p_input, "meta-url", &val );
if( *val.psz_string )
vlc_meta_Add( p_meta_user, VLC_META_URL, val.psz_string );
free( val.psz_string );
}
}
else
if
(
p_meta_user
)
/* Get meta informations from demuxer */
if( !demux_Control( p_input, DEMUX_GET_META, &p_meta ) ||
( p_meta_user && p_meta_user->i_meta ) )
{
{
int i;
vlc_meta_Merge
(
p_meta
,
p_meta_user
);
vlc_meta_Delete
(
p_meta_user
);
}
/* Merge demux and user metadata */
/* Get meta data from slave input */
if( !p_meta ){ p_meta = p_meta_user; p_meta_user = NULL; }
for
(
i
=
0
;
i
<
p_input
->
i_slave
;
i
++
)
else if( p_meta && p_meta_user ) vlc_meta_Merge( p_meta, p_meta_user );
{
vlc_meta_t
*
p_meta_slave
;
msg_Dbg( p_input, "meta informations:" );
if
(
!
demux2_Control
(
p_input
->
slave
[
i
]
->
p_demux
,
DEMUX_GET_META
,
&
p_meta_slave
)
)
if( p_meta->i_meta > 0 )
{
{
for( i = 0; i < p_meta->i_meta; i++
)
if
(
p_meta
==
NULL
)
{
{
msg_Dbg( p_input, " - '%s' = '%s'", _(p_meta->name[i]),
p_meta
=
p_meta_slave
;
p_meta->value[i] );
if( !strcmp( p_meta->name[i], VLC_META_TITLE ) &&
p_meta->value[i] )
input_Control( p_input, INPUT_SET_NAME, p_meta->value[i] );
if( !strcmp( p_meta->name[i], VLC_META_AUTHOR ) )
input_Control( p_input, INPUT_ADD_INFO, _("General"),
_("Author"), p_meta->value[i] );
input_Control( p_input, INPUT_ADD_INFO, _("File"),
_(p_meta->name[i]), "%s", p_meta->value[i] );
}
}
else
if
(
p_meta_slave
)
{
vlc_meta_Merge
(
p_meta
,
p_meta_slave
);
vlc_meta_Delete
(
p_meta_slave
);
}
}
}
if
(
p_meta
&&
p_meta
->
i_meta
>
0
)
{
msg_Dbg
(
p_input
,
"meta informations:"
);
for
(
i
=
0
;
i
<
p_meta
->
i_meta
;
i
++
)
{
msg_Dbg
(
p_input
,
" - '%s' = '%s'"
,
_
(
p_meta
->
name
[
i
]),
p_meta
->
value
[
i
]
);
if
(
!
strcmp
(
p_meta
->
name
[
i
],
VLC_META_TITLE
)
&&
p_meta
->
value
[
i
]
)
input_Control
(
p_input
,
INPUT_SET_NAME
,
p_meta
->
value
[
i
]
);
if
(
!
strcmp
(
p_meta
->
name
[
i
],
VLC_META_AUTHOR
)
)
input_Control
(
p_input
,
INPUT_ADD_INFO
,
_
(
"General"
),
_
(
"Author"
),
p_meta
->
value
[
i
]
);
input_Control
(
p_input
,
INPUT_ADD_INFO
,
_
(
"File"
),
_
(
p_meta
->
name
[
i
]),
"%s"
,
p_meta
->
value
[
i
]
);
}
}
for
(
i
=
0
;
i
<
p_meta
->
i_track
;
i
++
)
for
(
i
=
0
;
i
<
p_meta
->
i_track
;
i
++
)
{
{
vlc_meta_t
*
tk
=
p_meta
->
track
[
i
];
vlc_meta_t
*
tk
=
p_meta
->
track
[
i
];
int
j
;
int
j
;
msg_Dbg( p_input, " - track[%d]:", i );
if
(
tk
->
i_meta
>
0
)
if
(
tk
->
i_meta
>
0
)
{
{
char
*
psz_cat
=
malloc
(
strlen
(
_
(
"Stream"
))
+
10
);
char
*
psz_cat
=
malloc
(
strlen
(
_
(
"Stream"
))
+
10
);
sprintf( psz_cat, "%s %d", _("Stream"), i );
msg_Dbg
(
p_input
,
" - track[%d]:"
,
i
);
sprintf
(
psz_cat
,
"%s %d"
,
_
(
"Stream"
),
i
);
for
(
j
=
0
;
j
<
tk
->
i_meta
;
j
++
)
for
(
j
=
0
;
j
<
tk
->
i_meta
;
j
++
)
{
{
msg_Dbg
(
p_input
,
" - '%s' = '%s'"
,
_
(
tk
->
name
[
j
]),
msg_Dbg
(
p_input
,
" - '%s' = '%s'"
,
_
(
tk
->
name
[
j
]),
...
@@ -895,118 +807,42 @@ error:
...
@@ -895,118 +807,42 @@ error:
}
}
}
}
if( p_input->
stream.p_sout && p_input->stream.
p_sout->p_meta == NULL )
if
(
p_input
->
p_sout
&&
p_input
->
p_sout
->
p_meta
==
NULL
)
{
{
p_input->
stream.
p_sout->p_meta = p_meta;
p_input
->
p_sout
->
p_meta
=
p_meta
;
}
}
else
else
{
{
vlc_meta_Delete
(
p_meta
);
vlc_meta_Delete
(
p_meta
);
}
}
}
}
if( p_meta_user ) vlc_meta_Delete( p_meta_user );
/* Get length */
msg_Dbg
(
p_input
,
"`%s' sucessfully opened"
,
if( !demux_Control( p_input, DEMUX_GET_LENGTH, &i_length ) &&
p_input
->
input
.
p_item
->
psz_uri
);
i_length > 0 )
{
char psz_buffer[MSTRTIME_MAX_SIZE];
vlc_mutex_lock( &p_input->p_item->lock );
p_input->p_item->i_duration = i_length;
vlc_mutex_unlock( &p_input->p_item->lock );
input_Control( p_input, INPUT_ADD_INFO, _("General"), _("Duration"),
msecstotimestr( psz_buffer, i_length / 1000 ) );
/* Set start time */
var_Get( p_input, "start-time", &val );
if( val.i_int > 0 )
{
double f_pos = val.i_int * I64C(1000000) / (double)i_length;
if( f_pos >= 1.0 )
/* initialization is complete */
{
p_input
->
i_state
=
PLAYING_S
;
msg_Warn( p_input, "invalid start-time, ignored (start-time "
">= media length)" );
}
else
{
p_input->stream.p_selected_area->i_seek =
(int64_t)( f_pos * (double)p_input->stream.p_selected_area->i_size );
msg_Dbg( p_input, "start-time %ds (%2.2f)", val.i_int, f_pos );
val
.
i_int
=
PLAYING_S
;
}
var_Change
(
p_input
,
"state"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
}
}
/* Get fps */
return
VLC_SUCCESS
;
if( demux_Control( p_input, DEMUX_GET_FPS, &f_fps ) || f_fps < 0.1 )
{
i_microsecondperframe = 0;
}
else
{
i_microsecondperframe = (int64_t)( (double)1000000.0 / (double)f_fps );
}
/* Look for and add subtitle files */
error:
var_Get( p_input, "sub-file", &val );
if
(
p_input
->
p_es_out
)
if( val.psz_string && *val.psz_string )
input_EsOutDelete
(
p_input
->
p_es_out
);
{
subtitle_demux_t *p_sub;
msg_Dbg( p_input, "force subtitle: %s", val.psz_string );
if
(
p_input
->
p_sout
)
if( ( p_sub = subtitle_New( p_input, strdup(val.psz_string),
sout_DeleteInstance
(
p_input
->
p_sout
);
i_microsecondperframe ) ) )
{
p_sub_toselect = p_sub;
TAB_APPEND( p_input->p_sys->i_sub, p_input->p_sys->sub, p_sub );
}
}
psz_sub_file = val.psz_string;
var_Get( p_input, "sub-autodetect-file", &val );
/* Mark them deleted */
var_Get( p_input, "sub-autodetect-path", &val1 );
p_input
->
input
.
p_demux
=
NULL
;
if( val.b_bool )
p_input
->
input
.
p_stream
=
NULL
;
{
p_input
->
input
.
p_access
=
NULL
;
subtitle_demux_t *p_sub;
p_input
->
p_es_out
=
NULL
;
int i;
p_input
->
p_sout
=
NULL
;
char **tmp = subtitles_Detect( p_input, val1.psz_string,
p_input->psz_name );
char **tmp2 = tmp;
for( i = 0; *tmp2 != NULL; i++ )
{
if( psz_sub_file == NULL || strcmp( psz_sub_file, *tmp2 ) )
{
if( ( p_sub = subtitle_New( p_input, *tmp2,
i_microsecondperframe ) ) )
{
TAB_APPEND( p_input->p_sys->i_sub, p_input->p_sys->sub,
p_sub );
}
}
free( *tmp2++ );
}
free( tmp );
free( val1.psz_string );
}
if( psz_sub_file ) free( psz_sub_file );
es_out_Control( p_input->p_es_out, ES_OUT_SET_ACTIVE, VLC_TRUE );
return
VLC_EGENERIC
;
val.b_bool = VLC_FALSE;
if( p_input->stream.p_sout )
{
var_Get( p_input, "sout-all", &val );
}
es_out_Control( p_input->p_es_out, ES_OUT_SET_MODE,
val.b_bool ? ES_OUT_MODE_ALL : ES_OUT_MODE_AUTO );
if( p_sub_toselect )
{
es_out_Control( p_input->p_es_out, ES_OUT_SET_ES,
p_sub_toselect->p_es, VLC_TRUE );
}
#endif
}
}
/*****************************************************************************
/*****************************************************************************
...
@@ -1814,10 +1650,7 @@ static void SlaveDemux( input_thread_t *p_input )
...
@@ -1814,10 +1650,7 @@ static void SlaveDemux( input_thread_t *p_input )
i_ret
=
0
;
i_ret
=
0
;
break
;
break
;
}
}
#if 0
msg_Dbg( p_input, "slave time="I64Fd" input="I64Fd,
i_stime, i_time );
#endif
if
(
i_stime
>=
i_time
)
if
(
i_stime
>=
i_time
)
break
;
break
;
...
@@ -1860,7 +1693,36 @@ static void SlaveSeek( input_thread_t *p_input )
...
@@ -1860,7 +1693,36 @@ static void SlaveSeek( input_thread_t *p_input )
}
}
}
}
}
}
/*****************************************************************************
* InputMetaUser:
*****************************************************************************/
static
vlc_meta_t
*
InputMetaUser
(
input_thread_t
*
p_input
)
{
vlc_meta_t
*
p_meta
;
vlc_value_t
val
;
if
(
(
p_meta
=
vlc_meta_New
()
)
==
NULL
)
return
NULL
;
/* Get meta information from user */
#define GET_META( c, s ) \
var_Get( p_input, (s), &val ); \
if( *val.psz_string ) \
vlc_meta_Add( p_meta, c, val.psz_string ); \
free( val.psz_string )
GET_META
(
VLC_META_TITLE
,
"meta-title"
);
GET_META
(
VLC_META_AUTHOR
,
"meta-author"
);
GET_META
(
VLC_META_ARTIST
,
"meta-artist"
);
GET_META
(
VLC_META_GENRE
,
"meta-genre"
);
GET_META
(
VLC_META_COPYRIGHT
,
"meta-copyright"
);
GET_META
(
VLC_META_DESCRIPTION
,
"meta-description"
);
GET_META
(
VLC_META_DATE
,
"meta-date"
);
GET_META
(
VLC_META_URL
,
"meta-url"
);
#undef GET_META
return
p_meta
;
}
/*****************************************************************************
/*****************************************************************************
* DecodeUrl: decode a given encoded url
* DecodeUrl: decode a given encoded url
...
...
src/input/var.c
View file @
bbcddc3e
...
@@ -427,6 +427,16 @@ void input_ConfigVarInit ( input_thread_t *p_input )
...
@@ -427,6 +427,16 @@ void input_ConfigVarInit ( input_thread_t *p_input )
var_Change
(
p_input
,
"seekable"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
var_Change
(
p_input
,
"seekable"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
var_Create
(
p_input
,
"input-slave"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"input-slave"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
/* Meta */
var_Create
(
p_input
,
"meta-title"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-author"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-artist"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-genre"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-copyright"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-description"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-date"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_input
,
"meta-url"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
}
}
/*****************************************************************************
/*****************************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment