mirror of
https://github.com/mpv-player/mpv
synced 2025-02-25 17:58:27 +00:00
ass_mp: provide function to add default styles
This commit is contained in:
parent
9f4261de65
commit
8c63b318dc
37
sub/ass_mp.c
37
sub/ass_mp.c
@ -38,7 +38,9 @@
|
||||
#include "stream/stream.h"
|
||||
#include "core/options.h"
|
||||
|
||||
void mp_ass_set_style(ASS_Style *style, struct osd_style_opts *opts)
|
||||
// res_y should be track->PlayResY
|
||||
// It determines scaling of font sizes and more.
|
||||
void mp_ass_set_style(ASS_Style *style, int res_y, struct osd_style_opts *opts)
|
||||
{
|
||||
if (opts->font) {
|
||||
free(style->FontName);
|
||||
@ -46,9 +48,9 @@ void mp_ass_set_style(ASS_Style *style, struct osd_style_opts *opts)
|
||||
style->treat_fontname_as_pattern = 1;
|
||||
}
|
||||
|
||||
// libass_font_size = FontSize * (window_height / MP_ASS_FONT_PLAYRESY)
|
||||
// scale translates parameters from PlayResY=720 to MP_ASS_FONT_PLAYRESY
|
||||
double scale = MP_ASS_FONT_PLAYRESY / 720.0;
|
||||
// libass_font_size = FontSize * (window_height / res_y)
|
||||
// scale translates parameters from PlayResY=720 to res_y
|
||||
double scale = res_y / 720.0;
|
||||
|
||||
style->FontSize = opts->font_size * scale;
|
||||
style->PrimaryColour = MP_ASS_COLOR(opts->color);
|
||||
@ -74,30 +76,39 @@ void mp_ass_set_style(ASS_Style *style, struct osd_style_opts *opts)
|
||||
#endif
|
||||
}
|
||||
|
||||
ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts)
|
||||
// Add default styles, if the track does not have any styles yet.
|
||||
// Apply style overrides if the user provides any.
|
||||
void mp_ass_add_default_styles(ASS_Track *track, struct MPOpts *opts)
|
||||
{
|
||||
ASS_Track *track = ass_new_track(library);
|
||||
|
||||
track->track_type = TRACK_TYPE_ASS;
|
||||
track->Timer = 100.;
|
||||
track->PlayResY = MP_ASS_FONT_PLAYRESY;
|
||||
track->WrapStyle = 0;
|
||||
|
||||
if (opts->ass_styles_file && opts->ass_style_override)
|
||||
ass_read_styles(track, opts->ass_styles_file, opts->sub_cp);
|
||||
|
||||
if (track->n_styles == 0) {
|
||||
if (!track->PlayResY) {
|
||||
track->PlayResY = MP_ASS_FONT_PLAYRESY;
|
||||
track->PlayResX = track->PlayResY * 4 / 3;
|
||||
}
|
||||
track->Kerning = true;
|
||||
int sid = ass_alloc_style(track);
|
||||
track->default_style = sid;
|
||||
ASS_Style *style = track->styles + sid;
|
||||
style->Name = strdup("Default");
|
||||
style->Alignment = 2;
|
||||
mp_ass_set_style(style, opts->sub_text_style);
|
||||
mp_ass_set_style(style, track->PlayResY, opts->sub_text_style);
|
||||
}
|
||||
|
||||
if (opts->ass_style_override)
|
||||
ass_process_force_style(track);
|
||||
}
|
||||
|
||||
ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts)
|
||||
{
|
||||
ASS_Track *track = ass_new_track(library);
|
||||
|
||||
track->track_type = TRACK_TYPE_ASS;
|
||||
track->Timer = 100.;
|
||||
|
||||
mp_ass_add_default_styles(track, opts);
|
||||
|
||||
return track;
|
||||
}
|
||||
|
@ -44,7 +44,9 @@ struct MPOpts;
|
||||
struct mp_osd_res;
|
||||
struct osd_style_opts;
|
||||
|
||||
void mp_ass_set_style(ASS_Style *style, struct osd_style_opts *opts);
|
||||
void mp_ass_set_style(ASS_Style *style, int res_y, struct osd_style_opts *opts);
|
||||
|
||||
void mp_ass_add_default_styles(ASS_Track *track, struct MPOpts *opts);
|
||||
|
||||
ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts);
|
||||
ASS_Track *mp_ass_read_stream(ASS_Library *library, const char *fname,
|
||||
|
@ -89,7 +89,7 @@ static void create_osd_ass_track(struct osd_state *osd, struct osd_object *obj)
|
||||
ASS_Style *style = track->styles + sid;
|
||||
style->Alignment = 5; // top-title, left
|
||||
style->Name = strdup("OSD");
|
||||
mp_ass_set_style(style, osd->opts->osd_style);
|
||||
mp_ass_set_style(style, MP_ASS_FONT_PLAYRESY, osd->opts->osd_style);
|
||||
// Set to neutral base direction, as opposed to VSFilter LTR default
|
||||
style->Encoding = -1;
|
||||
}
|
||||
@ -158,7 +158,7 @@ static void update_osd(struct osd_state *osd, struct osd_object *obj)
|
||||
font.font_size *= opts->osd_scale;
|
||||
|
||||
ASS_Style *style = obj->osd_track->styles + obj->osd_track->default_style;
|
||||
mp_ass_set_style(style, &font);
|
||||
mp_ass_set_style(style, obj->osd_track->PlayResY, &font);
|
||||
|
||||
char *text = mangle_ass(osd->osd_text);
|
||||
add_osd_ass_event(obj->osd_track, text);
|
||||
@ -364,7 +364,7 @@ static void update_sub(struct osd_state *osd, struct osd_object *obj)
|
||||
font.font_size *= opts->sub_scale;
|
||||
|
||||
ASS_Style *style = obj->osd_track->styles + obj->osd_track->default_style;
|
||||
mp_ass_set_style(style, &font);
|
||||
mp_ass_set_style(style, obj->osd_track->PlayResY, &font);
|
||||
|
||||
#if LIBASS_VERSION >= 0x01010000
|
||||
ass_set_line_position(osd->osd_render, 100 - opts->sub_pos);
|
||||
|
Loading…
Reference in New Issue
Block a user