summaryrefslogtreecommitdiffstats
path: root/options/options.h
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-12-29 17:19:25 +0100
committerKevin Mitchell <kevmitch@gmail.com>2018-01-02 14:27:37 -0800
commit6aad532aa39481a8100910612fad039dd75236b9 (patch)
tree53c790d6c66917e66039c25a13cdf27f90bbf0d9 /options/options.h
parent3bf7df4a5e1f46248c78e9e596cd8dab6ff57356 (diff)
downloadmpv-6aad532aa39481a8100910612fad039dd75236b9.tar.bz2
mpv-6aad532aa39481a8100910612fad039dd75236b9.tar.xz
options: move most subtitle and OSD rendering options to sub structs
Remove them from the big MPOpts struct and move them to their sub structs. In the places where their fields are used, create a private copy of the structs, instead of accessing the semi-deprecated global option struct instance (mpv_global.opts) directly. This actually makes accessing these options finally thread-safe. They weren't even if they should have for years. (Including some potential for undefined behavior when e.g. the OSD font was changed at runtime.) This is mostly transparent. All options get moved around, but most users of the options just need to access a different struct (changing sd.opts to a different type changes a lot of uses, for example). One thing which has to be considered and could cause potential regressions is that the new option copies must be explicitly updated. sub_update_opts() takes care of this for example. Another thing is that writing to the option structs manually won't work, because the changes won't be propagated to other copies. Apparently the only affected case is the implementation of the sub-step command, which tries to change sub_delay. Handle this one explicitly (osd_changed() doesn't need to be called anymore, because changing the option triggers UPDATE_OSD, and updates the OSD as a consequence). The way the option value is propagated is rather hacky, but for now this will do.
Diffstat (limited to 'options/options.h')
-rw-r--r--options/options.h99
1 files changed, 55 insertions, 44 deletions
diff --git a/options/options.h b/options/options.h
index 211284ff75..3f90a2b78f 100644
--- a/options/options.h
+++ b/options/options.h
@@ -66,6 +66,56 @@ struct mp_cache_opts {
int file_max;
};
+// Subtitle options needed by the subtitle decoders/renderers.
+struct mp_subtitle_opts {
+ int sub_visibility;
+ int sub_pos;
+ float sub_delay;
+ float sub_fps;
+ float sub_speed;
+ int forced_subs_only;
+ int stretch_dvd_subs;
+ int stretch_image_subs;
+ int image_subs_video_res;
+ int sub_fix_timing;
+ int sub_scale_by_window;
+ int sub_scale_with_window;
+ int ass_scale_with_window;
+ struct osd_style_opts *sub_style;
+ float sub_scale;
+ float sub_gauss;
+ int sub_gray;
+ int sub_filter_SDH;
+ int sub_filter_SDH_harder;
+ int ass_enabled;
+ float ass_line_spacing;
+ int ass_use_margins;
+ int sub_use_margins;
+ int ass_vsfilter_aspect_compat;
+ int ass_vsfilter_color_compat;
+ int ass_vsfilter_blur_compat;
+ int use_embedded_fonts;
+ char **ass_force_style_list;
+ char *ass_styles_file;
+ int ass_style_override;
+ int ass_hinting;
+ int ass_shaper;
+ int ass_justify;
+ int sub_clear_on_seek;
+ int teletext_page;
+};
+
+struct mp_osd_render_opts {
+ float osd_bar_align_x;
+ float osd_bar_align_y;
+ float osd_bar_w;
+ float osd_bar_h;
+ float osd_scale;
+ int osd_scale_by_window;
+ struct osd_style_opts *osd_style;
+ int force_rgba_osd;
+};
+
typedef struct MPOpts {
int property_print_help;
int use_terminal;
@@ -113,7 +163,6 @@ typedef struct MPOpts {
char *wintitle;
char *media_title;
- int force_rgba_osd;
struct mp_csp_equalizer_opts *video_equalizer;
@@ -128,6 +177,9 @@ typedef struct MPOpts {
char *video_decoders;
char *audio_spdif;
+ struct mp_subtitle_opts *subs_rend;
+ struct mp_osd_render_opts *osd_rend;
+
int osd_level;
int osd_duration;
int osd_fractions;
@@ -202,17 +254,6 @@ typedef struct MPOpts {
int stream_auto_sel;
int audio_display;
char **display_tags;
- int sub_visibility;
- int sub_pos;
- float sub_delay;
- float sub_fps;
- float sub_speed;
- int forced_subs_only;
- int stretch_dvd_subs;
- int stretch_image_subs;
- int image_subs_video_res;
-
- int sub_fix_timing;
char **audio_files;
char *demuxer_name;
@@ -249,38 +290,6 @@ typedef struct MPOpts {
int sub_auto;
int audiofile_auto;
int osd_bar_visible;
- float osd_bar_align_x;
- float osd_bar_align_y;
- float osd_bar_w;
- float osd_bar_h;
- float osd_scale;
- int osd_scale_by_window;
- int sub_scale_by_window;
- int sub_scale_with_window;
- int ass_scale_with_window;
- struct osd_style_opts *osd_style;
- struct osd_style_opts *sub_style;
- float sub_scale;
- float sub_gauss;
- int sub_gray;
- int sub_filter_SDH;
- int sub_filter_SDH_harder;
- int ass_enabled;
- float ass_line_spacing;
- int ass_use_margins;
- int sub_use_margins;
- int ass_vsfilter_aspect_compat;
- int ass_vsfilter_color_compat;
- int ass_vsfilter_blur_compat;
- int use_embedded_fonts;
- char **ass_force_style_list;
- char *ass_styles_file;
- int ass_style_override;
- int ass_hinting;
- int ass_shaper;
- int ass_justify;
- int sub_clear_on_seek;
- int teletext_page;
char *hwdec_api;
char *hwdec_codecs;
@@ -345,6 +354,8 @@ extern const struct MPOpts mp_default_opts;
extern const struct m_sub_options vo_sub_opts;
extern const struct m_sub_options stream_cache_conf;
extern const struct m_sub_options dvd_conf;
+extern const struct m_sub_options mp_subtitle_sub_opts;
+extern const struct m_sub_options mp_osd_render_sub_opts;
int hwdec_validate_opt(struct mp_log *log, const m_option_t *opt,
struct bstr name, struct bstr param);