summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgreg <greg@blackbox>2009-06-18 14:07:43 +0200
committergreg <greg@blackbox>2009-06-19 05:17:22 +0200
commit7336b01091b127beb292aecc3e6ce84fd1e00b14 (patch)
treed169638dd73644d7637980d816d085b6c7953cde
parente0508248f02abf1c29bf46d4c19604f4b2156211 (diff)
downloadlibass-7336b01091b127beb292aecc3e6ce84fd1e00b14.tar.bz2
libass-7336b01091b127beb292aecc3e6ce84fd1e00b14.tar.xz
Use ass_renderer to access settings instead of passing a pointer to
ass_settings, where appropriate.
-rw-r--r--libass/ass_render.c98
1 files changed, 50 insertions, 48 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 8895a88..71f1300 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -208,9 +208,11 @@ struct render_priv_s {
int render_id;
};
-static void ass_lazy_track_init(ass_renderer_t* render_priv, ass_settings_t* settings_priv)
+static void ass_lazy_track_init(ass_renderer_t* render_priv)
{
ass_track_t* track = render_priv->track;
+ ass_settings_t* settings_priv = &render_priv->settings;
+
if (track->PlayResX && track->PlayResY)
return;
if (!track->PlayResX && !track->PlayResY) {
@@ -573,43 +575,43 @@ static ass_image_t* render_text(ass_renderer_t* render_priv, text_info_t* text_i
/**
* \brief Mapping between script and screen coordinates
*/
-static int x2scr(ass_renderer_t* render_priv, ass_settings_t* priv, double x) {
+static int x2scr(ass_renderer_t* render_priv, double x) {
return x*render_priv->orig_width_nocrop / render_priv->track->PlayResX +
- FFMAX(priv->left_margin, 0);
+ FFMAX(render_priv->settings.left_margin, 0);
}
-static double x2scr_pos(ass_renderer_t* render_priv, ass_settings_t* priv, double x) {
+static double x2scr_pos(ass_renderer_t* render_priv, double x) {
return x*render_priv->orig_width / render_priv->track->PlayResX +
- priv->left_margin;
+ render_priv->settings.left_margin;
}
/**
* \brief Mapping between script and screen coordinates
*/
-static double y2scr(ass_renderer_t* render_priv, ass_settings_t* priv, double y) {
+static double y2scr(ass_renderer_t* render_priv, double y) {
return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY +
- FFMAX(priv->top_margin, 0);
+ FFMAX(render_priv->settings.top_margin, 0);
}
-static double y2scr_pos(ass_renderer_t* render_priv, ass_settings_t* priv, double y) {
+static double y2scr_pos(ass_renderer_t* render_priv, double y) {
return y * render_priv->orig_height / render_priv->track->PlayResY +
- priv->top_margin;
+ render_priv->settings.top_margin;
}
// the same for toptitles
-static int y2scr_top(ass_renderer_t* render_priv, ass_settings_t* priv, double y) {
- if (priv->use_margins)
+static int y2scr_top(ass_renderer_t* render_priv, double y) {
+ if (render_priv->settings.use_margins)
return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY;
else
return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY +
- FFMAX(priv->top_margin, 0);
+ FFMAX(render_priv->settings.top_margin, 0);
}
// the same for subtitles
-static int y2scr_sub(ass_renderer_t* render_priv, ass_settings_t* priv, double y) {
- if (priv->use_margins)
+static int y2scr_sub(ass_renderer_t* render_priv, double y) {
+ if (render_priv->settings.use_margins)
return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY +
- FFMAX(priv->top_margin, 0) +
- FFMAX(priv->bottom_margin, 0);
+ FFMAX(render_priv->settings.top_margin, 0) +
+ FFMAX(render_priv->settings.bottom_margin, 0);
else
return y * render_priv->orig_height_nocrop / render_priv->track->PlayResY +
- FFMAX(priv->top_margin, 0);
+ FFMAX(render_priv->settings.top_margin, 0);
}
static void compute_string_bbox( text_info_t* info, FT_BBox *abbox ) {
@@ -1420,7 +1422,7 @@ static void free_render_context(void)
* and add them to cache.
* The glyphs are returned in info->glyph and info->outline_glyph
*/
-static void get_outline_glyph(ass_renderer_t* render_priv, ass_settings_t* priv, int symbol, glyph_info_t* info, FT_Vector* advance)
+static void get_outline_glyph(ass_renderer_t* render_priv, int symbol, glyph_info_t* info, FT_Vector* advance)
{
int error;
glyph_hash_val_t* val;
@@ -1448,7 +1450,7 @@ static void get_outline_glyph(ass_renderer_t* render_priv, ass_settings_t* priv,
info->advance.y = val->advance.y;
} else {
glyph_hash_val_t v;
- info->glyph = ass_font_get_glyph(render_priv->fontconfig_priv, render_context.font, symbol, priv->hinting);
+ info->glyph = ass_font_get_glyph(render_priv->fontconfig_priv, render_context.font, symbol, render_priv->settings.hinting);
if (!info->glyph)
return;
info->advance.x = d16_to_d6(info->glyph->advance.x);
@@ -1940,8 +1942,8 @@ static int ass_render_event(ass_renderer_t* render_priv, ass_event_t* event, eve
shift.y = pen.y & SUBPIXEL_MASK;
if (render_context.evt_type == EVENT_POSITIONED) {
- shift.x += double_to_d6(x2scr_pos(render_priv, settings_priv, render_context.pos_x)) & SUBPIXEL_MASK;
- shift.y -= double_to_d6(y2scr_pos(render_priv, settings_priv, render_context.pos_y)) & SUBPIXEL_MASK;
+ shift.x += double_to_d6(x2scr_pos(render_priv, render_context.pos_x)) & SUBPIXEL_MASK;
+ shift.y -= double_to_d6(y2scr_pos(render_priv, render_context.pos_y)) & SUBPIXEL_MASK;
}
ass_font_set_transform(render_context.font,
@@ -1949,7 +1951,7 @@ static int ass_render_event(ass_renderer_t* render_priv, ass_event_t* event, eve
render_context.scale_y,
&shift );
- get_outline_glyph(render_priv, settings_priv, code, text_info.glyphs + text_info.length, &shift);
+ get_outline_glyph(render_priv, code, text_info.glyphs + text_info.length, &shift);
text_info.glyphs[text_info.length].pos.x = pen.x >> 6;
text_info.glyphs[text_info.length].pos.y = pen.y >> 6;
@@ -2027,7 +2029,7 @@ static int ass_render_event(ass_renderer_t* render_priv, ass_event_t* event, eve
int max_text_width;
// calculate max length of a line
- max_text_width = x2scr(render_priv, settings_priv, render_priv->track->PlayResX - MarginR) - x2scr(render_priv, settings_priv, MarginL);
+ max_text_width = x2scr(render_priv, render_priv->track->PlayResX - MarginR) - x2scr(render_priv, MarginL);
// rearrange text in several lines
wrap_lines_smart(settings_priv, max_text_width);
@@ -2069,36 +2071,36 @@ static int ass_render_event(ass_renderer_t* render_priv, ass_event_t* event, eve
// x coordinate for everything except positioned events
if (render_context.evt_type == EVENT_NORMAL ||
render_context.evt_type == EVENT_VSCROLL) {
- device_x = x2scr(render_priv, settings_priv, MarginL);
+ device_x = x2scr(render_priv, MarginL);
} else if (render_context.evt_type == EVENT_HSCROLL) {
if (render_context.scroll_direction == SCROLL_RL)
- device_x = x2scr(render_priv, settings_priv, render_priv->track->PlayResX - render_context.scroll_shift);
+ device_x = x2scr(render_priv, render_priv->track->PlayResX - render_context.scroll_shift);
else if (render_context.scroll_direction == SCROLL_LR)
- device_x = x2scr(render_priv, settings_priv, render_context.scroll_shift) - (bbox.xMax - bbox.xMin);
+ device_x = x2scr(render_priv, render_context.scroll_shift) - (bbox.xMax - bbox.xMin);
}
// y coordinate for everything except positioned events
if (render_context.evt_type == EVENT_NORMAL ||
render_context.evt_type == EVENT_HSCROLL) {
if (valign == VALIGN_TOP) { // toptitle
- device_y = y2scr_top(render_priv, settings_priv, MarginV) + d6_to_int(text_info.lines[0].asc);
+ device_y = y2scr_top(render_priv, MarginV) + d6_to_int(text_info.lines[0].asc);
} else if (valign == VALIGN_CENTER) { // midtitle
- int scr_y = y2scr(render_priv, settings_priv, render_priv->track->PlayResY / 2);
+ int scr_y = y2scr(render_priv, render_priv->track->PlayResY / 2);
device_y = scr_y - (bbox.yMax - bbox.yMin) / 2;
} else { // subtitle
int scr_y;
if (valign != VALIGN_SUB)
mp_msg(MSGT_ASS, MSGL_V, "Invalid valign, supposing 0 (subtitle)\n");
- scr_y = y2scr_sub(render_priv, settings_priv, render_priv->track->PlayResY - MarginV);
+ scr_y = y2scr_sub(render_priv, render_priv->track->PlayResY - MarginV);
device_y = scr_y;
device_y -= d6_to_int(text_info.height);
device_y += d6_to_int(text_info.lines[0].asc);
}
} else if (render_context.evt_type == EVENT_VSCROLL) {
if (render_context.scroll_direction == SCROLL_TB)
- device_y = y2scr(render_priv, settings_priv, render_context.clip_y0 + render_context.scroll_shift) - (bbox.yMax - bbox.yMin);
+ device_y = y2scr(render_priv, render_context.clip_y0 + render_context.scroll_shift) - (bbox.yMax - bbox.yMin);
else if (render_context.scroll_direction == SCROLL_BT)
- device_y = y2scr(render_priv, settings_priv, render_context.clip_y1 - render_context.scroll_shift);
+ device_y = y2scr(render_priv, render_context.clip_y1 - render_context.scroll_shift);
}
// positioned events are totally different
@@ -2107,31 +2109,31 @@ static int ass_render_event(ass_renderer_t* render_priv, ass_event_t* event, eve
int base_y = 0;
mp_msg(MSGT_ASS, MSGL_DBG2, "positioned event at %f, %f\n", render_context.pos_x, render_context.pos_y);
get_base_point(bbox, alignment, &base_x, &base_y);
- device_x = x2scr_pos(render_priv, settings_priv, render_context.pos_x) - base_x;
- device_y = y2scr_pos(render_priv, settings_priv, render_context.pos_y) - base_y;
+ device_x = x2scr_pos(render_priv, render_context.pos_x) - base_x;
+ device_y = y2scr_pos(render_priv, render_context.pos_y) - base_y;
}
// fix clip coordinates (they depend on alignment)
if (render_context.evt_type == EVENT_NORMAL ||
render_context.evt_type == EVENT_HSCROLL ||
render_context.evt_type == EVENT_VSCROLL) {
- render_context.clip_x0 = x2scr(render_priv, settings_priv, render_context.clip_x0);
- render_context.clip_x1 = x2scr(render_priv, settings_priv, render_context.clip_x1);
+ render_context.clip_x0 = x2scr(render_priv, render_context.clip_x0);
+ render_context.clip_x1 = x2scr(render_priv, render_context.clip_x1);
if (valign == VALIGN_TOP) {
- render_context.clip_y0 = y2scr_top(render_priv, settings_priv, render_context.clip_y0);
- render_context.clip_y1 = y2scr_top(render_priv, settings_priv, render_context.clip_y1);
+ render_context.clip_y0 = y2scr_top(render_priv, render_context.clip_y0);
+ render_context.clip_y1 = y2scr_top(render_priv, render_context.clip_y1);
} else if (valign == VALIGN_CENTER) {
- render_context.clip_y0 = y2scr(render_priv, settings_priv, render_context.clip_y0);
- render_context.clip_y1 = y2scr(render_priv, settings_priv, render_context.clip_y1);
+ render_context.clip_y0 = y2scr(render_priv, render_context.clip_y0);
+ render_context.clip_y1 = y2scr(render_priv, render_context.clip_y1);
} else if (valign == VALIGN_SUB) {
- render_context.clip_y0 = y2scr_sub(render_priv, settings_priv, render_context.clip_y0);
- render_context.clip_y1 = y2scr_sub(render_priv, settings_priv, render_context.clip_y1);
+ render_context.clip_y0 = y2scr_sub(render_priv, render_context.clip_y0);
+ render_context.clip_y1 = y2scr_sub(render_priv, render_context.clip_y1);
}
} else if (render_context.evt_type == EVENT_POSITIONED) {
- render_context.clip_x0 = x2scr_pos(render_priv, settings_priv, render_context.clip_x0);
- render_context.clip_x1 = x2scr_pos(render_priv, settings_priv, render_context.clip_x1);
- render_context.clip_y0 = y2scr_pos(render_priv, settings_priv, render_context.clip_y0);
- render_context.clip_y1 = y2scr_pos(render_priv, settings_priv, render_context.clip_y1);
+ render_context.clip_x0 = x2scr_pos(render_priv, render_context.clip_x0);
+ render_context.clip_x1 = x2scr_pos(render_priv, render_context.clip_x1);
+ render_context.clip_y0 = y2scr_pos(render_priv, render_context.clip_y0);
+ render_context.clip_y1 = y2scr_pos(render_priv, render_context.clip_y1);
}
// calculate rotation parameters
@@ -2139,8 +2141,8 @@ static int ass_render_event(ass_renderer_t* render_priv, ass_event_t* event, eve
FT_Vector center;
if (render_context.have_origin) {
- center.x = x2scr(render_priv, settings_priv, render_context.org_x);
- center.y = y2scr(render_priv, settings_priv, render_context.org_y);
+ center.x = x2scr(render_priv, render_context.org_x);
+ center.y = y2scr(render_priv, render_context.org_y);
} else {
int bx = 0, by = 0;
get_base_point(bbox, alignment, &bx, &by);
@@ -2313,7 +2315,7 @@ static int ass_start_frame(ass_renderer_t *render_priv, ass_track_t* track, long
render_priv->track = track;
render_priv->time = now;
- ass_lazy_track_init(render_priv, settings_priv);
+ ass_lazy_track_init(render_priv);
render_priv->font_scale = settings_priv->font_size_coeff *
render_priv->orig_height / render_priv->track->PlayResY;