diff options
author | wm4 <wm4@nowhere> | 2016-09-02 15:50:54 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-09-02 15:50:54 +0200 |
commit | 2c917219cffc74fcc64f04113fe260f2b88d5841 (patch) | |
tree | ae874a7185fa23e162219c6d9b27fb656f7d7c9f /video/out/vo.c | |
parent | 423e53ba0bad034685e5229720d55548afb1efbe (diff) | |
download | mpv-2c917219cffc74fcc64f04113fe260f2b88d5841.tar.bz2 mpv-2c917219cffc74fcc64f04113fe260f2b88d5841.tar.xz |
vo: use new option update mechanism
This is still rather basic.
run_reconfig() and run_control() update the options because it's needed
for panscan (and other video scaling options), and fullscreen, border,
ontop updates. In the old model, these options could be accessed only
while both playback thread and VO threads were locked (i.e. during
synchronous calls like vo_control()), so this should be sufficient in
order not to miss any updates. In the future, a more fine-grained update
mechanism could be added to handle these updates "exactly".
x11_common.c contains an evil hack, as I see no reasonable way to handle
this properly. The VO thread can't "lock" the main thread, so this is
not simple.
Diffstat (limited to 'video/out/vo.c')
-rw-r--r-- | video/out/vo.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/video/out/vo.c b/video/out/vo.c index e37acb1242..b8b55ca58e 100644 --- a/video/out/vo.c +++ b/video/out/vo.c @@ -225,7 +225,6 @@ static struct vo *vo_create(bool probing, struct mpv_global *global, *vo = (struct vo) { .log = mp_log_new(vo, log, name), .driver = desc.p, - .opts = global->opts->vo, .global = global, .encode_lavc_ctx = ex->encode_lavc_ctx, .input_ctx = ex->input_ctx, @@ -245,6 +244,9 @@ static struct vo *vo_create(bool probing, struct mpv_global *global, pthread_mutex_init(&vo->in->lock, NULL); pthread_cond_init(&vo->in->wakeup, NULL); + vo->opts_cache = m_config_cache_alloc(vo, global, &vo_sub_opts); + vo->opts = vo->opts_cache->opts; + mp_input_set_mouse_transform(vo->input_ctx, NULL, NULL); if (vo->driver->encode != !!vo->encode_lavc_ctx) goto error; @@ -503,6 +505,8 @@ static void run_reconfig(void *p) struct vo_internal *in = vo->in; + m_config_cache_update(vo->opts_cache); + mp_image_params_get_dsize(params, &vo->dwidth, &vo->dheight); talloc_free(vo->params); @@ -541,6 +545,7 @@ static void run_control(void *p) struct vo *vo = pp[0]; int request = (intptr_t)pp[1]; void *data = pp[2]; + m_config_cache_update(vo->opts_cache); int ret = vo->driver->control(vo, request, data); if (pp[3]) *(int *)pp[3] = ret; |