From 4de73fd5c18b982d0a89e2381fcdb3c1e3fea4e3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 21 Jan 2014 23:43:54 +0100 Subject: video/out: don't access aspdat in VOs vo->aspdat is basically an outdated version of vo->params, plus some weirdness. Get rid of it, which will allow further cleanups and which will make multithreading easier (less state to care about). Also, simplify some VO code by using mp_image_set_attributes() instead of caring about display size, colorspace, etc. manually. Add the function osd_res_from_image_params(), which is often needed in the case OSD renders into an image. --- sub/osd.c | 15 +++++++++++++++ sub/osd.h | 3 +++ 2 files changed, 18 insertions(+) (limited to 'sub') diff --git a/sub/osd.c b/sub/osd.c index f1953ffa84..8da9fd0756 100644 --- a/sub/osd.c +++ b/sub/osd.c @@ -386,6 +386,21 @@ void osd_draw_on_image_p(struct osd_state *osd, struct mp_osd_res res, &draw_on_image, &closure); } +// Setup the OSD resolution to render into an image with the given parameters. +// The interesting part about this is that OSD has to compensate the aspect +// ratio if the image does not have a 1:1 pixel aspect ratio. +struct mp_osd_res osd_res_from_image_params(const struct mp_image_params *p) +{ + double sar = (double)p->w / p->h; + double dar = (double)p->d_w / p->d_h; + + return (struct mp_osd_res) { + .w = p->w, + .h = p->h, + .display_par = sar / dar, + }; +} + void osd_changed(struct osd_state *osd, int new_value) { pthread_mutex_lock(&osd->lock); diff --git a/sub/osd.h b/sub/osd.h index 239286c5e6..048256bb92 100644 --- a/sub/osd.h +++ b/sub/osd.h @@ -200,6 +200,9 @@ void osd_draw_on_image_p(struct osd_state *osd, struct mp_osd_res res, double video_pts, int draw_flags, struct mp_image_pool *pool, struct mp_image *dest); +struct mp_image_params; +struct mp_osd_res osd_res_from_image_params(const struct mp_image_params *p); + void osd_object_get_scale_factor(struct osd_state *osd, int obj, double *sw, double *sh); -- cgit v1.2.3