diff options
author | Oleg Oshmyan <chortos@inbox.lv> | 2012-08-23 00:59:46 +0300 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2013-03-03 23:17:50 +0100 |
commit | 0e1702ad7a6a827d400c87b7a98aea11e54d2127 (patch) | |
tree | b10acef8f093190ff44eb243040b26873020bb22 /libass/ass_render_api.c | |
parent | 340ff8f4cbde87d2ce7d1133889e3afdd66d4e06 (diff) | |
download | libass-0e1702ad7a6a827d400c87b7a98aea11e54d2127.tar.bz2 libass-0e1702ad7a6a827d400c87b7a98aea11e54d2127.tar.xz |
Add ass_set_storage_size and fix related scaling issues
\blur radius is not scaled from script to storage resolution
but is scaled from storage to display resolution. The same
applies to borders and shadows if ScaledBorderAndShadow is "no".
(If it is "yes", borders and shadows are scaled from script
to display resolution just like before.)
Diffstat (limited to 'libass/ass_render_api.c')
-rw-r--r-- | libass/ass_render_api.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/libass/ass_render_api.c b/libass/ass_render_api.c index e70e5ed1..babc442b 100644 --- a/libass/ass_render_api.c +++ b/libass/ass_render_api.c @@ -43,6 +43,13 @@ static void ass_reconfigure(ASS_Renderer *priv) priv->orig_height_nocrop = settings->frame_height - FFMAX(settings->top_margin, 0) - FFMAX(settings->bottom_margin, 0); + if (settings->storage_height) { + priv->storage_width = settings->storage_width; + priv->storage_height = settings->storage_height; + } else { + priv->storage_width = priv->orig_width; + priv->storage_height = priv->orig_height; + } } void ass_set_frame_size(ASS_Renderer *priv, int w, int h) @@ -50,10 +57,26 @@ void ass_set_frame_size(ASS_Renderer *priv, int w, int h) if (priv->settings.frame_width != w || priv->settings.frame_height != h) { priv->settings.frame_width = w; priv->settings.frame_height = h; - if (priv->settings.aspect == 0.) { + if (priv->settings.aspect == 0.) priv->settings.aspect = ((double) w) / h; + if (priv->settings.storage_aspect == 0.) priv->settings.storage_aspect = ((double) w) / h; - } + ass_reconfigure(priv); + } +} + +void ass_set_storage_size(ASS_Renderer *priv, int w, int h) +{ + if (!w || !h) { + ass_msg(priv->library, MSGL_WARN, + "ass_set_storage_size: ignoring zero storage dimensions"); + return; + } + if (priv->settings.storage_width != w || + priv->settings.storage_height != h) { + priv->settings.storage_width = w; + priv->settings.storage_height = h; + priv->settings.storage_aspect = ((double) w) / h; ass_reconfigure(priv); } } |