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
291b59b6
Commit
291b59b6
authored
Apr 23, 2004
by
Yoann Peronneau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* src/input/subtitles.c: corrected bug in subtitle detection
* src/libvlc.h: modified subtitle paths for Windows
parent
b24bd76d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
72 additions
and
74 deletions
+72
-74
src/input/subtitles.c
src/input/subtitles.c
+71
-73
src/libvlc.h
src/libvlc.h
+1
-1
No files found.
src/input/subtitles.c
View file @
291b59b6
...
...
@@ -151,54 +151,28 @@ static int compare_sub_priority( const void *a, const void *b )
}
/**
* Detect subtitle files.
*
* When called this function will split up the psz_fname string into a
* directory, filename and extension. It then opens the directory
* in which the file resides and tries to find possible matches of
* subtitles files.
*
* \ingroup Demux
* \param p_this the calling \ref input_thread_t
* \param psz_path a list of subdirectories (separated by a ',') to look in.
* \param psz_fname the complete filename to base the search on.
* \return a NULL terminated array of filenames with detected possible subtitles.
* The array contains max MAX_SUBTITLE_FILES items and you need to free it after use.
* Convert a list of paths separated by ',' to a char**
*/
char
**
subtitles_Detect
(
input_thread_t
*
p_this
,
char
*
psz_path
,
char
*
psz_fname
)
static
char
**
paths_to_list
(
char
*
psz_dir
,
char
*
psz_path
)
{
/* variables to be used for derivatives of psz_fname */
char
*
f_dir
,
*
f_fname
,
*
f_fname_noext
,
*
f_fname_trim
,
*
tmp
;
/* variables to be used for derivatives FILE *f */
char
*
tmp_fname_noext
,
*
tmp_fname_trim
,
*
tmp_fname_ext
,
*
tmpresult
;
vlc_value_t
fuzzy
;
int
len
,
i
,
j
,
i_sub_count
,
i_nb_subdirs
;
unsigned
int
k
,
i_max_sub_len
;
subfn
*
result
;
/* unsorted results */
char
**
result2
;
/* sorted results */
unsigned
int
i
,
k
,
i_nb_subdirs
;
char
**
subdirs
;
/* list of subdirectories to look in */
FILE
*
f
;
DIR
*
d
;
struct
dirent
*
de
;
i_nb_subdirs
=
1
;
for
(
k
=
0
;
k
<
strlen
(
psz_path
);
k
++
)
{
if
(
psz_path
[
k
]
==
','
)
if
(
psz_path
[
k
]
==
','
)
{
i_nb_subdirs
++
;
}
}
i_max_sub_len
=
0
;
if
(
i_nb_subdirs
>
0
)
{
char
*
psz_parser
;
subdirs
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
i_nb_subdirs
);
char
*
psz_parser
,
*
psz_temp
;
subdirs
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
(
i_nb_subdirs
+
1
)
);
memset
(
subdirs
,
0
,
sizeof
(
char
*
)
*
(
i_nb_subdirs
+
1
)
);
i
=
0
;
psz_parser
=
psz_path
;
while
(
psz_parser
&&
*
psz_parser
)
...
...
@@ -215,23 +189,66 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
psz_parser
++
;
}
}
subdirs
[
i
]
=
strdup
(
psz_subdir
);
i
++
;
if
(
strlen
(
psz_subdir
)
>
i_max_sub_len
)
if
(
strlen
(
psz_subdir
)
>
0
)
{
i_max_sub_len
=
strlen
(
psz_subdir
);
psz_temp
=
(
char
*
)
malloc
(
strlen
(
psz_dir
)
+
strlen
(
psz_subdir
)
+
2
);
if
(
psz_temp
)
{
sprintf
(
psz_temp
,
"%s%s%c"
,
psz_subdir
[
0
]
==
'.'
?
psz_dir
:
""
,
psz_subdir
,
psz_subdir
[
strlen
(
psz_subdir
)
-
1
]
==
DIRECTORY_SEPARATOR
?
'\0'
:
DIRECTORY_SEPARATOR
);
subdirs
[
i
]
=
psz_temp
;
i
++
;
}
}
}
}
else
subdirs
[
i
]
=
NULL
;
}
else
{
i_nb_subdirs
=
-
1
;
subdirs
=
NULL
;
}
return
subdirs
;
}
/**
* Detect subtitle files.
*
* When called this function will split up the psz_fname string into a
* directory, filename and extension. It then opens the directory
* in which the file resides and tries to find possible matches of
* subtitles files.
*
* \ingroup Demux
* \param p_this the calling \ref input_thread_t
* \param psz_path a list of subdirectories (separated by a ',') to look in.
* \param psz_fname the complete filename to base the search on.
* \return a NULL terminated array of filenames with detected possible subtitles.
* The array contains max MAX_SUBTITLE_FILES items and you need to free it after use.
*/
char
**
subtitles_Detect
(
input_thread_t
*
p_this
,
char
*
psz_path
,
char
*
psz_fname
)
{
/* variables to be used for derivatives of psz_fname */
char
*
f_dir
,
*
f_fname
,
*
f_fname_noext
,
*
f_fname_trim
,
*
tmp
;
/* variables to be used for derivatives FILE *f */
char
*
tmp_fname_noext
,
*
tmp_fname_trim
,
*
tmp_fname_ext
,
*
tmpresult
;
vlc_value_t
fuzzy
;
int
len
,
i
,
j
,
i_sub_count
;
subfn
*
result
;
/* unsorted results */
char
**
result2
;
/* sorted results */
char
**
tmp_subdirs
,
**
subdirs
;
/* list of subdirectories to look in */
FILE
*
f
;
DIR
*
d
;
struct
dirent
*
de
;
i_sub_count
=
0
;
len
=
(
strlen
(
psz_fname
)
>
256
?
strlen
(
psz_fname
)
:
256
)
+
(
i_max_sub_len
>
256
?
i_max_sub_len
:
256
)
+
2
;
len
=
strlen
(
psz_fname
)
>
256
?
strlen
(
psz_fname
)
:
256
;
f_dir
=
(
char
*
)
malloc
(
len
);
f_fname
=
(
char
*
)
malloc
(
len
);
...
...
@@ -269,38 +286,18 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
strcpy_trim
(
f_fname_trim
,
f_fname_noext
);
var_Get
(
p_this
,
"sub-autodetect-fuzzy"
,
&
fuzzy
);
tmp_subdirs
=
paths_to_list
(
f_dir
,
psz_path
);
subdirs
=
tmp_subdirs
;
for
(
j
=
-
1
;
j
<
i_nb_subdirs
;
j
++
)
for
(
j
=
-
1
;
j
==
-
1
||
(
j
>=
0
&&
subdirs
!=
NULL
&&
*
subdirs
!=
NULL
);
j
++
)
{
if
(
j
>=
0
)
{
if
(
subdirs
[
j
]
&&
subdirs
[
j
][
0
]
==
'.'
)
{
char
*
psz_dir
;
psz_dir
=
(
char
*
)
malloc
(
len
);
if
(
psz_dir
)
{
sprintf
(
psz_dir
,
"%s%s"
,
f_dir
,
subdirs
[
j
]
);
d
=
opendir
(
psz_dir
);
free
(
psz_dir
);
}
else
d
=
NULL
;
}
else
{
d
=
opendir
(
subdirs
[
j
]
);
}
}
else
{
d
=
opendir
(
f_dir
);
}
d
=
opendir
(
j
<
0
?
f_dir
:
*
subdirs
);
if
(
d
)
{
int
b_found
;
msg_Dbg
(
p_this
,
"looking for a subtitle file in %s"
,
j
<
0
?
f_dir
:
subdirs
[
j
]
);
j
<
0
?
f_dir
:
*
subdirs
);
while
(
(
de
=
readdir
(
d
)
)
)
{
/* retrieve various parts of the filename */
...
...
@@ -355,7 +352,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
if
(
i_prio
>=
fuzzy
.
i_int
)
{
sprintf
(
tmpresult
,
"%s%s"
,
j
==
0
?
f_dir
:
psz_path
,
sprintf
(
tmpresult
,
"%s%s"
,
j
==
-
1
?
f_dir
:
*
subdirs
,
de
->
d_name
);
msg_Dbg
(
p_this
,
"autodetected subtitle: %s with "
"priority %d"
,
de
->
d_name
,
i_prio
);
...
...
@@ -372,9 +369,10 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
}
closedir
(
d
);
}
free
(
*
subdirs
++
);
}
if
(
subdirs
)
free
(
subdirs
);
if
(
tmp_subdirs
)
free
(
tmp_
subdirs
);
free
(
f_dir
);
free
(
f_fname
);
...
...
src/libvlc.h
View file @
291b59b6
...
...
@@ -847,7 +847,7 @@ vlc_module_begin();
add_integer
(
"sub-autodetect-fuzzy"
,
3
,
NULL
,
SUB_FUZZY_TEXT
,
SUB_FUZZY_LONGTEXT
,
VLC_TRUE
);
#if defined( WIN32 )
add_string
(
"sub-autodetect-path"
,
".
\\
Subtitles, .
\\
subtitles"
,
NULL
,
add_string
(
"sub-autodetect-path"
,
".
\\
subtitles"
,
NULL
,
#else
add_string
(
"sub-autodetect-path"
,
"./Subtitles, ./subtitles"
,
NULL
,
#endif
...
...
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