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 * );
static
void
SlaveDemux
(
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
*****************************************************************************
...
...
@@ -470,9 +472,7 @@ static int Run( input_thread_t *p_input )
/* We have finish to demux data but not to play them */
while
(
!
p_input
->
b_die
)
{
#if 0
if
(
input_EsOutDecodersEmpty
(
p_input
->
p_es_out
)
)
#endif
break
;
msg_Dbg
(
p_input
,
"waiting decoder fifos to empty"
);
...
...
@@ -505,6 +505,8 @@ static int Init( input_thread_t * p_input )
char
*
psz_subtitle
;
vlc_value_t
val
;
double
f_fps
;
vlc_meta_t
*
p_meta
,
*
p_meta_user
;
int
i
;
/* Initialize optional stream output. (before access/demuxer) */
psz
=
var_GetString
(
p_input
,
"sout"
);
...
...
@@ -531,19 +533,6 @@ static int Init( input_thread_t * p_input )
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) */
p_input
->
i_title
=
p_input
->
input
.
i_title
;
p_input
->
title
=
p_input
->
input
.
title
;
...
...
@@ -568,10 +557,6 @@ static int Init( input_thread_t * p_input )
if
(
val
.
i_int
<
0
)
p_input
->
i_pts_delay
-=
(
val
.
i_int
*
1000
);
/* TODO: check meta data from users */
/* TODO: get meta data from demuxer */
/* Load master infos */
/* Init length */
if
(
!
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_LENGTH
,
...
...
@@ -666,7 +651,6 @@ static int Init( input_thread_t * p_input )
char
**
subs
=
subtitles_Detect
(
p_input
,
psz_autopath
,
p_input
->
input
.
p_item
->
psz_uri
);
input_source_t
*
sub
;
int
i
;
for
(
i
=
0
;
subs
[
i
]
!=
NULL
;
i
++
)
{
...
...
@@ -730,15 +714,6 @@ static int Init( input_thread_t * p_input )
es_out_Control
(
p_input
->
p_es_out
,
ES_OUT_SET_MODE
,
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
->
i_out_pace_nocontrol
>
0
)
...
...
@@ -753,137 +728,74 @@ static int Init( input_thread_t * p_input )
p_input
->
b_out_pace_control
?
"asynch"
:
"synch"
);
}
msg_Dbg
(
p_input
,
"`%s' sucessfully opened"
,
p_input
->
input
.
p_item
->
psz_uri
);
/* 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;
/* Get meta data from users */
p_meta_user
=
InputMetaUser
(
p_input
);
/* Init input_thread_sys_t */
p_input->p_sys = malloc( sizeof( input_thread_sys_t ) );
p_input->p_sys->i_sub = 0;
p_input->p_sys->sub = NULL;
/* Get meta data from master input */
if
(
demux2_Control
(
p_input
->
input
.
p_demux
,
DEMUX_GET_META
,
&
p_meta
)
)
p_meta
=
NULL
;
/* Get meta information from user */
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 );
if( (p_meta_user = vlc_meta_New()) )
/* Merge them */
if
(
p_meta
==
NULL
)
{
vlc_value_t val;
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 );
p_meta
=
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 ) )
else
if
(
p_meta_user
)
{
int i;
vlc_meta_Merge
(
p_meta
,
p_meta_user
);
vlc_meta_Delete
(
p_meta_user
);
}
/* Merge demux and user metadata */
if( !p_meta ){ p_meta = p_meta_user; p_meta_user = NULL; }
else if( p_meta && p_meta_user ) vlc_meta_Merge( p_meta, p_meta_user );
/* Get meta data from slave input */
for
(
i
=
0
;
i
<
p_input
->
i_slave
;
i
++
)
{
vlc_meta_t
*
p_meta_slave
;
msg_Dbg( p_input, "meta informations:" );
if( p_meta->i_meta > 0 )
if
(
!
demux2_Control
(
p_input
->
slave
[
i
]
->
p_demux
,
DEMUX_GET_META
,
&
p_meta_slave
)
)
{
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->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] );
p_meta
=
p_meta_slave
;
}
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
++
)
{
vlc_meta_t
*
tk
=
p_meta
->
track
[
i
];
int
j
;
msg_Dbg( p_input, " - track[%d]:", i );
if
(
tk
->
i_meta
>
0
)
{
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
++
)
{
msg_Dbg
(
p_input
,
" - '%s' = '%s'"
,
_
(
tk
->
name
[
j
]),
...
...
@@ -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
{
vlc_meta_Delete
(
p_meta
);
}
}
if( p_meta_user ) vlc_meta_Delete( p_meta_user );
/* Get length */
if( !demux_Control( p_input, DEMUX_GET_LENGTH, &i_length ) &&
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;
msg_Dbg
(
p_input
,
"`%s' sucessfully opened"
,
p_input
->
input
.
p_item
->
psz_uri
);
if( f_pos >= 1.0 )
{
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 );
/* initialization is complete */
p_input
->
i_state
=
PLAYING_S
;
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 */
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 );
}
return
VLC_SUCCESS
;
/* Look for and add subtitle files */
var_Get( p_input, "sub-file", &val );
if( val.psz_string && *val.psz_string )
{
subtitle_demux_t *p_sub;
error:
if
(
p_input
->
p_es_out
)
input_EsOutDelete
(
p_input
->
p_es_out
);
msg_Dbg( p_input, "force subtitle: %s", val.psz_string );
if( ( p_sub = subtitle_New( p_input, strdup(val.psz_string),
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;
if
(
p_input
->
p_sout
)
sout_DeleteInstance
(
p_input
->
p_sout
);
var_Get( p_input, "sub-autodetect-file", &val );
var_Get( p_input, "sub-autodetect-path", &val1 );
if( val.b_bool )
{
subtitle_demux_t *p_sub;
int i;
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 );
/* 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
;
es_out_Control( p_input->p_es_out, ES_OUT_SET_ACTIVE, VLC_TRUE );
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
return
VLC_EGENERIC
;
}
/*****************************************************************************
...
...
@@ -1814,10 +1650,7 @@ static void SlaveDemux( input_thread_t *p_input )
i_ret
=
0
;
break
;
}
#if 0
msg_Dbg( p_input, "slave time="I64Fd" input="I64Fd,
i_stime, i_time );
#endif
if
(
i_stime
>=
i_time
)
break
;
...
...
@@ -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
...
...
src/input/var.c
View file @
bbcddc3e
...
...
@@ -427,6 +427,16 @@ void input_ConfigVarInit ( input_thread_t *p_input )
var_Change
(
p_input
,
"seekable"
,
VLC_VAR_SETVALUE
,
&
val
,
NULL
);
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