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:
wm4 2012-09-01 19:49:04 +02:00
parent fd52cb65f4
commit b554a59b58
3 changed files with 28 additions and 10 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;
}