mirror of
https://github.com/mpv-player/mpv
synced 2025-01-08 08:00:17 +00:00
32be72623b
--audio-file-auto, --cover-art-auto, and --sub-auto all work by using an internally hardcoded list that determine what file extensions get recognized. This is fine and people periodically update it, but we can actually expose this as a stringlist option instead. This way users can add or remove any file extension for any type. For the most part, this is pretty pretty easy and involves making sub_exts, etc. the defaults for the new options (--audio-file-auto-exts, --cover-art-auto-exts, and --sub-auto-exts). There's actually one slight complication however. The input code uses mp_might_be_subtitle_file which guesses if the file drag and dropped file is a subtitle. The input ctx has no access to mpctx so we have to be clever here. For this, the trick is to recognize that we can leverage the m_option_change_callback. We add a new flag, UPDATE_SUB_EXTS, which fires when the player starts up. Then in the callback, we can set the value of sub_exts in external_files to opts->sub_auto_exts. Whenever the option updates, the callback is fired again and sub_exts updates. That way mp_might_be_subtitle_file can just operate off of this global variable instead of trying to mess with the core mpv state directly. Fixes #12000.
39 lines
1.2 KiB
C
39 lines
1.2 KiB
C
/*
|
|
* This file is part of mpv.
|
|
*
|
|
* mpv is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* mpv is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef MPLAYER_FIND_SUBFILES_H
|
|
#define MPLAYER_FIND_SUBFILES_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
struct subfn {
|
|
int type; // STREAM_SUB/STREAM_AUDIO/STREAM_VIDEO(coverart)
|
|
int priority;
|
|
char *fname;
|
|
char *lang;
|
|
};
|
|
|
|
struct mpv_global;
|
|
struct MPOpts;
|
|
struct subfn *find_external_files(struct mpv_global *global, const char *fname,
|
|
struct MPOpts *opts);
|
|
|
|
bool mp_might_be_subtitle_file(const char *filename);
|
|
void mp_update_subtitle_exts(struct MPOpts *opts);
|
|
|
|
#endif /* MPLAYER_FINDFILES_H */
|