mirror of https://github.com/mpv-player/mpv
subs: restore support for sub_step command with libass
This was destroyed by Uoti Urpala in commit "subs: always use sub...". Features should be either kept working or completely removed, but not just crippled, which only inflates the code and frustrates users.
This commit is contained in:
parent
fd52cb65f4
commit
b554a59b58
24
command.c
24
command.c
|
@ -2365,18 +2365,22 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
|||
if (sh_video) {
|
||||
int movement = cmd->args[0].v.i;
|
||||
struct track *track = mpctx->current_track[STREAM_SUB];
|
||||
if (track && track->subdata)
|
||||
bool available = false;
|
||||
if (track && track->subdata) {
|
||||
available = true;
|
||||
step_sub(track->subdata, mpctx->video_pts, movement);
|
||||
#if 0
|
||||
// currently not implemented with libass
|
||||
if (mpctx->osd->ass_track)
|
||||
sub_delay +=
|
||||
ass_step_sub(mpctx->osd->ass_track,
|
||||
(mpctx->video_pts +
|
||||
sub_delay) * 1000 + .5, movement) / 1000.;
|
||||
}
|
||||
#ifdef CONFIG_ASS
|
||||
struct ass_track *ass_track = sub_get_ass_track(mpctx->osd);
|
||||
if (ass_track) {
|
||||
available = true;
|
||||
sub_delay += ass_step_sub(ass_track,
|
||||
(mpctx->video_pts + sub_delay) * 1000 + .5, movement) / 1000.;
|
||||
}
|
||||
#endif
|
||||
set_osd_tmsg(mpctx, OSD_MSG_SUB_DELAY, 1, osd_duration,
|
||||
"Sub delay: %d ms", ROUND(sub_delay * 1000));
|
||||
if (available)
|
||||
set_osd_tmsg(mpctx, OSD_MSG_SUB_DELAY, 1, osd_duration,
|
||||
"Sub delay: %d ms", ROUND(sub_delay * 1000));
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -32,4 +32,8 @@ struct sh_sub *sd_ass_create_from_track(struct ass_track *track,
|
|||
bool vsfilter_aspect,
|
||||
struct MPOpts *opts);
|
||||
|
||||
#ifdef CONFIG_ASS
|
||||
struct ass_track *sub_get_ass_track(struct osd_state *osd);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
10
sub/sd_ass.c
10
sub/sd_ass.c
|
@ -192,3 +192,13 @@ struct sh_sub *sd_ass_create_from_track(struct ass_track *track,
|
|||
};
|
||||
return sh;
|
||||
}
|
||||
|
||||
struct ass_track *sub_get_ass_track(struct osd_state *osd)
|
||||
{
|
||||
struct sh_sub *sh = osd ? osd->sh_sub : NULL;
|
||||
if (sh && sh->sd_driver == &sd_ass && sh->context) {
|
||||
struct sd_ass_priv *ctx = sh->context;
|
||||
return ctx->ass_track;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue