mirror of
https://github.com/mpv-player/mpv.git
synced 2025-12-28 05:33:14 +00:00
sub: add (sub/osd)-border-style; renaming sub options
This commit is contained in:
committed by
Dudemanguy
parent
c0f5d2391b
commit
f2e7146cb1
6
DOCS/interface-changes/sub-border-style.txt
Normal file
6
DOCS/interface-changes/sub-border-style.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
add `--sub-border-style` and `--osd-border-style` options
|
||||||
|
the border style does not depend on `--(sub/osd)-border-color` and `--(sub/osd)-shadow-color`; now it depends solely on `--(sub/osd)-border-style`
|
||||||
|
make `--(sub/osd)-border-color` an alias of `--(sub/osd)-outline-color`
|
||||||
|
make `--(sub/osd)-border-size` an alias of `--(sub/osd)-outline-size`
|
||||||
|
make `--(sub/osd)-shadow-color` an alias of `--(sub/osd)-back-color`; they cannot both be set now
|
||||||
|
make `--osd-bar-border-size` an alias of `--osd-bar-outline-size`
|
||||||
@@ -2832,10 +2832,6 @@ Subtitles
|
|||||||
|
|
||||||
Default: 55.
|
Default: 55.
|
||||||
|
|
||||||
``--sub-back-color=<color>``
|
|
||||||
See ``--sub-color``. Color used for sub text background. You can use
|
|
||||||
``--sub-shadow-offset`` to change its size relative to the text.
|
|
||||||
|
|
||||||
``--sub-blur=<0..20.0>``
|
``--sub-blur=<0..20.0>``
|
||||||
Gaussian blur factor applied to the sub font border.
|
Gaussian blur factor applied to the sub font border.
|
||||||
0 means no blur applied (default).
|
0 means no blur applied (default).
|
||||||
@@ -2846,15 +2842,48 @@ Subtitles
|
|||||||
``--sub-italic=<yes|no>``
|
``--sub-italic=<yes|no>``
|
||||||
Format text on italic.
|
Format text on italic.
|
||||||
|
|
||||||
``--sub-border-color=<color>``
|
``--sub-outline-color=<color>``
|
||||||
See ``--sub-color``. Color used for the sub font border.
|
See ``--sub-color``. Color used for the sub font outline.
|
||||||
|
|
||||||
``--sub-border-size=<size>``
|
``--sub-border-color`` is an alias for ``--sub-outline-color``.
|
||||||
Size of the sub font border in scaled pixels (see ``--sub-font-size``
|
|
||||||
for details). A value of 0 disables borders.
|
``--sub-back-color=<color>``
|
||||||
|
See ``--sub-color``. Color used for sub text background.
|
||||||
|
|
||||||
|
``--sub-shadow-color`` is an alias for ``--sub-back-color``.
|
||||||
|
|
||||||
|
``--sub-outline-size=<size>``
|
||||||
|
Size of the sub font outline in scaled pixels (see ``--sub-font-size``
|
||||||
|
for details). A value of 0 disables outlines.
|
||||||
|
|
||||||
|
``--sub-border-size`` is an alias for ``--sub-outline-size``.
|
||||||
|
|
||||||
Default: 3.
|
Default: 3.
|
||||||
|
|
||||||
|
``--sub-border-style=<outline-and-shadow|opaque-box|background-box>``
|
||||||
|
The style of the border.
|
||||||
|
|
||||||
|
- ``outline-and-shadow``: draw outline and shadow.
|
||||||
|
The size of the outline is determined by ``--sub-outline-size``,
|
||||||
|
and the offset of the shadow is determined by ``--sub-shadow-offset``.
|
||||||
|
The outline is colored by ``--sub-outline-color``,
|
||||||
|
and the shadow is colored by ``--sub-back-color``.
|
||||||
|
This corresponds to ``BorderStyle=1`` in the ASS spec.
|
||||||
|
- ``opaque-box``: draw outline and shadow as opaque boxes that tightly wrap each lines of text.
|
||||||
|
The margin of the outline opaque box is determined by ``--sub-outline-size``,
|
||||||
|
and the offset of the shadow opaque box is determined by ``--sub-shadow-offset``.
|
||||||
|
The outline opaque box is colored by ``--sub-outline-color``,
|
||||||
|
and the shadow opaque box is colored by ``--sub-back-color``.
|
||||||
|
Despite its name, the opaque box can be semi-transparent.
|
||||||
|
This corresponds to ``BorderStyle=3`` in the ASS spec.
|
||||||
|
- ``background-box``: draw a background box that bounds all lines of text.
|
||||||
|
The background box is colored by ``--sub-back-color``,
|
||||||
|
and the margin of the background box is determined by ``--sub-shadow-offset``.
|
||||||
|
The behavior of the outline is the same as the ``outline-and-shadow`` style.
|
||||||
|
This corresponds to ``BorderStyle=4``, which is a libass-specific extension.
|
||||||
|
|
||||||
|
Default: ``outline-and-shadow``.
|
||||||
|
|
||||||
``--sub-color=<color>``
|
``--sub-color=<color>``
|
||||||
Specify the color used for unstyled text subtitles.
|
Specify the color used for unstyled text subtitles.
|
||||||
|
|
||||||
@@ -2924,15 +2953,6 @@ Subtitles
|
|||||||
if ``--sub-ass-override`` is not set to ``no``.
|
if ``--sub-ass-override`` is not set to ``no``.
|
||||||
Default: ``no``.
|
Default: ``no``.
|
||||||
|
|
||||||
``--sub-shadow-color=<color>``
|
|
||||||
See ``--sub-color``. Color used for sub text shadow.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
ignored when ``--sub-back-color`` is
|
|
||||||
specified (or more exactly: when that option is not set to completely
|
|
||||||
transparent).
|
|
||||||
|
|
||||||
``--sub-shadow-offset=<size>``
|
``--sub-shadow-offset=<size>``
|
||||||
Displacement of the sub text shadow in scaled pixels (see
|
Displacement of the sub text shadow in scaled pixels (see
|
||||||
``--sub-font-size`` for details). A value of 0 disables shadows.
|
``--sub-font-size`` for details). A value of 0 disables shadows.
|
||||||
@@ -4411,14 +4431,13 @@ OSD
|
|||||||
``--osd-bar-h=<0.1-50>``
|
``--osd-bar-h=<0.1-50>``
|
||||||
Height of the OSD bar, in percentage of the screen height (default: 3.125).
|
Height of the OSD bar, in percentage of the screen height (default: 3.125).
|
||||||
|
|
||||||
``--osd-bar-border-size=<size>``
|
``--osd-bar-outline-size=<size>``
|
||||||
Size of the border of the OSD bar in scaled pixels (see ``--sub-font-size``
|
Size of the outline of the OSD bar in scaled pixels (see ``--sub-font-size``
|
||||||
for details).
|
for details).
|
||||||
|
|
||||||
Default: 0.5.
|
``--osd-bar-border-size`` is an alias for ``--osd-bar-outline-size``.
|
||||||
|
|
||||||
``--osd-back-color=<color>``
|
Default: 0.5.
|
||||||
See ``--sub-color``. Color used for OSD text background.
|
|
||||||
|
|
||||||
``--osd-blur=<0..20.0>``
|
``--osd-blur=<0..20.0>``
|
||||||
Gaussian blur factor applied to the OSD font border.
|
Gaussian blur factor applied to the OSD font border.
|
||||||
@@ -4430,15 +4449,27 @@ OSD
|
|||||||
``--osd-italic=<yes|no>``
|
``--osd-italic=<yes|no>``
|
||||||
Format text on italic.
|
Format text on italic.
|
||||||
|
|
||||||
``--osd-border-color=<color>``
|
``--osd-outline-color=<color>``
|
||||||
See ``--sub-color``. Color used for the OSD font border.
|
See ``--sub-color``. Color used for the OSD font outline.
|
||||||
|
|
||||||
``--osd-border-size=<size>``
|
``--osd-border-color`` is an alias for ``--osd-outline-color``.
|
||||||
Size of the OSD font border in scaled pixels (see ``--sub-font-size``
|
|
||||||
for details). A value of 0 disables borders.
|
``--osd-back-color=<color>``
|
||||||
|
See ``--sub-color``. Color used for OSD text background.
|
||||||
|
|
||||||
|
``--osd-shadow-color`` is an alias for ``--osd-back-color``.
|
||||||
|
|
||||||
|
``--osd-outline-size=<size>``
|
||||||
|
Size of the OSD font outline in scaled pixels (see ``--sub-font-size``
|
||||||
|
for details). A value of 0 disables outlines.
|
||||||
|
|
||||||
|
``--osd-border-size`` is an alias for ``--osd-outline-size``.
|
||||||
|
|
||||||
Default: 3.
|
Default: 3.
|
||||||
|
|
||||||
|
``--osd-border-style=<outline-and-shadow|opaque-box|background-box>``
|
||||||
|
See ``--sub-border-style``. Style used for OSD text border.
|
||||||
|
|
||||||
``--osd-color=<color>``
|
``--osd-color=<color>``
|
||||||
Specify the color used for OSD.
|
Specify the color used for OSD.
|
||||||
See ``--sub-color`` for details.
|
See ``--sub-color`` for details.
|
||||||
@@ -4495,14 +4526,6 @@ OSD
|
|||||||
respect the value of this option when deciding whether the elements
|
respect the value of this option when deciding whether the elements
|
||||||
are scaled with window size or not.
|
are scaled with window size or not.
|
||||||
|
|
||||||
``--osd-shadow-color=<color>``
|
|
||||||
See ``--sub-color``. Color used for OSD shadow.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Ignored when ``--osd-back-color`` is specified (or more exactly: when
|
|
||||||
that option is not set to completely transparent).
|
|
||||||
|
|
||||||
``--osd-shadow-offset=<size>``
|
``--osd-shadow-offset=<size>``
|
||||||
Displacement of the OSD shadow in scaled pixels (see
|
Displacement of the OSD shadow in scaled pixels (see
|
||||||
``--sub-font-size`` for details). A value of 0 disables shadows.
|
``--sub-font-size`` for details). A value of 0 disables shadows.
|
||||||
|
|||||||
@@ -398,7 +398,8 @@ const struct m_sub_options mp_osd_render_sub_opts = {
|
|||||||
{"osd-bar-align-y", OPT_FLOAT(osd_bar_align_y), M_RANGE(-1.0, +1.0)},
|
{"osd-bar-align-y", OPT_FLOAT(osd_bar_align_y), M_RANGE(-1.0, +1.0)},
|
||||||
{"osd-bar-w", OPT_FLOAT(osd_bar_w), M_RANGE(1, 100)},
|
{"osd-bar-w", OPT_FLOAT(osd_bar_w), M_RANGE(1, 100)},
|
||||||
{"osd-bar-h", OPT_FLOAT(osd_bar_h), M_RANGE(0.1, 50)},
|
{"osd-bar-h", OPT_FLOAT(osd_bar_h), M_RANGE(0.1, 50)},
|
||||||
{"osd-bar-border-size", OPT_FLOAT(osd_bar_border_size), M_RANGE(0, 1000.0)},
|
{"osd-bar-outline-size", OPT_FLOAT(osd_bar_outline_size), M_RANGE(0, 1000.0)},
|
||||||
|
{"osd-bar-border-size", OPT_ALIAS("osd-bar-outline-size")},
|
||||||
{"osd", OPT_SUBSTRUCT(osd_style, osd_style_conf)},
|
{"osd", OPT_SUBSTRUCT(osd_style, osd_style_conf)},
|
||||||
{"osd-scale", OPT_FLOAT(osd_scale), M_RANGE(0, 100)},
|
{"osd-scale", OPT_FLOAT(osd_scale), M_RANGE(0, 100)},
|
||||||
{"osd-scale-by-window", OPT_BOOL(osd_scale_by_window)},
|
{"osd-scale-by-window", OPT_BOOL(osd_scale_by_window)},
|
||||||
@@ -410,7 +411,7 @@ const struct m_sub_options mp_osd_render_sub_opts = {
|
|||||||
.osd_bar_align_y = 0.5,
|
.osd_bar_align_y = 0.5,
|
||||||
.osd_bar_w = 75.0,
|
.osd_bar_w = 75.0,
|
||||||
.osd_bar_h = 3.125,
|
.osd_bar_h = 3.125,
|
||||||
.osd_bar_border_size = 0.5,
|
.osd_bar_outline_size = 0.5,
|
||||||
.osd_scale = 1,
|
.osd_scale = 1,
|
||||||
.osd_scale_by_window = true,
|
.osd_scale_by_window = true,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ struct mp_osd_render_opts {
|
|||||||
float osd_bar_align_y;
|
float osd_bar_align_y;
|
||||||
float osd_bar_w;
|
float osd_bar_w;
|
||||||
float osd_bar_h;
|
float osd_bar_h;
|
||||||
float osd_bar_border_size;
|
float osd_bar_outline_size;
|
||||||
float osd_scale;
|
float osd_scale;
|
||||||
bool osd_scale_by_window;
|
bool osd_scale_by_window;
|
||||||
struct osd_style_opts *osd_style;
|
struct osd_style_opts *osd_style;
|
||||||
|
|||||||
@@ -514,7 +514,7 @@ local function update()
|
|||||||
local clipping_coordinates = '0,' .. coordinate_top .. ',' ..
|
local clipping_coordinates = '0,' .. coordinate_top .. ',' ..
|
||||||
screenx .. ',' .. screeny
|
screenx .. ',' .. screeny
|
||||||
local ass = assdraw.ass_new()
|
local ass = assdraw.ass_new()
|
||||||
local has_shadow = mp.get_property('osd-back-color'):sub(2, 3) == '00'
|
local has_shadow = mp.get_property('osd-border-style'):find('box$') == nil
|
||||||
local style = '{\\r' ..
|
local style = '{\\r' ..
|
||||||
'\\1a&H00&\\3a&H00&\\1c&Heeeeee&\\3c&H111111&' ..
|
'\\1a&H00&\\3a&H00&\\1c&Heeeeee&\\3c&H111111&' ..
|
||||||
(has_shadow and '\\4a&H99&\\4c&H000000&' or '') ..
|
(has_shadow and '\\4a&H99&\\4c&H000000&' or '') ..
|
||||||
|
|||||||
13
sub/ass_mp.c
13
sub/ass_mp.c
@@ -62,15 +62,10 @@ void mp_ass_set_style(ASS_Style *style, double res_y,
|
|||||||
style->FontSize = opts->font_size * scale;
|
style->FontSize = opts->font_size * scale;
|
||||||
style->PrimaryColour = MP_ASS_COLOR(opts->color);
|
style->PrimaryColour = MP_ASS_COLOR(opts->color);
|
||||||
style->SecondaryColour = style->PrimaryColour;
|
style->SecondaryColour = style->PrimaryColour;
|
||||||
style->OutlineColour = MP_ASS_COLOR(opts->border_color);
|
style->OutlineColour = MP_ASS_COLOR(opts->outline_color);
|
||||||
if (opts->back_color.a) {
|
style->BackColour = MP_ASS_COLOR(opts->back_color);
|
||||||
style->BackColour = MP_ASS_COLOR(opts->back_color);
|
style->BorderStyle = opts->border_style;
|
||||||
style->BorderStyle = 4; // opaque box
|
style->Outline = opts->outline_size * scale;
|
||||||
} else {
|
|
||||||
style->BackColour = MP_ASS_COLOR(opts->shadow_color);
|
|
||||||
style->BorderStyle = 1; // outline
|
|
||||||
}
|
|
||||||
style->Outline = opts->border_size * scale;
|
|
||||||
style->Shadow = opts->shadow_offset * scale;
|
style->Shadow = opts->shadow_offset * scale;
|
||||||
style->Spacing = opts->spacing * scale;
|
style->Spacing = opts->spacing * scale;
|
||||||
style->MarginL = opts->margin_x * scale;
|
style->MarginL = opts->margin_x * scale;
|
||||||
|
|||||||
24
sub/osd.c
24
sub/osd.c
@@ -48,10 +48,14 @@ static const m_option_t style_opts[] = {
|
|||||||
{"font", OPT_STRING(font)},
|
{"font", OPT_STRING(font)},
|
||||||
{"font-size", OPT_FLOAT(font_size), M_RANGE(1, 9000)},
|
{"font-size", OPT_FLOAT(font_size), M_RANGE(1, 9000)},
|
||||||
{"color", OPT_COLOR(color)},
|
{"color", OPT_COLOR(color)},
|
||||||
{"border-color", OPT_COLOR(border_color)},
|
{"outline-color", OPT_COLOR(outline_color)},
|
||||||
{"shadow-color", OPT_COLOR(shadow_color)},
|
|
||||||
{"back-color", OPT_COLOR(back_color)},
|
{"back-color", OPT_COLOR(back_color)},
|
||||||
{"border-size", OPT_FLOAT(border_size)},
|
{"outline-size", OPT_FLOAT(outline_size)},
|
||||||
|
{"border-color", OPT_ALIAS("outline-color"), .alias_use_prefix = true},
|
||||||
|
{"shadow-color", OPT_ALIAS("back-color"), .alias_use_prefix = true},
|
||||||
|
{"border-style", OPT_CHOICE(border_style,
|
||||||
|
{"outline-and-shadow", 1}, {"opaque-box", 3}, {"background-box", 4})},
|
||||||
|
{"border-size", OPT_ALIAS("outline-size"), .alias_use_prefix = true},
|
||||||
{"shadow-offset", OPT_FLOAT(shadow_offset)},
|
{"shadow-offset", OPT_FLOAT(shadow_offset)},
|
||||||
{"spacing", OPT_FLOAT(spacing), M_RANGE(-10, 10)},
|
{"spacing", OPT_FLOAT(spacing), M_RANGE(-10, 10)},
|
||||||
{"margin-x", OPT_INT(margin_x), M_RANGE(0, 300)},
|
{"margin-x", OPT_INT(margin_x), M_RANGE(0, 300)},
|
||||||
@@ -79,9 +83,10 @@ const struct m_sub_options osd_style_conf = {
|
|||||||
.font = "sans-serif",
|
.font = "sans-serif",
|
||||||
.font_size = 55,
|
.font_size = 55,
|
||||||
.color = {255, 255, 255, 255},
|
.color = {255, 255, 255, 255},
|
||||||
.border_color = {0, 0, 0, 255},
|
.outline_color = {0, 0, 0, 255},
|
||||||
.shadow_color = {240, 240, 240, 128},
|
.back_color = {240, 240, 240, 128},
|
||||||
.border_size = 3,
|
.border_style = 1,
|
||||||
|
.outline_size = 3,
|
||||||
.shadow_offset = 0,
|
.shadow_offset = 0,
|
||||||
.margin_x = 25,
|
.margin_x = 25,
|
||||||
.margin_y = 22,
|
.margin_y = 22,
|
||||||
@@ -98,9 +103,10 @@ const struct m_sub_options sub_style_conf = {
|
|||||||
.font = "sans-serif",
|
.font = "sans-serif",
|
||||||
.font_size = 55,
|
.font_size = 55,
|
||||||
.color = {255, 255, 255, 255},
|
.color = {255, 255, 255, 255},
|
||||||
.border_color = {0, 0, 0, 255},
|
.outline_color = {0, 0, 0, 255},
|
||||||
.shadow_color = {240, 240, 240, 128},
|
.back_color = {240, 240, 240, 128},
|
||||||
.border_size = 3,
|
.border_style = 1,
|
||||||
|
.outline_size = 3,
|
||||||
.shadow_offset = 0,
|
.shadow_offset = 0,
|
||||||
.margin_x = 25,
|
.margin_x = 25,
|
||||||
.margin_y = 22,
|
.margin_y = 22,
|
||||||
|
|||||||
@@ -145,10 +145,10 @@ struct osd_style_opts {
|
|||||||
char *font;
|
char *font;
|
||||||
float font_size;
|
float font_size;
|
||||||
struct m_color color;
|
struct m_color color;
|
||||||
struct m_color border_color;
|
struct m_color outline_color;
|
||||||
struct m_color shadow_color;
|
|
||||||
struct m_color back_color;
|
struct m_color back_color;
|
||||||
float border_size;
|
int border_style;
|
||||||
|
float outline_size;
|
||||||
float shadow_offset;
|
float shadow_offset;
|
||||||
float spacing;
|
float spacing;
|
||||||
int margin_x;
|
int margin_x;
|
||||||
|
|||||||
@@ -375,18 +375,15 @@ static void get_osd_bar_box(struct osd_state *osd, struct osd_object *obj,
|
|||||||
|
|
||||||
mp_ass_set_style(style, track->PlayResY, opts->osd_style);
|
mp_ass_set_style(style, track->PlayResY, opts->osd_style);
|
||||||
|
|
||||||
if (osd->opts->osd_style->back_color.a) {
|
// override the default osd opaque-box into plain outline. Otherwise
|
||||||
// override the default osd opaque-box into plain outline. Otherwise
|
// the opaque box is not aligned with the bar (even without shadow),
|
||||||
// the opaque box is not aligned with the bar (even without shadow),
|
// and each bar ass event gets its own opaque box - breaking the bar.
|
||||||
// and each bar ass event gets its own opaque box - breaking the bar.
|
style->BorderStyle = 1; // outline
|
||||||
style->BackColour = MP_ASS_COLOR(opts->osd_style->shadow_color);
|
|
||||||
style->BorderStyle = 1; // outline
|
|
||||||
}
|
|
||||||
|
|
||||||
*o_w = track->PlayResX * (opts->osd_bar_w / 100.0);
|
*o_w = track->PlayResX * (opts->osd_bar_w / 100.0);
|
||||||
*o_h = track->PlayResY * (opts->osd_bar_h / 100.0);
|
*o_h = track->PlayResY * (opts->osd_bar_h / 100.0);
|
||||||
|
|
||||||
style->Outline = opts->osd_bar_border_size;
|
style->Outline = opts->osd_bar_outline_size;
|
||||||
// Rendering with shadow is broken (because there's more than one shape)
|
// Rendering with shadow is broken (because there's more than one shape)
|
||||||
style->Shadow = 0;
|
style->Shadow = 0;
|
||||||
|
|
||||||
@@ -428,7 +425,7 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj)
|
|||||||
|
|
||||||
struct ass_draw *d = &(struct ass_draw) { .scale = 4 };
|
struct ass_draw *d = &(struct ass_draw) { .scale = 4 };
|
||||||
|
|
||||||
if (osd->opts->osd_style->back_color.a) {
|
if (osd->opts->osd_style->back_color.a && osd->opts->osd_style->border_style != 1) {
|
||||||
// the bar style always ignores the --osd-back-color config - it messes
|
// the bar style always ignores the --osd-back-color config - it messes
|
||||||
// up the bar. draw an artificial box at the original back color.
|
// up the bar. draw an artificial box at the original back color.
|
||||||
struct m_color bc = osd->opts->osd_style->back_color;
|
struct m_color bc = osd->opts->osd_style->back_color;
|
||||||
|
|||||||
Reference in New Issue
Block a user