summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libass/ass_render.c27
-rw-r--r--libvo/vo_gl.c4
2 files changed, 22 insertions, 9 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index d0facd7cb4..5b97b8a2d4 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -184,6 +184,8 @@ typedef struct frame_context_s {
int width, height; // screen dimensions
int orig_height; // frame height ( = screen height - margins )
int orig_width; // frame width ( = screen width - margins )
+ int orig_height_nocrop; // frame height ( = screen height - margins + cropheight)
+ int orig_width_nocrop; // frame width ( = screen width - margins + cropwidth)
ass_track_t* track;
long long time; // frame's timestamp, ms
double font_scale;
@@ -446,28 +448,33 @@ static ass_image_t* render_text(text_info_t* text_info, int dst_x, int dst_y)
* \brief Mapping between script and screen coordinates
*/
static int x2scr(int x) {
- return x*frame_context.orig_width / frame_context.track->PlayResX + global_settings->left_margin;
+ return x*frame_context.orig_width_nocrop / frame_context.track->PlayResX +
+ FFMAX(global_settings->left_margin, 0);
}
/**
* \brief Mapping between script and screen coordinates
*/
static int y2scr(int y) {
- return y * frame_context.orig_height / frame_context.track->PlayResY + global_settings->top_margin;
+ return y * frame_context.orig_height_nocrop / frame_context.track->PlayResY +
+ FFMAX(global_settings->top_margin, 0);
}
// the same for toptitles
static int y2scr_top(int y) {
if (global_settings->use_margins)
- return y * frame_context.orig_height / frame_context.track->PlayResY;
+ return y * frame_context.orig_height_nocrop / frame_context.track->PlayResY;
else
- return y * frame_context.orig_height / frame_context.track->PlayResY + global_settings->top_margin;
+ return y * frame_context.orig_height_nocrop / frame_context.track->PlayResY +
+ FFMAX(global_settings->top_margin, 0);
}
// the same for subtitles
static int y2scr_sub(int y) {
if (global_settings->use_margins)
- return y * frame_context.orig_height / frame_context.track->PlayResY +
- global_settings->top_margin + global_settings->bottom_margin;
+ return y * frame_context.orig_height_nocrop / frame_context.track->PlayResY +
+ FFMAX(global_settings->top_margin, 0) +
+ FFMAX(global_settings->bottom_margin, 0);
else
- return y * frame_context.orig_height / frame_context.track->PlayResY + global_settings->top_margin;
+ return y * frame_context.orig_height_nocrop / frame_context.track->PlayResY +
+ FFMAX(global_settings->top_margin, 0);
}
static void compute_string_bbox( text_info_t* info, FT_BBox *abbox ) {
@@ -2101,6 +2108,12 @@ static int ass_start_frame(ass_renderer_t *priv, ass_track_t* track, long long n
frame_context.height = global_settings->frame_height;
frame_context.orig_width = global_settings->frame_width - global_settings->left_margin - global_settings->right_margin;
frame_context.orig_height = global_settings->frame_height - global_settings->top_margin - global_settings->bottom_margin;
+ frame_context.orig_width_nocrop = global_settings->frame_width -
+ FFMAX(global_settings->left_margin, 0) -
+ FFMAX(global_settings->right_margin, 0);
+ frame_context.orig_height_nocrop = global_settings->frame_height -
+ FFMAX(global_settings->top_margin, 0) -
+ FFMAX(global_settings->bottom_margin, 0);
frame_context.track = track;
frame_context.time = now;
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c
index a81c783365..9b8e55fdd5 100644
--- a/libvo/vo_gl.c
+++ b/libvo/vo_gl.c
@@ -907,8 +907,8 @@ static int control(uint32_t request, void *data, ...)
if (scaled_osd) {r->w = image_width; r->h = image_height;}
else if (vo_fs) {
r->w = vo_screenwidth; r->h = vo_screenheight;
- r->ml = r->mr = ass_border_x > 0 ? ass_border_x : 0;
- r->mt = r->mb = ass_border_y > 0 ? ass_border_y : 0;
+ r->ml = r->mr = ass_border_x;
+ r->mt = r->mb = ass_border_y;
} else {
r->w = vo_dwidth; r->h = vo_dheight;
}