Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
ea0b76fe
Commit
ea0b76fe
authored
Dec 13, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improved the way input-list is given to stream_AccessNew.
parent
8e2e5e13
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
113 additions
and
84 deletions
+113
-84
src/input/input.c
src/input/input.c
+64
-41
src/input/stream.c
src/input/stream.c
+24
-39
src/input/stream.h
src/input/stream.h
+25
-4
No files found.
src/input/input.c
View file @
ea0b76fe
...
@@ -98,8 +98,9 @@ static void SlaveSeek( input_thread_t *p_input );
...
@@ -98,8 +98,9 @@ static void SlaveSeek( input_thread_t *p_input );
static
void
InputMetaUser
(
input_thread_t
*
p_input
,
vlc_meta_t
*
p_meta
);
static
void
InputMetaUser
(
input_thread_t
*
p_input
,
vlc_meta_t
*
p_meta
);
static
void
InputUpdateMeta
(
input_thread_t
*
p_input
,
vlc_meta_t
*
p_meta
);
static
void
InputUpdateMeta
(
input_thread_t
*
p_input
,
vlc_meta_t
*
p_meta
);
static
char
*
InputGetExtraFiles
(
input_thread_t
*
p_input
,
static
void
InputGetExtraFiles
(
input_thread_t
*
p_input
,
const
char
*
psz_access
,
const
char
*
psz_path
);
int
*
pi_list
,
char
***
pppsz_list
,
const
char
*
psz_access
,
const
char
*
psz_path
);
static
void
AppendAttachment
(
int
*
pi_attachment
,
input_attachment_t
***
ppp_attachment
,
static
void
AppendAttachment
(
int
*
pi_attachment
,
input_attachment_t
***
ppp_attachment
,
int
i_new
,
input_attachment_t
**
pp_new
);
int
i_new
,
input_attachment_t
**
pp_new
);
...
@@ -2482,27 +2483,55 @@ static int InputSourceInit( input_thread_t *p_input,
...
@@ -2482,27 +2483,55 @@ static int InputSourceInit( input_thread_t *p_input,
var_Set
(
p_input
,
"can-seek"
,
val
);
var_Set
(
p_input
,
"can-seek"
,
val
);
}
}
/* TODO (maybe)
/* */
* do not let stream_AccessNew access input-list
int
i_input_list
;
* but give it a list of access ? */
char
**
ppsz_input_list
;
TAB_INIT
(
i_input_list
,
ppsz_input_list
);
/* On master stream only, use input-list */
if
(
&
p_input
->
p
->
input
==
in
)
{
char
*
psz_list
;
char
*
psz_parser
;
psz_list
=
psz_parser
=
var_CreateGetNonEmptyString
(
p_input
,
"input-list"
);
while
(
psz_parser
&&
*
psz_parser
)
{
char
*
p
=
strchr
(
psz_parser
,
','
);
if
(
p
)
*
p
++
=
'\0'
;
if
(
*
psz_parser
)
{
char
*
psz_name
=
strdup
(
psz_parser
);
if
(
psz_name
)
TAB_APPEND
(
i_input_list
,
ppsz_input_list
,
psz_name
);
}
psz_parser
=
p
;
}
free
(
psz_list
);
}
/* Autodetect extra files if none specified */
/* Autodetect extra files if none specified */
char
*
psz_input_list
=
var_CreateGetNonEmptyString
(
p_input
,
"input-list"
);
if
(
i_input_list
<=
0
)
if
(
!
psz_input_list
)
{
{
char
*
psz_extra_files
=
InputGetExtraFiles
(
p_input
,
psz_access
,
psz_path
);
InputGetExtraFiles
(
p_input
,
&
i_input_list
,
&
ppsz_input_list
,
if
(
psz_extra_files
)
psz_access
,
psz_path
);
var_SetString
(
p_input
,
"input-list"
,
psz_extra_files
);
free
(
psz_extra_files
);
}
}
if
(
i_input_list
>
0
)
TAB_APPEND
(
i_input_list
,
ppsz_input_list
,
NULL
);
/* Create the stream_t */
/* Create the stream_t */
in
->
p_stream
=
stream_AccessNew
(
in
->
p_access
);
in
->
p_stream
=
stream_AccessNew
(
in
->
p_access
,
ppsz_input_list
);
if
(
ppsz_input_list
)
/* Restore old value */
{
if
(
!
psz_input_list
)
for
(
int
i
=
0
;
ppsz_input_list
[
i
]
!=
NULL
;
i
++
)
var_SetString
(
p_input
,
"input-list"
,
""
);
free
(
ppsz_input_list
[
i
]
);
free
(
psz_input_list
);
TAB_CLEAN
(
i_input_list
,
ppsz_input_list
);
}
if
(
in
->
p_stream
==
NULL
)
if
(
in
->
p_stream
==
NULL
)
{
{
...
@@ -2875,22 +2904,26 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta
...
@@ -2875,22 +2904,26 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta
* InputGetExtraFiles
* InputGetExtraFiles
* Autodetect extra input list
* Autodetect extra input list
*****************************************************************************/
*****************************************************************************/
static
char
*
InputGetExtraFiles
(
input_thread_t
*
p_input
,
static
void
InputGetExtraFiles
(
input_thread_t
*
p_input
,
const
char
*
psz_access
,
const
char
*
psz_path
)
int
*
pi_list
,
char
***
pppsz_list
,
const
char
*
psz_access
,
const
char
*
psz_path
)
{
{
char
*
psz_list
=
NULL
;
int
i_list
;
char
**
ppsz_list
;
TAB_INIT
(
i_list
,
ppsz_list
);
if
(
(
psz_access
&&
*
psz_access
&&
strcmp
(
psz_access
,
"file"
)
)
||
!
psz_path
)
if
(
(
psz_access
&&
*
psz_access
&&
strcmp
(
psz_access
,
"file"
)
)
||
!
psz_path
)
return
NULL
;
goto
exit
;
const
char
*
psz_ext
=
strrchr
(
psz_path
,
'.'
);
const
char
*
psz_ext
=
strrchr
(
psz_path
,
'.'
);
if
(
!
psz_ext
||
strcmp
(
psz_ext
,
".001"
)
)
if
(
!
psz_ext
||
strcmp
(
psz_ext
,
".001"
)
)
return
NULL
;
goto
exit
;
char
*
psz_file
=
strdup
(
psz_path
);
char
*
psz_file
=
strdup
(
psz_path
);
if
(
!
psz_file
)
if
(
!
psz_file
)
return
NULL
;
goto
exit
;
/* Try to list .xyz files */
/* Try to list .xyz files */
for
(
int
i
=
2
;
i
<
999
;
i
++
)
for
(
int
i
=
2
;
i
<
999
;
i
++
)
...
@@ -2900,30 +2933,20 @@ static char *InputGetExtraFiles( input_thread_t *p_input,
...
@@ -2900,30 +2933,20 @@ static char *InputGetExtraFiles( input_thread_t *p_input,
snprintf
(
psz_ext
,
5
,
".%.3d"
,
i
);
snprintf
(
psz_ext
,
5
,
".%.3d"
,
i
);
if
(
utf8_stat
(
psz_file
,
&
st
)
if
(
utf8_stat
(
psz_file
,
&
st
)
||
||
!
S_ISREG
(
st
.
st_mode
)
||
!
st
.
st_size
)
!
S_ISREG
(
st
.
st_mode
)
||
!
st
.
st_size
)
continue
;
continue
;
msg_Dbg
(
p_input
,
"Detected extra file `%s'"
,
psz_file
);
msg_Dbg
(
p_input
,
"Detected extra file `%s'"
,
psz_file
);
char
*
psz_tmp
=
strdup
(
psz_file
);
if
(
psz_list
)
if
(
psz_tmp
)
{
TAB_APPEND
(
i_list
,
ppsz_list
,
psz_tmp
);
char
*
psz_old
=
psz_list
;
/* FIXME how to handle file with ',' ?*/
if
(
asprintf
(
&
psz_list
,
"%s,%s"
,
psz_old
,
psz_file
)
<
0
)
{
psz_list
=
psz_old
;
break
;
}
}
else
{
psz_list
=
strdup
(
psz_file
);
}
}
}
free
(
psz_file
);
free
(
psz_file
);
return
psz_list
;
exit:
*
pi_list
=
i_list
;
*
pppsz_list
=
ppsz_list
;
}
}
...
...
src/input/stream.c
View file @
ea0b76fe
...
@@ -266,7 +266,7 @@ stream_t *__stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
...
@@ -266,7 +266,7 @@ stream_t *__stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
return
NULL
;
return
NULL
;
}
}
if
(
!
(
p_res
=
stream_AccessNew
(
p_access
)
)
)
if
(
!
(
p_res
=
stream_AccessNew
(
p_access
,
NULL
)
)
)
{
{
access_Delete
(
p_access
);
access_Delete
(
p_access
);
return
NULL
;
return
NULL
;
...
@@ -276,16 +276,15 @@ stream_t *__stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
...
@@ -276,16 +276,15 @@ stream_t *__stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
return
p_res
;
return
p_res
;
}
}
stream_t
*
stream_AccessNew
(
access_t
*
p_access
)
stream_t
*
stream_AccessNew
(
access_t
*
p_access
,
char
**
ppsz_list
)
{
{
stream_t
*
s
=
stream_CommonNew
(
VLC_OBJECT
(
p_access
)
);
stream_t
*
s
=
stream_CommonNew
(
VLC_OBJECT
(
p_access
)
);
stream_sys_t
*
p_sys
;
stream_sys_t
*
p_sys
;
char
*
psz_list
=
NULL
;
if
(
!
s
)
if
(
!
s
)
return
NULL
;
return
NULL
;
s
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
stream_sys_t
)
);
s
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
*
p_sys
)
);
if
(
!
p_sys
)
if
(
!
p_sys
)
{
{
stream_CommonDelete
(
s
);
stream_CommonDelete
(
s
);
...
@@ -317,67 +316,54 @@ stream_t *stream_AccessNew( access_t *p_access )
...
@@ -317,67 +316,54 @@ stream_t *stream_AccessNew( access_t *p_access )
p_sys
->
stat
.
i_seek_count
=
0
;
p_sys
->
stat
.
i_seek_count
=
0
;
p_sys
->
stat
.
i_seek_time
=
0
;
p_sys
->
stat
.
i_seek_time
=
0
;
p_sys
->
i_list
=
0
;
TAB_INIT
(
p_sys
->
i_list
,
p_sys
->
list
);
p_sys
->
list
=
0
;
p_sys
->
i_list_index
=
0
;
p_sys
->
i_list_index
=
0
;
p_sys
->
p_list_access
=
0
;
p_sys
->
p_list_access
=
NULL
;
/* Get the additional list of inputs if any (for concatenation) */
/* Get the additional list of inputs if any (for concatenation) */
if
(
(
psz_list
=
var_CreateGetString
(
s
,
"input-list"
))
&&
*
psz_list
)
if
(
ppsz_list
&&
ppsz_list
[
0
]
)
{
{
access_entry_t
*
p_entry
=
malloc
(
sizeof
(
access_entry_t
)
);
access_entry_t
*
p_entry
=
malloc
(
sizeof
(
*
p_entry
)
);
if
(
p_entry
==
NULL
)
if
(
!
p_entry
)
goto
error
;
goto
error
;
char
*
psz_name
,
*
psz_parser
=
psz_name
=
psz_list
;
p_sys
->
p_list_access
=
p_access
;
p_entry
->
i_size
=
p_access
->
info
.
i_size
;
p_entry
->
i_size
=
p_access
->
info
.
i_size
;
p_entry
->
psz_path
=
strdup
(
p_access
->
psz_path
);
p_entry
->
psz_path
=
strdup
(
p_access
->
psz_path
);
if
(
p_entry
->
psz_path
==
NULL
)
if
(
!
p_entry
->
psz_path
)
{
{
free
(
p_entry
);
free
(
p_entry
);
goto
error
;
goto
error
;
}
}
p_sys
->
p_list_access
=
p_access
;
TAB_APPEND
(
p_sys
->
i_list
,
p_sys
->
list
,
p_entry
);
TAB_APPEND
(
p_sys
->
i_list
,
p_sys
->
list
,
p_entry
);
msg_Dbg
(
p_access
,
"adding file `%s', (%"
PRId64
" bytes)"
,
msg_Dbg
(
p_access
,
"adding file `%s', (%"
PRId64
" bytes)"
,
p_entry
->
psz_path
,
p_access
->
info
.
i_size
);
p_entry
->
psz_path
,
p_access
->
info
.
i_size
);
while
(
psz_name
&&
*
psz_name
)
for
(
int
i
=
0
;
ppsz_list
[
i
]
!=
NULL
;
i
++
)
{
{
psz_parser
=
strchr
(
psz_name
,
','
);
char
*
psz_name
=
strdup
(
ppsz_list
[
i
]
);
if
(
psz_parser
)
*
psz_parser
=
0
;
psz_name
=
strdup
(
psz_name
);
if
(
!
psz_name
)
if
(
psz_name
)
break
;
{
access_t
*
p_tmp
=
access_New
(
p_access
,
p_access
->
psz_access
,
""
,
psz_name
);
if
(
!
p_tmp
)
access_t
*
p_tmp
=
access_New
(
p_access
,
{
p_access
->
psz_access
,
""
,
psz_name
);
psz_name
=
psz_parser
;
if
(
!
p_tmp
)
if
(
psz_name
)
psz_name
++
;
continue
;
continue
;
}
msg_Dbg
(
p_access
,
"adding file `%s', (%"
PRId64
" bytes)"
,
msg_Dbg
(
p_access
,
"adding file `%s', (%"
PRId64
" bytes)"
,
psz_name
,
p_tmp
->
info
.
i_size
);
psz_name
,
p_tmp
->
info
.
i_size
);
p_entry
=
malloc
(
sizeof
(
access_entry_t
)
);
p_entry
=
malloc
(
sizeof
(
*
p_entry
)
);
if
(
p_entry
==
NULL
)
if
(
p_entry
)
goto
error
;
{
p_entry
->
i_size
=
p_tmp
->
info
.
i_size
;
p_entry
->
i_size
=
p_tmp
->
info
.
i_size
;
p_entry
->
psz_path
=
psz_name
;
p_entry
->
psz_path
=
psz_name
;
TAB_APPEND
(
p_sys
->
i_list
,
p_sys
->
list
,
p_entry
);
TAB_APPEND
(
p_sys
->
i_list
,
p_sys
->
list
,
p_entry
);
access_Delete
(
p_tmp
);
}
}
access_Delete
(
p_tmp
);
psz_name
=
psz_parser
;
if
(
psz_name
)
psz_name
++
;
}
}
}
}
FREENULL
(
psz_list
);
/* Peek */
/* Peek */
p_sys
->
i_peek
=
0
;
p_sys
->
i_peek
=
0
;
...
@@ -464,7 +450,6 @@ error:
...
@@ -464,7 +450,6 @@ error:
while
(
p_sys
->
i_list
>
0
)
while
(
p_sys
->
i_list
>
0
)
free
(
p_sys
->
list
[
--
(
p_sys
->
i_list
)]
);
free
(
p_sys
->
list
[
--
(
p_sys
->
i_list
)]
);
free
(
p_sys
->
list
);
free
(
p_sys
->
list
);
free
(
psz_list
);
free
(
s
->
p_sys
);
free
(
s
->
p_sys
);
vlc_object_detach
(
s
);
vlc_object_detach
(
s
);
stream_CommonDelete
(
s
);
stream_CommonDelete
(
s
);
...
...
src/input/stream.h
View file @
ea0b76fe
...
@@ -44,14 +44,35 @@ struct stream_text_t
...
@@ -44,14 +44,35 @@ struct stream_text_t
stream_t
*
stream_CommonNew
(
vlc_object_t
*
);
stream_t
*
stream_CommonNew
(
vlc_object_t
*
);
void
stream_CommonDelete
(
stream_t
*
);
void
stream_CommonDelete
(
stream_t
*
);
/* */
/**
stream_t
*
stream_AccessNew
(
access_t
*
p_access
);
* This function creates a stream_t from a provided access_t.
*
* An optional NULL terminated list of file may be provided. The content
* of these extra files will be concatenated after to the main access.
*
* XXX ppsz_list is treated as const (I failed to avoid a warning when
* using const keywords for pointer of pointers)
*/
stream_t
*
stream_AccessNew
(
access_t
*
p_access
,
char
**
ppsz_list
);
/* */
/**
* This function creates a new stream_t filter.
*
* You must release it using stream_Delete unless it is used as a
* source to another filter.
*/
stream_t
*
stream_FilterNew
(
stream_t
*
p_source
,
stream_t
*
stream_FilterNew
(
stream_t
*
p_source
,
const
char
*
psz_stream_filter
);
const
char
*
psz_stream_filter
);
/* */
/**
* This function creates a chain of filters:
* - first, automatic probed stream filters are inserted.
* - then, optional user filters (configured by psz_chain) are inserted.
* - finaly, an optional record filter is inserted if b_record is true.
*
* You must release the returned value using stream_Delete unless it is used as a
* source to another filter.
*/
stream_t
*
stream_FilterChainNew
(
stream_t
*
p_source
,
stream_t
*
stream_FilterChainNew
(
stream_t
*
p_source
,
const
char
*
psz_chain
,
const
char
*
psz_chain
,
bool
b_record
);
bool
b_record
);
...
...
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