The legacy mp.set_osd_ass(...) is still supported (but also still undocumented) as a wrapper for the new mp.create_osd_overlay(...).
Unified · Split
| @@ -153,6 +153,10 @@ success, ``fn`` is called always a-sync, ``error`` is empty string on success. · 152 unmodified lines | ||
| 153 | 153 | |
| 154 | 154 | ``mp.unregister_script_message(name)`` |
| 155 | 155 | |
| 156 | +``mp.create_osd_overlay(format)`` | |
| 157 | + | |
| 158 | +``mp.get_osd_size()`` (returned object has properties: width, height, aspect) | |
| 159 | + | |
| 156 | 160 | ``mp.msg.log(level, ...)`` |
| 157 | 161 | |
| 158 | 162 | ``mp.msg.fatal(...)`` |
| @@ -732,17 +732,6 @@ static void script_get_time_ms(js_State *J) · 731 unmodified lines | ||
| 732 | 732 | js_pushnumber(J, mpv_get_time_us(jclient(J)) / (double)(1000)); |
| 733 | 733 | } |
| 734 | 734 | |
| 735 | −static void script_set_osd_ass(js_State *J) | |
| 736 | −{ | |
| 737 | − struct script_ctx *ctx = jctx(J); | |
| 738 | − int res_x = jsL_checkint(J, 1); | |
| 739 | − int res_y = jsL_checkint(J, 2); | |
| 740 | − const char *text = js_tostring(J, 3); | |
| 741 | − //osd_set_external(ctx->mpctx->osd, ctx->client, res_x, res_y, (char *)text); | |
| 742 | − mp_wakeup_core(ctx->mpctx); | |
| 743 | − push_success(J); | |
| 744 | −} | |
| 745 | − | |
| 746 | 735 | // push object with properties names (NULL terminated) with respective vals |
| 747 | 736 | static void push_nums_obj(js_State *J, const char * const names[], |
| 748 | 737 | const double vals[]) |
| @@ -754,16 +743,6 @@ static void push_nums_obj(js_State *J, const char * const names[], · 5 unmodified lines | ||
| 754 | 743 | } |
| 755 | 744 | } |
| 756 | 745 | |
| 757 | −// args: none, return: object with properties width, height, aspect | |
| 758 | −static void script_get_osd_size(js_State *J) | |
| 759 | −{ | |
| 760 | − struct mp_osd_res r = osd_get_vo_res(jctx(J)->mpctx->osd); | |
| 761 | − double ar = 1.0 * r.w / MPMAX(r.h, 1) / (r.display_par ? r.display_par : 1); | |
| 762 | − const char * const names[] = {"width", "height", "aspect", NULL}; | |
| 763 | − const double vals[] = {r.w, r.h, ar}; | |
| 764 | − push_nums_obj(J, names, vals); | |
| 765 | −} | |
| 766 | − | |
| 767 | 746 | // args: none, return: object with properties top, bottom, left, right |
| 768 | 747 | static void script_get_osd_margins(js_State *J) |
| 769 | 748 | { |
| @@ -1258,8 +1237,6 @@ static const struct fn_entry main_fns[] = { · 488 unmodified lines | ||
| 1258 | 1237 | FN_ENTRY(get_wakeup_pipe, 0), |
| 1259 | 1238 | FN_ENTRY(_hook_add, 3), |
| 1260 | 1239 | FN_ENTRY(_hook_continue, 1), |
| 1261 | − FN_ENTRY(set_osd_ass, 3), | |
| 1262 | − FN_ENTRY(get_osd_size, 0), | |
| 1263 | 1240 | FN_ENTRY(get_osd_margins, 0), |
| 1264 | 1241 | FN_ENTRY(get_mouse_pos, 0), |
| 1265 | 1242 | FN_ENTRY(input_set_section_mouse_area, 5), |
| @@ -192,6 +192,59 @@ mp.utils.shared_script_property_set = shared_script_property_set; · 191 unmodified lines | ||
| 192 | 192 | mp.utils.shared_script_property_get = shared_script_property_get; |
| 193 | 193 | mp.utils.shared_script_property_observe = shared_script_property_observe; |
| 194 | 194 | |
| 195 | +// osd-ass | |
| 196 | +var next_assid = 1; | |
| 197 | +mp.create_osd_overlay = function create_osd_overlay(format) { | |
| 198 | + return { | |
| 199 | + format: format || "ass-events", | |
| 200 | + id: next_assid++, | |
| 201 | + data: "", | |
| 202 | + res_x: 0, | |
| 203 | + res_y: 720, | |
| 204 | + z: 0, | |
| 205 | + | |
| 206 | + update: function ass_update() { | |
| 207 | + mp.command_native({ | |
| 208 | + name: "osd-overlay", | |
| 209 | + format: this.format, | |
| 210 | + id: this.id, | |
| 211 | + data: this.data, | |
| 212 | + res_x: Math.round(this.res_x), | |
| 213 | + res_y: Math.round(this.res_y), | |
| 214 | + z: this.z, | |
| 215 | + }); | |
| 216 | + return mp.last_error() ? undefined : true; | |
| 217 | + }, | |
| 218 | + | |
| 219 | + remove: function ass_remove() { | |
| 220 | + mp.command_native({ | |
| 221 | + name: "osd-overlay", | |
| 222 | + id: this.id, | |
| 223 | + format: "none", | |
| 224 | + data: "", | |
| 225 | + }); | |
| 226 | + return mp.last_error() ? undefined : true; | |
| 227 | + }, | |
| 228 | + }; | |
| 229 | +} | |
| 230 | + | |
| 231 | +// osd-ass legacy API | |
| 232 | +mp.set_osd_ass = function set_osd_ass(res_x, res_y, data) { | |
| 233 | + if (!mp._legacy_overlay) | |
| 234 | + mp._legacy_overlay = mp.create_osd_overlay("ass-events"); | |
| 235 | + mp._legacy_overlay.res_x = res_x; | |
| 236 | + mp._legacy_overlay.res_y = res_y; | |
| 237 | + mp._legacy_overlay.data = data; | |
| 238 | + return mp._legacy_overlay.update(); | |
| 239 | +} | |
| 240 | + | |
| 241 | +mp.get_osd_size = function get_osd_size() { | |
| 242 | + var w = mp.get_property_number("osd-width", 0), | |
| 243 | + h = mp.get_property_number("osd-height", 0), | |
| 244 | + par = mp.get_property_number("osd-par", 0); | |
| 245 | + return {width: w, height: h, aspect: w / (h || 1) / (par || 1)}; | |
| 246 | +} | |
| 247 | + | |
| 195 | 248 | /********************************************************************** |
| 196 | 249 | * key bindings |
| 197 | 250 | *********************************************************************/ |