From 828af33bfefd0ddeab10f9f979a144ed3f195194 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Wed, 26 Jan 2011 04:12:25 +0200 Subject: [PATCH] subtitles: change default libass rendering style Change the default style used for rendering plaintext subtitles with libass. The following attributes change: * FontSize: Increase the size multiplier used with the default -subfont-autoscale 3 from 1.4 to 1.7, thus making the font 21% larger. Actually implementing the -subfont-autoscale modes other than 1 would give a multiplier of 5/3=1.67 for 4:3 aspect ratio video, sqrt(337)/9=2.04 for 16:9. * PrimaryColour: Change color from yellow to white. * Outline: Before this was 2 regardless of user font size choice. Make it FontSize/16 instead. With default font size this is about half the previous width. * Kerning: Enable kerning for the track. There won't be styling designed for VSFilter's lack of kerning, and hopefully people won't use broken fonts with bad kerning tables for the default font either. --- ass_mp.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/ass_mp.c b/ass_mp.c index 37e688d7f1..98602ace03 100644 --- a/ass_mp.c +++ b/ass_mp.c @@ -70,8 +70,6 @@ extern char *sub_cp; static char *sub_cp = 0; #endif -void process_force_style(ASS_Track *track); - ASS_Track *mp_ass_default_track(ASS_Library *library) { ASS_Track *track = ass_new_track(library); @@ -85,13 +83,9 @@ ASS_Track *mp_ass_default_track(ASS_Library *library) ass_read_styles(track, ass_styles_file, sub_cp); if (track->n_styles == 0) { - ASS_Style *style; - int sid; - double fs; - uint32_t c1, c2; - - sid = ass_alloc_style(track); - style = track->styles + sid; + track->Kerning = true; + int sid = ass_alloc_style(track); + ASS_Style *style = track->styles + sid; style->Name = strdup("Default"); style->FontName = (font_fontconfig >= 0 && sub_font_name) ? strdup(sub_font_name) @@ -99,30 +93,34 @@ ASS_Track *mp_ass_default_track(ASS_Library *library) && font_name) ? strdup(font_name) : strdup("Sans"); style->treat_fontname_as_pattern = 1; - fs = track->PlayResY * text_font_scale_factor / 100.; - // approximate autoscale coefficients + double fs = track->PlayResY * text_font_scale_factor / 100.; + /* The font size is always proportional to video height only; + * real -subfont-autoscale behavior is not implemented. + * Apply a correction that corresponds to about 4:3 aspect ratio + * video to get a size somewhat closer to what non-libass rendering + * would produce with the same text_font_scale_factor + * and subtitle_autoscale. + */ if (subtitle_autoscale == 2) fs *= 1.3; else if (subtitle_autoscale == 3) - fs *= 1.4; - style->FontSize = fs; + fs *= 1.7; + uint32_t c1 = 0xFFFFFF00; + uint32_t c2 = 0x00000000; if (ass_color) c1 = strtoll(ass_color, NULL, 16); - else - c1 = 0xFFFF0000; if (ass_border_color) c2 = strtoll(ass_border_color, NULL, 16); - else - c2 = 0x00000000; + style->FontSize = fs; style->PrimaryColour = c1; style->SecondaryColour = c1; style->OutlineColour = c2; style->BackColour = 0x00000000; style->BorderStyle = 1; style->Alignment = 2; - style->Outline = 2; + style->Outline = fs / 16; style->MarginL = 10; style->MarginR = 10; style->MarginV = 5;