]> granicus.if.org Git - libass/commitdiff
Use ass_renderer to access settings instead of passing a pointer to
authorgreg <greg@blackbox>
Thu, 18 Jun 2009 12:07:43 +0000 (14:07 +0200)
committergreg <greg@blackbox>
Fri, 19 Jun 2009 03:17:22 +0000 (05:17 +0200)
ass_settings, where appropriate.

libass/ass_render.c

index 8895a8844b1a35668034717d7bef5c9c14c6116f..71f1300e03fd2f01f48a0e299b2844013bf52769 100644 (file)
@@ -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;