void reinit_subs(struct MPContext *mpctx, int order) { struct track *track = mpctx->current_track[order][STREAM_SUB]; assert(!mpctx->d_sub[order]); struct sh_stream *sh = track ? track->stream : NULL; if (!sh) return; // The decoder is cached in the stream header in order to make ordered // chapters work better. if (!sh->sub->dec_sub) sh->sub->dec_sub = sub_create(mpctx->global); mpctx->d_sub[order] = sh->sub->dec_sub; struct dec_sub *dec_sub = mpctx->d_sub[order]; reinit_subdec(mpctx, track, dec_sub); update_osd_sub_state(mpctx, order, NULL); }
void reinit_subs(struct MPContext *mpctx, int order) { struct MPOpts *opts = mpctx->opts; struct track *track = mpctx->current_track[order][STREAM_SUB]; int obj = order ? OSDTYPE_SUB2 : OSDTYPE_SUB; assert(!mpctx->d_sub[order]); struct sh_stream *sh = track ? track->stream : NULL; if (!sh) return; // The decoder is cached in the stream header in order to make ordered // chapters work better. if (!sh->sub->dec_sub) sh->sub->dec_sub = sub_create(mpctx->global); mpctx->d_sub[order] = sh->sub->dec_sub; struct dec_sub *dec_sub = mpctx->d_sub[order]; reinit_subdec(mpctx, track, dec_sub); struct osd_sub_state state = { .dec_sub = dec_sub, // Decides whether to use OSD path or normal subtitle rendering path. .render_bitmap_subs = opts->ass_enabled || !sub_has_get_text(dec_sub), }; // Secondary subs are rendered with the "text" renderer to transform them // to toptitles. if (order == 1 && sub_has_get_text(dec_sub)) state.render_bitmap_subs = false; if (!mpctx->current_track[0][STREAM_VIDEO]) state.render_bitmap_subs = false; osd_set_sub(mpctx->osd, obj, &state); }