diff --git a/sub/sd_ass.c b/sub/sd_ass.c index 4b0c3024c8..8b6f1f1554 100644 --- a/sub/sd_ass.c +++ b/sub/sd_ass.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -142,9 +143,11 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res dim, double pts, opts->ass_vsfilter_aspect_compat)) { // Let's use the original video PAR for vsfilter compatibility: - scale = scale + double par = scale * (ctx->video_params.d_w / (double)ctx->video_params.d_h) / (ctx->video_params.w / (double)ctx->video_params.h); + if (isnormal(par)) + scale = par; } mp_ass_configure(renderer, opts, &dim); ass_set_aspect_ratio(renderer, scale, 1); diff --git a/sub/sd_lavc.c b/sub/sd_lavc.c index 7fa798dd66..f0fa183419 100644 --- a/sub/sd_lavc.c +++ b/sub/sd_lavc.c @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -233,9 +234,11 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res d, double pts, if (priv->avctx->codec_id == AV_CODEC_ID_DVD_SUBTITLE && opts->stretch_dvd_subs) { // For DVD subs, try to keep the subtitle PAR at display PAR. - video_par = + double par = (priv->video_params.d_w / (double)priv->video_params.d_h) / (priv->video_params.w / (double)priv->video_params.h); + if (isnormal(par)) + video_par = par; } int insize[2]; get_resolution(sd, insize); diff --git a/sub/sd_spu.c b/sub/sd_spu.c index 3a7bf09127..fbc80b7f1f 100644 --- a/sub/sd_spu.c +++ b/sub/sd_spu.c @@ -26,7 +26,6 @@ struct sd_spu_priv { void *spudec; - struct mp_image_params video_params; }; static bool is_dvd_sub(const char *t) @@ -72,22 +71,8 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res d, double pts, spudec_set_forced_subs_only(priv->spudec, opts->forced_subs_only); spudec_heartbeat(priv->spudec, pts * 90000); - if (spudec_visible(priv->spudec)) { - double xscale = 1; - double yscale = 1; - if (opts->stretch_dvd_subs) { - // For DVD subs, try to keep the subtitle PAR at display PAR. - double video_par = - (priv->video_params.d_w / (double)priv->video_params.d_h) - / (priv->video_params.w / (double)priv->video_params.h); - if (video_par > 1.0) { - xscale /= video_par; - } else { - yscale *= video_par; - } - } - spudec_get_indexed(priv->spudec, &d, xscale, yscale, res); - } + if (spudec_visible(priv->spudec)) + spudec_get_indexed(priv->spudec, &d, 1, 1, res); } static void reset(struct sd *sd) @@ -105,25 +90,12 @@ static void uninit(struct sd *sd) talloc_free(priv); } -static int control(struct sd *sd, enum sd_ctrl cmd, void *arg) -{ - struct sd_spu_priv *priv = sd->priv; - switch (cmd) { - case SD_CTRL_SET_VIDEO_PARAMS: - priv->video_params = *(struct mp_image_params *)arg; - return CONTROL_OK; - default: - return CONTROL_UNKNOWN; - } -} - const struct sd_functions sd_spu = { .name = "spu", .supports_format = supports_format, .init = init, .decode = decode, .get_bitmaps = get_bitmaps, - .control = control, .reset = reset, .uninit = uninit, };