From 7484ae8e2ee5327400358e7c7cb974d84543aef6 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 7 Aug 2012 02:12:15 +0200 Subject: osd_libass: allocate separate ASS_Library for OSD osd_libass.c used the same ASS_Library object as the player core. This caused a problem: when playing a new file, all fonts loaded by the ASS_Library object were unloaded, including the OSD font. Parts of the OSD would stop being rendered correctly. Solve this by creating a separate ASS_Library, with its own set of fonts. --- sub/osd_libass.c | 8 ++++++-- sub/sub.c | 4 ++-- sub/sub.h | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) (limited to 'sub') diff --git a/sub/osd_libass.c b/sub/osd_libass.c index 03ab9b55dd..3f6564fbca 100644 --- a/sub/osd_libass.c +++ b/sub/osd_libass.c @@ -44,6 +44,7 @@ static const char osd_font_pfb[] = void osd_init_backend(struct osd_state *osd) { + osd->ass_library = mp_ass_init(osd->opts); ass_add_font(osd->ass_library, "OSD", (void *)osd_font_pfb, sizeof(osd_font_pfb) - 1); @@ -54,9 +55,12 @@ void osd_init_backend(struct osd_state *osd) void osd_destroy_backend(struct osd_state *osd) { - if (osd && osd->osd_render) { - ass_renderer_done(osd->osd_render); + if (osd) { + if (osd->osd_render) + ass_renderer_done(osd->osd_render); osd->osd_render = NULL; + ass_library_done(osd->ass_library); + osd->ass_library = NULL; } } diff --git a/sub/sub.c b/sub/sub.c index f88e9869ee..056d03d1e5 100644 --- a/sub/sub.c +++ b/sub/sub.c @@ -36,6 +36,7 @@ #include "mp_msg.h" #include "libvo/video_out.h" #include "sub.h" +#include "sub/ass_mp.h" #include "spudec.h" @@ -303,12 +304,11 @@ int osd_update(struct osd_state *osd, int dxs, int dys) return osd_update_ext(osd, dxs, dys, 0, 0, 0, 0, dxs, dys); } -struct osd_state *osd_create(struct MPOpts *opts, struct ass_library *asslib) +struct osd_state *osd_create(struct MPOpts *opts) { struct osd_state *osd = talloc_zero(NULL, struct osd_state); *osd = (struct osd_state){ .opts = opts, - .ass_library = asslib, }; if(!draw_alpha_init_flag){ draw_alpha_init_flag=1; diff --git a/sub/sub.h b/sub/sub.h index eabf6561d1..2c4117a92a 100644 --- a/sub/sub.h +++ b/sub/sub.h @@ -161,7 +161,7 @@ void osd_draw_text_ext(struct osd_state *osd, int dxs, int dys, int stride), void *ctx); -struct osd_state *osd_create(struct MPOpts *opts, struct ass_library *asslib); +struct osd_state *osd_create(struct MPOpts *opts); void osd_set_text(struct osd_state *osd, const char *text); int osd_update(struct osd_state *osd, int dxs, int dys); void vo_osd_changed(int new_value); -- cgit v1.2.3