[MPlayer-dev-eng] [PATCH] Subtitles directories
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Sun Nov 21 21:39:03 CET 2010
On Sun, Nov 21, 2010 at 05:46:16PM +0100, Clément Bœsch wrote:
> +/**
> + * \brief Append a subtitle to a list
> + * \param dst Destination subtitles list
> + * \param src Source subtitle
> + * \warning Source data are copied and not reallocated
> + */
> +static int append_sub(struct sub_list *dst, struct subfn *src)
> {
> + if (dst->sid >= MAX_SUBTITLE_FILES)
> + return -1;
> + memcpy(&dst->subs[dst->sid], src, sizeof(*src));
> + dst->sid++;
> + return 0;
Either getting rid of this function or at least making it take
the name etc. as arguments and having it do the strdup will
make things even simpler.
> @@ -2012,8 +2013,7 @@ char** sub_filenames(const char* path, char *fname)
> }
> if (!prio) {
> // doesn't contain the movie name
> - // don't try in the mplayer subtitle directory
> - if ((j == 0) && (sub_match_fuzziness >= 2)) {
> + if (sub_match_fuzziness >= 2) {
Huh? Where did handling of this end up? Loading any subtitle file anywhere in the
path doesn't sound to me like it would ever be desireable.
> + path = realloc(path, plen + strlen(dir) + 1);
> + if (!path)
> + return -1;
memleak in case realloc fails.
> + strcpy(path + plen, dir);
av_strlcpy might make it more obvious.
> + // Load subtitles specified by sub option with highest priority
> + if (sub_name) {
> + int i;
> + for (i = 0; sub_name[i]; i++) {
> + struct subfn sub = {
> + .fname = strdup(sub_name[i]),
> + .priority = INT_MAX - i,
> + .noerr = 0
> + };
> + append_sub(&slist, &sub);
> + }
Seems a bit overkill to push them through qsort.
Though it might be the simplest way.
> +.br
> +/tmp/\:subs/
> +.br
> +~/.mplayer/\:sub/
> +.RE
> +.PD 1
> +.
> +.TP
> .B \-subdelay <sec>
> Delays subtitles by <sec> seconds.
> Can be negative.
> @@ -11714,14 +11735,6 @@ font directory (There must be a font.desc file and files with .RAW extension.)
> .TP
> ~/.mplayer/\:DVDkeys/
> cached CSS keys
> -.
> -.TP
> -Assuming that /path/\:to/\:movie.avi is played, MPlayer searches for sub files
> -in this order:
> -.RS
> -/path/\:to/\:movie.sub
> -.br
> -~/.mplayer/\:sub/\:movie.sub
> .RE
> .PD 1
> .
> diff --git a/cfg-common.h b/cfg-common.h
> index c6dfef0..d50ebe2 100644
> --- a/cfg-common.h
> +++ b/cfg-common.h
> @@ -562,6 +562,7 @@ const m_option_t common_opts[] = {
> // ------------------------- subtitles options --------------------
>
> {"sub", &sub_name, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
> + {"subdirs", &sub_dirs, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
> #ifdef CONFIG_FRIBIDI
> {"fribidi-charset", &fribidi_charset, CONF_TYPE_STRING, 0, 0, 0, NULL},
> {"flip-hebrew", &flip_hebrew, CONF_TYPE_FLAG, 0, 0, 1, NULL},
> diff --git a/mencoder.c b/mencoder.c
> index 6efe907..403fbac 100644
> --- a/mencoder.c
> +++ b/mencoder.c
> @@ -179,6 +179,7 @@ char *font_name=NULL;
> char *sub_font_name=NULL;
> float font_factor=0.75;
> char **sub_name=NULL;
> +char **sub_dirs = NULL;
> float sub_delay=0;
> float sub_fps=0;
> int sub_auto = 0;
> diff --git a/mpcommon.h b/mpcommon.h
> index 19110d6..4a2147e 100644
> --- a/mpcommon.h
> +++ b/mpcommon.h
> @@ -35,6 +35,7 @@ extern int sub_auto;
> extern float sub_delay;
> extern float sub_fps;
> extern char **sub_name;
> +extern char **sub_dirs;
> extern char *font_name;
> extern char *sub_font_name;
> extern char *audio_lang;
> diff --git a/mplayer.c b/mplayer.c
> index 3682b29..7ebc3cd 100644
> --- a/mplayer.c
> +++ b/mplayer.c
> @@ -292,6 +292,7 @@ char *font_name=NULL;
> char *sub_font_name=NULL;
> float font_factor=0.75;
> char **sub_name=NULL;
> +char **sub_dirs = NULL;
> float sub_delay=0;
> float sub_fps=0;
> int sub_auto = 1;
> diff --git a/sub/subreader.c b/sub/subreader.c
> index 94d0877..fba9c82 100644
> --- a/sub/subreader.c
> +++ b/sub/subreader.c
> @@ -2117,6 +2117,13 @@ static struct sub_list get_full_sub_list(char *fname)
> // Load subtitles from current media directory
> track_sub_directory("", fname, &slist);
>
> + // Load subtitles in dirs specified by subdirs option
> + if (sub_dirs) {
> + int i;
> + for (i = 0; sub_dirs[i]; i++)
> + track_sub_directory(sub_dirs[i], fname, &slist);
> + }
> +
> // Load subtitles in ~/.mplayer/sub
> mp_subdir = get_path("sub/");
> if (mp_subdir)
> --
> 1.7.3.2
>
> _______________________________________________
> MPlayer-dev-eng mailing list
> MPlayer-dev-eng at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
More information about the MPlayer-dev-eng
mailing list