mirror of https://github.com/mpv-player/mpv
player: get rid of mpv_global.opts
This was always a legacy thing. Remove it by applying an orgy of mp_get_config_group() calls, and sometimes m_config_cache_alloc() or mp_read_option_raw(). win32 changes untested.
This commit is contained in:
parent
a770006c6e
commit
f8ab59eacd
|
@ -37,6 +37,7 @@
|
||||||
#include "demux/stheader.h"
|
#include "demux/stheader.h"
|
||||||
#include "filters/f_decoder_wrapper.h"
|
#include "filters/f_decoder_wrapper.h"
|
||||||
#include "filters/filter_internal.h"
|
#include "filters/filter_internal.h"
|
||||||
|
#include "options/m_config.h"
|
||||||
#include "options/options.h"
|
#include "options/options.h"
|
||||||
|
|
||||||
struct priv {
|
struct priv {
|
||||||
|
@ -80,8 +81,9 @@ static bool init(struct mp_filter *da, struct mp_codec_params *codec,
|
||||||
const char *decoder)
|
const char *decoder)
|
||||||
{
|
{
|
||||||
struct priv *ctx = da->priv;
|
struct priv *ctx = da->priv;
|
||||||
struct MPOpts *mpopts = da->global->opts;
|
struct MPOpts *mpopts = mp_get_config_group(ctx, da->global, GLOBAL_CONFIG);
|
||||||
struct ad_lavc_params *opts = mpopts->ad_lavc_params;
|
struct ad_lavc_params *opts =
|
||||||
|
mp_get_config_group(ctx, da->global, &ad_lavc_conf);
|
||||||
AVCodecContext *lavc_context;
|
AVCodecContext *lavc_context;
|
||||||
AVCodec *lavc_codec;
|
AVCodec *lavc_codec;
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@ struct mpv_global {
|
||||||
struct m_config_shadow *config;
|
struct m_config_shadow *config;
|
||||||
struct mp_client_api *client_api;
|
struct mp_client_api *client_api;
|
||||||
char *configdir;
|
char *configdir;
|
||||||
|
|
||||||
// Using this is deprecated and should be avoided (missing synchronization).
|
|
||||||
// Use m_config_cache to access mpv_global.config instead.
|
|
||||||
struct MPOpts *opts;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
11
common/msg.c
11
common/msg.c
|
@ -460,8 +460,6 @@ void mp_msg_init(struct mpv_global *global)
|
||||||
struct mp_log *log = mp_log_new(root, &dummy, "");
|
struct mp_log *log = mp_log_new(root, &dummy, "");
|
||||||
|
|
||||||
global->log = log;
|
global->log = log;
|
||||||
|
|
||||||
mp_msg_update_msglevels(global);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If opt is different from *current_path, reopen *file and update *current_path.
|
// If opt is different from *current_path, reopen *file and update *current_path.
|
||||||
|
@ -501,13 +499,9 @@ static void reopen_file(char *opt, char **current_path, FILE **file,
|
||||||
talloc_free(tmp);
|
talloc_free(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mp_msg_update_msglevels(struct mpv_global *global)
|
void mp_msg_update_msglevels(struct mpv_global *global, struct MPOpts *opts)
|
||||||
{
|
{
|
||||||
struct mp_log_root *root = global->log->root;
|
struct mp_log_root *root = global->log->root;
|
||||||
struct MPOpts *opts = global->opts;
|
|
||||||
|
|
||||||
if (!opts)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pthread_mutex_lock(&mp_msg_lock);
|
pthread_mutex_lock(&mp_msg_lock);
|
||||||
|
|
||||||
|
@ -522,8 +516,7 @@ void mp_msg_update_msglevels(struct mpv_global *global)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_option_type_msglevels.free(&root->msg_levels);
|
m_option_type_msglevels.free(&root->msg_levels);
|
||||||
m_option_type_msglevels.copy(NULL, &root->msg_levels,
|
m_option_type_msglevels.copy(NULL, &root->msg_levels, &opts->msg_levels);
|
||||||
&global->opts->msg_levels);
|
|
||||||
|
|
||||||
atomic_fetch_add(&root->reload_counter, 1);
|
atomic_fetch_add(&root->reload_counter, 1);
|
||||||
pthread_mutex_unlock(&mp_msg_lock);
|
pthread_mutex_unlock(&mp_msg_lock);
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
struct mpv_global;
|
struct mpv_global;
|
||||||
|
struct MPOpts;
|
||||||
void mp_msg_init(struct mpv_global *global);
|
void mp_msg_init(struct mpv_global *global);
|
||||||
void mp_msg_uninit(struct mpv_global *global);
|
void mp_msg_uninit(struct mpv_global *global);
|
||||||
void mp_msg_update_msglevels(struct mpv_global *global);
|
void mp_msg_update_msglevels(struct mpv_global *global, struct MPOpts *opts);
|
||||||
void mp_msg_force_stderr(struct mpv_global *global, bool force_stderr);
|
void mp_msg_force_stderr(struct mpv_global *global, bool force_stderr);
|
||||||
bool mp_msg_has_status_line(struct mpv_global *global);
|
bool mp_msg_has_status_line(struct mpv_global *global);
|
||||||
bool mp_msg_has_log_file(struct mpv_global *global);
|
bool mp_msg_has_log_file(struct mpv_global *global);
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "options/options.h"
|
#include "options/options.h"
|
||||||
#include "common/msg.h"
|
#include "common/msg.h"
|
||||||
|
#include "options/m_config.h"
|
||||||
#include "osdep/timer.h"
|
#include "osdep/timer.h"
|
||||||
|
|
||||||
#include "demux/demux.h"
|
#include "demux/demux.h"
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
struct priv {
|
struct priv {
|
||||||
struct mp_filter *f;
|
struct mp_filter *f;
|
||||||
struct mp_log *log;
|
struct mp_log *log;
|
||||||
struct MPOpts *opts;
|
struct m_config_cache *opt_cache;
|
||||||
|
|
||||||
struct sh_stream *header;
|
struct sh_stream *header;
|
||||||
struct mp_codec_params *codec;
|
struct mp_codec_params *codec;
|
||||||
|
@ -162,7 +162,8 @@ struct mp_decoder_list *audio_decoder_list(void)
|
||||||
bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d)
|
bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d)
|
||||||
{
|
{
|
||||||
struct priv *p = d->f->priv;
|
struct priv *p = d->f->priv;
|
||||||
struct MPOpts *opts = p->opts;
|
struct MPOpts *opts = p->opt_cache->opts;
|
||||||
|
m_config_cache_update(p->opt_cache);
|
||||||
|
|
||||||
if (p->decoder)
|
if (p->decoder)
|
||||||
talloc_free(p->decoder->f);
|
talloc_free(p->decoder->f);
|
||||||
|
@ -236,9 +237,10 @@ static bool is_valid_peak(float sig_peak)
|
||||||
static void fix_image_params(struct priv *p,
|
static void fix_image_params(struct priv *p,
|
||||||
struct mp_image_params *params)
|
struct mp_image_params *params)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = p->opts;
|
|
||||||
struct mp_image_params m = *params;
|
struct mp_image_params m = *params;
|
||||||
struct mp_codec_params *c = p->codec;
|
struct mp_codec_params *c = p->codec;
|
||||||
|
struct MPOpts *opts = p->opt_cache->opts;
|
||||||
|
m_config_cache_update(p->opt_cache);
|
||||||
|
|
||||||
MP_VERBOSE(p, "Decoder format: %s\n", mp_image_params_to_str(params));
|
MP_VERBOSE(p, "Decoder format: %s\n", mp_image_params_to_str(params));
|
||||||
p->dec_format = *params;
|
p->dec_format = *params;
|
||||||
|
@ -302,7 +304,8 @@ static void fix_image_params(struct priv *p,
|
||||||
|
|
||||||
static void process_video_frame(struct priv *p, struct mp_image *mpi)
|
static void process_video_frame(struct priv *p, struct mp_image *mpi)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = p->opts;
|
struct MPOpts *opts = p->opt_cache->opts;
|
||||||
|
m_config_cache_update(p->opt_cache);
|
||||||
|
|
||||||
// Note: the PTS is reordered, but the DTS is not. Both should be monotonic.
|
// Note: the PTS is reordered, but the DTS is not. Both should be monotonic.
|
||||||
double pts = mpi->pts;
|
double pts = mpi->pts;
|
||||||
|
@ -645,13 +648,15 @@ struct mp_decoder_wrapper *mp_decoder_wrapper_create(struct mp_filter *parent,
|
||||||
|
|
||||||
struct priv *p = f->priv;
|
struct priv *p = f->priv;
|
||||||
struct mp_decoder_wrapper *w = &p->public;
|
struct mp_decoder_wrapper *w = &p->public;
|
||||||
p->opts = f->global->opts;
|
p->opt_cache = m_config_cache_alloc(p, f->global, GLOBAL_CONFIG);
|
||||||
p->log = f->log;
|
p->log = f->log;
|
||||||
p->f = f;
|
p->f = f;
|
||||||
p->header = src;
|
p->header = src;
|
||||||
p->codec = p->header->codec;
|
p->codec = p->header->codec;
|
||||||
w->f = f;
|
w->f = f;
|
||||||
|
|
||||||
|
struct MPOpts *opts = p->opt_cache->opts;
|
||||||
|
|
||||||
mp_filter_add_pin(f, MP_PIN_OUT, "out");
|
mp_filter_add_pin(f, MP_PIN_OUT, "out");
|
||||||
|
|
||||||
if (p->header->type == STREAM_VIDEO) {
|
if (p->header->type == STREAM_VIDEO) {
|
||||||
|
@ -661,8 +666,8 @@ struct mp_decoder_wrapper *mp_decoder_wrapper_create(struct mp_filter *parent,
|
||||||
|
|
||||||
MP_VERBOSE(p, "Container reported FPS: %f\n", p->public.fps);
|
MP_VERBOSE(p, "Container reported FPS: %f\n", p->public.fps);
|
||||||
|
|
||||||
if (p->opts->force_fps) {
|
if (opts->force_fps) {
|
||||||
p->public.fps = p->opts->force_fps;
|
p->public.fps = opts->force_fps;
|
||||||
MP_INFO(p, "FPS forced to %5.3f.\n", p->public.fps);
|
MP_INFO(p, "FPS forced to %5.3f.\n", p->public.fps);
|
||||||
MP_INFO(p, "Use --no-correct-pts to force FPS based timing.\n");
|
MP_INFO(p, "Use --no-correct-pts to force FPS based timing.\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1370,8 +1370,11 @@ void mp_input_load_config(struct input_ctx *ictx)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_WIN32_PIPES
|
#if HAVE_WIN32_PIPES
|
||||||
if (ictx->global->opts->input_file && *ictx->global->opts->input_file)
|
char *ifile;
|
||||||
mp_input_pipe_add(ictx, ictx->global->opts->input_file);
|
mp_read_option_raw(ictx->global, "input-file", &m_option_type_string, &ifile);
|
||||||
|
if (ifile && ifile[0])
|
||||||
|
mp_input_pipe_add(ictx, ifile);
|
||||||
|
talloc_free(ifile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
input_unlock(ictx);
|
input_unlock(ictx);
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "common/msg.h"
|
#include "common/msg.h"
|
||||||
#include "input/input.h"
|
#include "input/input.h"
|
||||||
#include "libmpv/client.h"
|
#include "libmpv/client.h"
|
||||||
|
#include "options/m_config.h"
|
||||||
#include "options/options.h"
|
#include "options/options.h"
|
||||||
#include "options/path.h"
|
#include "options/path.h"
|
||||||
#include "player/client.h"
|
#include "player/client.h"
|
||||||
|
@ -386,7 +387,7 @@ done:
|
||||||
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
||||||
struct mpv_global *global)
|
struct mpv_global *global)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = global->opts;
|
struct MPOpts *opts = mp_get_config_group(NULL, global, GLOBAL_CONFIG);
|
||||||
|
|
||||||
struct mp_ipc_ctx *arg = talloc_ptrtype(NULL, arg);
|
struct mp_ipc_ctx *arg = talloc_ptrtype(NULL, arg);
|
||||||
*arg = (struct mp_ipc_ctx){
|
*arg = (struct mp_ipc_ctx){
|
||||||
|
@ -397,10 +398,12 @@ struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
||||||
};
|
};
|
||||||
char *input_file = mp_get_user_path(arg, global, opts->input_file);
|
char *input_file = mp_get_user_path(arg, global, opts->input_file);
|
||||||
|
|
||||||
|
talloc_free(opts);
|
||||||
|
|
||||||
if (input_file && *input_file)
|
if (input_file && *input_file)
|
||||||
ipc_start_client_text(arg, input_file);
|
ipc_start_client_text(arg, input_file);
|
||||||
|
|
||||||
if (!opts->ipc_path || !*opts->ipc_path)
|
if (!arg->path || !arg->path[0])
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (mp_make_wakeup_pipe(arg->death_pipe) < 0)
|
if (mp_make_wakeup_pipe(arg->death_pipe) < 0)
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "common/msg.h"
|
#include "common/msg.h"
|
||||||
#include "input/input.h"
|
#include "input/input.h"
|
||||||
#include "libmpv/client.h"
|
#include "libmpv/client.h"
|
||||||
|
#include "options/m_config.h"
|
||||||
#include "options/options.h"
|
#include "options/options.h"
|
||||||
#include "player/client.h"
|
#include "player/client.h"
|
||||||
|
|
||||||
|
@ -449,7 +450,7 @@ done:
|
||||||
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
||||||
struct mpv_global *global)
|
struct mpv_global *global)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = global->opts;
|
struct MPOpts *opts = mp_get_config_group(NULL, global, GLOBAL_CONFIG);
|
||||||
|
|
||||||
struct mp_ipc_ctx *arg = talloc_ptrtype(NULL, arg);
|
struct mp_ipc_ctx *arg = talloc_ptrtype(NULL, arg);
|
||||||
*arg = (struct mp_ipc_ctx){
|
*arg = (struct mp_ipc_ctx){
|
||||||
|
@ -478,12 +479,14 @@ struct mp_ipc_ctx *mp_init_ipc(struct mp_client_api *client_api,
|
||||||
if (pthread_create(&arg->thread, NULL, ipc_thread, arg))
|
if (pthread_create(&arg->thread, NULL, ipc_thread, arg))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
talloc_free(opts);
|
||||||
return arg;
|
return arg;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (arg->death_event)
|
if (arg->death_event)
|
||||||
CloseHandle(arg->death_event);
|
CloseHandle(arg->death_event);
|
||||||
talloc_free(arg);
|
talloc_free(arg);
|
||||||
|
talloc_free(opts);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -281,10 +281,8 @@ err_out:
|
||||||
* during normal options parsing.
|
* during normal options parsing.
|
||||||
*/
|
*/
|
||||||
void m_config_preparse_command_line(m_config_t *config, struct mpv_global *global,
|
void m_config_preparse_command_line(m_config_t *config, struct mpv_global *global,
|
||||||
char **argv)
|
int *verbose, char **argv)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = global->opts;
|
|
||||||
|
|
||||||
struct parse_state p = {config, argv};
|
struct parse_state p = {config, argv};
|
||||||
while (split_opt_silent(&p) == 0) {
|
while (split_opt_silent(&p) == 0) {
|
||||||
if (p.is_opt) {
|
if (p.is_opt) {
|
||||||
|
@ -293,7 +291,7 @@ void m_config_preparse_command_line(m_config_t *config, struct mpv_global *globa
|
||||||
int flags = M_SETOPT_FROM_CMDLINE | M_SETOPT_PRE_PARSE_ONLY;
|
int flags = M_SETOPT_FROM_CMDLINE | M_SETOPT_PRE_PARSE_ONLY;
|
||||||
m_config_set_option_cli(config, p.arg, p.param, flags);
|
m_config_set_option_cli(config, p.arg, p.param, flags);
|
||||||
if (bstrcmp0(p.arg, "v") == 0)
|
if (bstrcmp0(p.arg, "v") == 0)
|
||||||
opts->verbose++;
|
(*verbose)++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,6 @@ struct mpv_global;
|
||||||
int m_config_parse_mp_command_line(m_config_t *config, struct playlist *files,
|
int m_config_parse_mp_command_line(m_config_t *config, struct playlist *files,
|
||||||
struct mpv_global *global, char **argv);
|
struct mpv_global *global, char **argv);
|
||||||
void m_config_preparse_command_line(m_config_t *config, struct mpv_global *global,
|
void m_config_preparse_command_line(m_config_t *config, struct mpv_global *global,
|
||||||
char **argv);
|
int *verbose, char **argv);
|
||||||
|
|
||||||
#endif /* MPLAYER_PARSER_MPCMD_H */
|
#endif /* MPLAYER_PARSER_MPCMD_H */
|
||||||
|
|
|
@ -104,13 +104,12 @@ static struct bstr guess_lang_from_filename(struct bstr name)
|
||||||
return (struct bstr){name.start + i + 1, n};
|
return (struct bstr){name.start + i + 1, n};
|
||||||
}
|
}
|
||||||
|
|
||||||
static void append_dir_subtitles(struct mpv_global *global,
|
static void append_dir_subtitles(struct mpv_global *global, struct MPOpts *opts,
|
||||||
struct subfn **slist, int *nsub,
|
struct subfn **slist, int *nsub,
|
||||||
struct bstr path, const char *fname,
|
struct bstr path, const char *fname,
|
||||||
int limit_fuzziness, int limit_type)
|
int limit_fuzziness, int limit_type)
|
||||||
{
|
{
|
||||||
void *tmpmem = talloc_new(NULL);
|
void *tmpmem = talloc_new(NULL);
|
||||||
struct MPOpts *opts = global->opts;
|
|
||||||
struct mp_log *log = mp_log_new(tmpmem, global->log, "find_files");
|
struct mp_log *log = mp_log_new(tmpmem, global->log, "find_files");
|
||||||
|
|
||||||
struct bstr f_fbname = bstr0(mp_basename(fname));
|
struct bstr f_fbname = bstr0(mp_basename(fname));
|
||||||
|
@ -253,16 +252,16 @@ static void filter_subidx(struct subfn **slist, int *nsub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load_paths(struct mpv_global *global, struct subfn **slist,
|
static void load_paths(struct mpv_global *global, struct MPOpts *opts,
|
||||||
int *nsubs, const char *fname, char **paths,
|
struct subfn **slist, int *nsubs, const char *fname,
|
||||||
char *cfg_path, int type)
|
char **paths, char *cfg_path, int type)
|
||||||
{
|
{
|
||||||
for (int i = 0; paths && paths[i]; i++) {
|
for (int i = 0; paths && paths[i]; i++) {
|
||||||
char *expanded_path = mp_get_user_path(NULL, global, paths[i]);
|
char *expanded_path = mp_get_user_path(NULL, global, paths[i]);
|
||||||
char *path = mp_path_join_bstr(
|
char *path = mp_path_join_bstr(
|
||||||
*slist, mp_dirname(fname),
|
*slist, mp_dirname(fname),
|
||||||
bstr0(expanded_path ? expanded_path : paths[i]));
|
bstr0(expanded_path ? expanded_path : paths[i]));
|
||||||
append_dir_subtitles(global, slist, nsubs, bstr0(path),
|
append_dir_subtitles(global, opts, slist, nsubs, bstr0(path),
|
||||||
fname, 0, type);
|
fname, 0, type);
|
||||||
talloc_free(expanded_path);
|
talloc_free(expanded_path);
|
||||||
}
|
}
|
||||||
|
@ -270,32 +269,32 @@ static void load_paths(struct mpv_global *global, struct subfn **slist,
|
||||||
// Load subtitles in ~/.mpv/sub (or similar) limiting sub fuzziness
|
// Load subtitles in ~/.mpv/sub (or similar) limiting sub fuzziness
|
||||||
char *mp_subdir = mp_find_config_file(NULL, global, cfg_path);
|
char *mp_subdir = mp_find_config_file(NULL, global, cfg_path);
|
||||||
if (mp_subdir) {
|
if (mp_subdir) {
|
||||||
append_dir_subtitles(global, slist, nsubs, bstr0(mp_subdir), fname, 1,
|
append_dir_subtitles(global, opts, slist, nsubs, bstr0(mp_subdir),
|
||||||
type);
|
fname, 1, type);
|
||||||
}
|
}
|
||||||
talloc_free(mp_subdir);
|
talloc_free(mp_subdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a list of subtitles and audio files found, sorted by priority.
|
// Return a list of subtitles and audio files found, sorted by priority.
|
||||||
// Last element is terminated with a fname==NULL entry.
|
// Last element is terminated with a fname==NULL entry.
|
||||||
struct subfn *find_external_files(struct mpv_global *global, const char *fname)
|
struct subfn *find_external_files(struct mpv_global *global, const char *fname,
|
||||||
|
struct MPOpts *opts)
|
||||||
{
|
{
|
||||||
struct MPOpts *opts = global->opts;
|
|
||||||
struct subfn *slist = talloc_array_ptrtype(NULL, slist, 1);
|
struct subfn *slist = talloc_array_ptrtype(NULL, slist, 1);
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
// Load subtitles from current media directory
|
// Load subtitles from current media directory
|
||||||
append_dir_subtitles(global, &slist, &n, mp_dirname(fname), fname, 0, -1);
|
append_dir_subtitles(global, opts, &slist, &n, mp_dirname(fname), fname, 0, -1);
|
||||||
|
|
||||||
// Load subtitles in dirs specified by sub-paths option
|
// Load subtitles in dirs specified by sub-paths option
|
||||||
if (opts->sub_auto >= 0) {
|
if (opts->sub_auto >= 0) {
|
||||||
load_paths(global, &slist, &n, fname, opts->sub_paths, "sub",
|
load_paths(global, opts, &slist, &n, fname, opts->sub_paths, "sub",
|
||||||
STREAM_SUB);
|
STREAM_SUB);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts->audiofile_auto >= 0) {
|
if (opts->audiofile_auto >= 0) {
|
||||||
load_paths(global, &slist, &n, fname, opts->audiofile_paths, "audio",
|
load_paths(global, opts, &slist, &n, fname, opts->audiofile_paths,
|
||||||
STREAM_AUDIO);
|
"audio", STREAM_AUDIO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort by name for filter_subidx()
|
// Sort by name for filter_subidx()
|
||||||
|
|
|
@ -28,7 +28,9 @@ struct subfn {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mpv_global;
|
struct mpv_global;
|
||||||
struct subfn *find_external_files(struct mpv_global *global, const char *fname);
|
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);
|
bool mp_might_be_subtitle_file(const char *filename);
|
||||||
|
|
||||||
|
|
|
@ -824,7 +824,8 @@ void autoload_external_files(struct MPContext *mpctx, struct mp_cancel *cancel)
|
||||||
&stream_filename) > 0)
|
&stream_filename) > 0)
|
||||||
base_filename = talloc_steal(tmp, stream_filename);
|
base_filename = talloc_steal(tmp, stream_filename);
|
||||||
}
|
}
|
||||||
struct subfn *list = find_external_files(mpctx->global, base_filename);
|
struct subfn *list = find_external_files(mpctx->global, base_filename,
|
||||||
|
mpctx->opts);
|
||||||
talloc_steal(tmp, list);
|
talloc_steal(tmp, list);
|
||||||
|
|
||||||
int sc[STREAM_TYPE_COUNT] = {0};
|
int sc[STREAM_TYPE_COUNT] = {0};
|
||||||
|
|
|
@ -117,7 +117,7 @@ void mp_update_logging(struct MPContext *mpctx, bool preinit)
|
||||||
{
|
{
|
||||||
bool had_log_file = mp_msg_has_log_file(mpctx->global);
|
bool had_log_file = mp_msg_has_log_file(mpctx->global);
|
||||||
|
|
||||||
mp_msg_update_msglevels(mpctx->global);
|
mp_msg_update_msglevels(mpctx->global, mpctx->opts);
|
||||||
|
|
||||||
bool enable = mpctx->opts->use_terminal;
|
bool enable = mpctx->opts->use_terminal;
|
||||||
bool enabled = cas_terminal_owner(mpctx, mpctx);
|
bool enabled = cas_terminal_owner(mpctx, mpctx);
|
||||||
|
@ -303,8 +303,6 @@ struct MPContext *mp_create(void)
|
||||||
m_config_parse(mpctx->mconfig, "", bstr0(def_config), NULL, 0);
|
m_config_parse(mpctx->mconfig, "", bstr0(def_config), NULL, 0);
|
||||||
m_config_create_shadow(mpctx->mconfig);
|
m_config_create_shadow(mpctx->mconfig);
|
||||||
|
|
||||||
mpctx->global->opts = mpctx->opts;
|
|
||||||
|
|
||||||
mpctx->input = mp_input_init(mpctx->global, mp_wakeup_core_cb, mpctx);
|
mpctx->input = mp_input_init(mpctx->global, mp_wakeup_core_cb, mpctx);
|
||||||
screenshot_init(mpctx);
|
screenshot_init(mpctx);
|
||||||
command_init(mpctx);
|
command_init(mpctx);
|
||||||
|
@ -335,8 +333,10 @@ int mp_initialize(struct MPContext *mpctx, char **options)
|
||||||
assert(!mpctx->initialized);
|
assert(!mpctx->initialized);
|
||||||
|
|
||||||
// Preparse the command line, so we can init the terminal early.
|
// Preparse the command line, so we can init the terminal early.
|
||||||
if (options)
|
if (options) {
|
||||||
m_config_preparse_command_line(mpctx->mconfig, mpctx->global, options);
|
m_config_preparse_command_line(mpctx->mconfig, mpctx->global,
|
||||||
|
&opts->verbose, options);
|
||||||
|
}
|
||||||
|
|
||||||
mp_init_paths(mpctx->global, opts);
|
mp_init_paths(mpctx->global, opts);
|
||||||
mp_update_logging(mpctx, true);
|
mp_update_logging(mpctx, true);
|
||||||
|
|
|
@ -3854,7 +3854,9 @@ static void reinit_from_options(struct gl_video *p)
|
||||||
gl_video_setup_hooks(p);
|
gl_video_setup_hooks(p);
|
||||||
reinit_osd(p);
|
reinit_osd(p);
|
||||||
|
|
||||||
if (p->opts.interpolation && !p->global->opts->video_sync && !p->dsi_warned) {
|
int vs;
|
||||||
|
mp_read_option_raw(p->global, "video-sync", &m_option_type_choice, &vs);
|
||||||
|
if (p->opts.interpolation && !vs && !p->dsi_warned) {
|
||||||
MP_WARN(p, "Interpolation now requires enabling display-sync mode.\n"
|
MP_WARN(p, "Interpolation now requires enabling display-sync mode.\n"
|
||||||
"E.g.: --video-sync=display-resample\n");
|
"E.g.: --video-sync=display-resample\n");
|
||||||
p->dsi_warned = true;
|
p->dsi_warned = true;
|
||||||
|
|
|
@ -332,7 +332,9 @@ error:
|
||||||
|
|
||||||
struct vo *init_best_video_out(struct mpv_global *global, struct vo_extra *ex)
|
struct vo *init_best_video_out(struct mpv_global *global, struct vo_extra *ex)
|
||||||
{
|
{
|
||||||
struct m_obj_settings *vo_list = global->opts->vo->video_driver_list;
|
struct mp_vo_opts *opts = mp_get_config_group(NULL, global, &vo_sub_opts);
|
||||||
|
struct m_obj_settings *vo_list = opts->video_driver_list;
|
||||||
|
struct vo *vo = NULL;
|
||||||
// first try the preferred drivers, with their optional subdevice param:
|
// first try the preferred drivers, with their optional subdevice param:
|
||||||
if (vo_list && vo_list[0].name) {
|
if (vo_list && vo_list[0].name) {
|
||||||
for (int n = 0; vo_list[n].name; n++) {
|
for (int n = 0; vo_list[n].name; n++) {
|
||||||
|
@ -340,11 +342,11 @@ struct vo *init_best_video_out(struct mpv_global *global, struct vo_extra *ex)
|
||||||
if (strlen(vo_list[n].name) == 0)
|
if (strlen(vo_list[n].name) == 0)
|
||||||
goto autoprobe;
|
goto autoprobe;
|
||||||
bool p = !!vo_list[n + 1].name;
|
bool p = !!vo_list[n + 1].name;
|
||||||
struct vo *vo = vo_create(p, global, ex, vo_list[n].name);
|
vo = vo_create(p, global, ex, vo_list[n].name);
|
||||||
if (vo)
|
if (vo)
|
||||||
return vo;
|
goto done;
|
||||||
}
|
}
|
||||||
return NULL;
|
goto done;
|
||||||
}
|
}
|
||||||
autoprobe:
|
autoprobe:
|
||||||
// now try the rest...
|
// now try the rest...
|
||||||
|
@ -352,11 +354,13 @@ autoprobe:
|
||||||
const struct vo_driver *driver = video_out_drivers[i];
|
const struct vo_driver *driver = video_out_drivers[i];
|
||||||
if (driver == &video_out_null)
|
if (driver == &video_out_null)
|
||||||
break;
|
break;
|
||||||
struct vo *vo = vo_create(true, global, ex, (char *)driver->name);
|
vo = vo_create(true, global, ex, (char *)driver->name);
|
||||||
if (vo)
|
if (vo)
|
||||||
return vo;
|
goto done;
|
||||||
}
|
}
|
||||||
return NULL;
|
done:
|
||||||
|
talloc_free(opts);
|
||||||
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void terminate_vo(void *p)
|
static void terminate_vo(void *p)
|
||||||
|
|
Loading…
Reference in New Issue