diff --git a/player/lua.c b/player/lua.c index cf0c5caa41..3bf5298578 100644 --- a/player/lua.c +++ b/player/lua.c @@ -967,6 +967,8 @@ static int script_set_osd_ass(lua_State *L) int res_x = luaL_checkinteger(L, 1); int res_y = luaL_checkinteger(L, 2); const char *text = luaL_checkstring(L, 3); + if (!text[0]) + text = " "; // force external OSD initialization osd_set_external(mpctx->osd, res_x, res_y, (char *)text); mp_input_wakeup(mpctx->input); return 0; diff --git a/sub/osd_libass.c b/sub/osd_libass.c index 727faa39f1..bc4a24228a 100644 --- a/sub/osd_libass.c +++ b/sub/osd_libass.c @@ -201,11 +201,12 @@ static void update_osd(struct osd_state *osd, struct osd_object *obj) { struct MPOpts *opts = osd->opts; - create_ass_track(osd, obj, 0, 0); clear_obj(obj); if (!obj->text[0]) return; + create_ass_track(osd, obj, 0, 0); + struct osd_style_opts font = *opts->osd_style; font.font_size *= opts->osd_scale; @@ -326,14 +327,14 @@ static void get_osd_bar_box(struct osd_state *osd, struct osd_object *obj, static void update_progbar(struct osd_state *osd, struct osd_object *obj) { - float px, py, width, height, border; - get_osd_bar_box(osd, obj, &px, &py, &width, &height, &border); - clear_obj(obj); if (obj->progbar_state.type < 0) return; + float px, py, width, height, border; + get_osd_bar_box(osd, obj, &px, &py, &width, &height, &border); + float sx = px - border * 2 - height / 4; // includes additional spacing float sy = py + height / 2; @@ -404,10 +405,13 @@ static void update_progbar(struct osd_state *osd, struct osd_object *obj) static void update_external(struct osd_state *osd, struct osd_object *obj) { - create_ass_track(osd, obj, obj->external_res_x, obj->external_res_y); clear_obj(obj); bstr t = bstr0(obj->text); + if (!t.len) + return; + create_ass_track(osd, obj, obj->external_res_x, obj->external_res_y); + while (t.len) { bstr line; bstr_split_tok(t, "\n", &line, &t);