From fd49edccf811de0d6c61f30d8b2b524f8df93b36 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 30 Sep 2013 22:25:34 +0200 Subject: [PATCH] command: add properties for retrieving OSD dimensions --- DOCS/man/en/input.rst | 3 +++ mpvcore/command.c | 23 +++++++++++++++++++++++ sub/sub.c | 3 +++ sub/sub.h | 2 ++ 4 files changed, 31 insertions(+) diff --git a/DOCS/man/en/input.rst b/DOCS/man/en/input.rst index 558bb39fbf..a0014c51bd 100644 --- a/DOCS/man/en/input.rst +++ b/DOCS/man/en/input.rst @@ -463,6 +463,9 @@ Name W Comment ``dwidth`` video width (after filters and aspect scaling) ``dheight`` video height ``aspect`` x video aspect +``osd-width`` last known OSD width (can be 0) +``osd-height`` last known OSD height (can be 0) +``osd-par`` last known OSD display pixel aspect (can be 0) ``vid`` x current video track (similar to ``--vid``) ``video`` x alias for ``vid`` ``video-align-x`` x see ``--video-align-x`` diff --git a/mpvcore/command.c b/mpvcore/command.c index 3dc813673b..e1c7e6e79e 100644 --- a/mpvcore/command.c +++ b/mpvcore/command.c @@ -1458,6 +1458,25 @@ static int mp_property_dheight(m_option_t *prop, int action, void *arg, return property_vo_wh(prop, action, arg, mpctx, false); } +static int mp_property_osd_w(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + return m_property_int_ro(prop, action, arg, mpctx->osd->last_vo_res.w); +} + +static int mp_property_osd_h(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + return m_property_int_ro(prop, action, arg, mpctx->osd->last_vo_res.w); +} + +static int mp_property_osd_par(m_option_t *prop, int action, void *arg, + MPContext *mpctx) +{ + return m_property_double_ro(prop, action, arg, + mpctx->osd->last_vo_res.display_par); +} + /// Video fps (RO) static int mp_property_fps(m_option_t *prop, int action, void *arg, MPContext *mpctx) @@ -1880,6 +1899,10 @@ static const m_option_t mp_properties[] = { { "program", mp_property_program, CONF_TYPE_INT, CONF_RANGE, -1, 65535, NULL }, + { "osd-width", mp_property_osd_w, CONF_TYPE_INT }, + { "osd-height", mp_property_osd_h, CONF_TYPE_INT }, + { "osd-par", mp_property_osd_par, CONF_TYPE_DOUBLE }, + // Subs M_OPTION_PROPERTY_CUSTOM("sid", mp_property_sub), M_OPTION_PROPERTY_CUSTOM("sub-delay", mp_property_sub_delay), diff --git a/sub/sub.c b/sub/sub.c index 1beb9e8138..cc4a76c065 100644 --- a/sub/sub.c +++ b/sub/sub.c @@ -222,6 +222,9 @@ void osd_draw(struct osd_state *osd, struct mp_osd_res res, if (draw_flags & OSD_DRAW_SUB_FILTER) draw_flags |= OSD_DRAW_SUB_ONLY; + if (!(draw_flags & OSD_DRAW_SUB_ONLY)) + osd->last_vo_res = res; + for (int n = 0; n < MAX_OSD_PARTS; n++) { struct osd_object *obj = osd->objs[n]; diff --git a/sub/sub.h b/sub/sub.h index 35527f266b..1118fec5c1 100644 --- a/sub/sub.h +++ b/sub/sub.h @@ -128,6 +128,8 @@ struct osd_state { bool render_subs_in_filter; bool render_bitmap_subs; + struct mp_osd_res last_vo_res; + bool want_redraw; // OSDTYPE_OSD