sd_lavc: remove old broken heuristic

This core of this heuristic was once copied from MPlayer's spudec.c. I
think it was meant for the case when the resolution field was missing or
so.

I couldn't find a file for which this actually does something. On the
other hand, there are samples which actually have a smaller resolution
than 720x576, and which are broken by this old hack.

For subtitles that set no resolution (I'm not sure which codec/container
that would be), there's still the fallback on video resolution.

Just get rid of this hack. Also cleanup a bit. SD_CTRL_GET_RESOLUTION
hasn't been used since DVD menu removal. get_resolution() is left with 1
call site, and would be quite awkward to keep, so un-inline it.
This commit is contained in:
wm4 2017-01-23 15:28:12 +01:00
parent 5c942128d8
commit 3e89e061c2
2 changed files with 10 additions and 39 deletions

View File

@ -16,7 +16,6 @@ struct sd;
enum sd_ctrl {
SD_CTRL_SUB_STEP,
SD_CTRL_SET_VIDEO_PARAMS,
SD_CTRL_GET_RESOLUTION,
SD_CTRL_SET_TOP,
SD_CTRL_SET_VIDEO_DEF_FPS,
SD_CTRL_UPDATE_SPEED,

View File

@ -71,35 +71,6 @@ struct sd_lavc_priv {
struct bitmap_packer *packer;
};
static void get_resolution(struct sd *sd, int wh[2])
{
struct sd_lavc_priv *priv = sd->priv;
enum AVCodecID codec = priv->avctx->codec_id;
int *w = &wh[0], *h = &wh[1];
*w = priv->avctx->width;
*h = priv->avctx->height;
if (codec == AV_CODEC_ID_DVD_SUBTITLE) {
if (*w <= 0 || *h <= 0) {
*w = priv->video_params.w;
*h = priv->video_params.h;
}
/* XXX Although the video frame is some size, the SPU frame is
always maximum size i.e. 720 wide and 576 or 480 high */
// For HD files in MKV the VobSub resolution can be higher though,
// see largeres_vobsub.mkv
if (*w <= 720 && *h <= 576) {
*w = 720;
*h = (*h == 480 || *h == 240) ? 480 : 576;
}
} else {
// Hope that PGS subs set these and 720/576 works for dvb subs
if (!*w)
*w = 720;
if (!*h)
*h = 576;
}
}
static int init(struct sd *sd)
{
enum AVCodecID cid = mp_codec_to_av_codec_id(sd->codec->codec);
@ -466,13 +437,17 @@ static void get_bitmaps(struct sd *sd, struct mp_osd_res d, int format,
video_par = -1;
if (opts->stretch_image_subs)
d.ml = d.mr = d.mt = d.mb = 0;
int insize[2];
get_resolution(sd, insize);
if (current->src_w > insize[0] || current->src_h > insize[1]) {
insize[0] = priv->video_params.w;
insize[1] = priv->video_params.h;
int w = priv->avctx->width;
int h = priv->avctx->height;
if (w <= 0 || h <= 0) {
w = priv->video_params.w;
h = priv->video_params.h;
}
osd_rescale_bitmaps(res, insize[0], insize[1], d, video_par);
if (current->src_w > w || current->src_h > h) {
w = priv->video_params.w;
h = priv->video_params.h;
}
osd_rescale_bitmaps(res, w, h, d, video_par);
}
static bool accepts_packet(struct sd *sd, double min_pts)
@ -606,9 +581,6 @@ static int control(struct sd *sd, enum sd_ctrl cmd, void *arg)
case SD_CTRL_SET_VIDEO_PARAMS:
priv->video_params = *(struct mp_image_params *)arg;
return CONTROL_OK;
case SD_CTRL_GET_RESOLUTION:
get_resolution(sd, arg);
return CONTROL_OK;
default:
return CONTROL_UNKNOWN;
}