diff options
author | wm4 <wm4@nowhere> | 2015-11-17 01:54:02 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-11-17 01:56:23 +0100 |
commit | 5a89150a4652d987f24d7d386d5cdc6d9109e66d (patch) | |
tree | fc6085143661672f537a604b6645f79e0dced3ad /sub/osd.c | |
parent | 85450d06a1b1a08fce277f7f14d5ee33b12f8eab (diff) | |
download | mpv-5a89150a4652d987f24d7d386d5cdc6d9109e66d.tar.bz2 mpv-5a89150a4652d987f24d7d386d5cdc6d9109e66d.tar.xz |
player: remove OSD subtitle render path
This was used with --no-sub-ass (aka --no-ass). This option (which is
not yet removed) strips all styling from the subtitles, and renders them
as plaintext only. For some reason, it originally seemed convenient to
reuse all the OSD text rendering code (osd_libass.c). While this was
indeed simple, it had a bad influence on the rest of the code. For
example, it had to decide whether to go through the OSD code path, or
the proper subtitle renderer in sd_ass.c.
Kill the OSD subtitle renderer. Reimplement --no-sub-ass and also
"secondary" subtitles in sd_ass.c. fill_plaintext() contains some rather
minor code duplication with osd_libass.c for setting up a dummy
ASS_Event and escaping the stripped text. Since sd_ass.c already has to
handle "normal" text subtitles, and has code for stripping ASS tags,
this remains all relatively simple.
Remove all the unnecessary crap from the rest of the code.
Diffstat (limited to 'sub/osd.c')
-rw-r--r-- | sub/osd.c | 19 |
1 files changed, 8 insertions, 11 deletions
@@ -163,10 +163,10 @@ void osd_set_text(struct osd_state *osd, int obj, const char *text) pthread_mutex_unlock(&osd->lock); } -void osd_set_sub(struct osd_state *osd, int obj, struct osd_sub_state *substate) +void osd_set_sub(struct osd_state *osd, int obj, struct dec_sub *dec_sub) { pthread_mutex_lock(&osd->lock); - osd->objs[obj]->sub_state = substate ? *substate : (struct osd_sub_state){0}; + osd->objs[obj]->sub = dec_sub; pthread_mutex_unlock(&osd->lock); } @@ -243,14 +243,11 @@ static void render_object(struct osd_state *osd, struct osd_object *obj, obj->vo_res = res; if (obj->type == OSDTYPE_SUB || obj->type == OSDTYPE_SUB2) { - struct osd_sub_state *sub = &obj->sub_state; - if (sub->render_bitmap_subs && sub->dec_sub) { + if (obj->sub) { double sub_pts = video_pts; if (sub_pts != MP_NOPTS_VALUE) sub_pts -= opts->sub_delay; - sub_get_bitmaps(sub->dec_sub, obj->vo_res, sub_pts, out_imgs); - } else { - osd_object_get_bitmaps(osd, obj, out_imgs); + sub_get_bitmaps(obj->sub, obj->vo_res, sub_pts, out_imgs); } } else if (obj->type == OSDTYPE_EXTERNAL2) { if (obj->external2 && obj->external2->format) { @@ -324,8 +321,8 @@ void osd_draw(struct osd_state *osd, struct mp_osd_res res, if ((draw_flags & OSD_DRAW_OSD_ONLY) && obj->is_sub) continue; - if (obj->sub_state.dec_sub) - sub_lock(obj->sub_state.dec_sub); + if (obj->sub) + sub_lock(obj->sub); struct sub_bitmaps imgs; render_object(osd, obj, res, video_pts, formats, &imgs); @@ -338,8 +335,8 @@ void osd_draw(struct osd_state *osd, struct mp_osd_res res, } } - if (obj->sub_state.dec_sub) - sub_unlock(obj->sub_state.dec_sub); + if (obj->sub) + sub_unlock(obj->sub); } pthread_mutex_unlock(&osd->lock); |