1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-23 23:32:26 +00:00

vf_format: add w, h parameters

Yes, this thing became vf_scale through the back door.
This commit is contained in:
wm4 2020-02-09 14:14:14 +01:00
parent eb1d50ba20
commit ee4a8f0d57
2 changed files with 15 additions and 3 deletions

View File

@ -321,6 +321,10 @@ Available mpv-only filters are:
Set the rotation the video is assumed to be encoded with in degrees. Set the rotation the video is assumed to be encoded with in degrees.
The special value ``-1`` uses the input format. The special value ``-1`` uses the input format.
``<w>``, ``<h>``
If not 0, perform conversion to the given size. Ignored if
``convert=yes`` is not set.
``<dw>``, ``<dh>`` ``<dw>``, ``<dh>``
Set the display size. Note that setting the display size such that Set the display size. Note that setting the display size such that
the video is scaled in both directions instead of just changing the the video is scaled in both directions instead of just changing the

View File

@ -50,12 +50,14 @@ struct vf_format_opts {
int chroma_location; int chroma_location;
int stereo_in; int stereo_in;
int rotate; int rotate;
int w, h;
int dw, dh; int dw, dh;
double dar; double dar;
int convert; int convert;
}; };
static void set_params(struct vf_format_opts *p, struct mp_image_params *out) static void set_params(struct vf_format_opts *p, struct mp_image_params *out,
bool set_size)
{ {
if (p->colormatrix) if (p->colormatrix)
out->color.space = p->colormatrix; out->color.space = p->colormatrix;
@ -85,6 +87,10 @@ static void set_params(struct vf_format_opts *p, struct mp_image_params *out)
if (p->rotate >= 0) if (p->rotate >= 0)
out->rotate = p->rotate; out->rotate = p->rotate;
if (p->w > 0 && set_size)
out->w = p->w;
if (p->h > 0 && set_size)
out->h = p->h;
AVRational dsize; AVRational dsize;
mp_image_params_get_dsize(out, &dsize.num, &dsize.den); mp_image_params_get_dsize(out, &dsize.num, &dsize.den);
if (p->dw > 0) if (p->dw > 0)
@ -115,7 +121,7 @@ static void vf_format_process(struct mp_filter *f)
par.color.levels = MP_CSP_LEVELS_TV; par.color.levels = MP_CSP_LEVELS_TV;
} }
set_params(priv->opts, &par); set_params(priv->opts, &par, true);
if (par.imgfmt != outfmt) { if (par.imgfmt != outfmt) {
par.imgfmt = outfmt; par.imgfmt = outfmt;
@ -135,7 +141,7 @@ static void vf_format_process(struct mp_filter *f)
if (!priv->opts->convert && frame.type == MP_FRAME_VIDEO) { if (!priv->opts->convert && frame.type == MP_FRAME_VIDEO) {
struct mp_image *img = frame.data; struct mp_image *img = frame.data;
set_params(priv->opts, &img->params); set_params(priv->opts, &img->params, false);
mp_image_params_guess_csp(&img->params); mp_image_params_guess_csp(&img->params);
} }
@ -187,6 +193,8 @@ static const m_option_t vf_opts_fields[] = {
OPT_CHOICE_C("chroma-location", chroma_location, 0, mp_chroma_names), OPT_CHOICE_C("chroma-location", chroma_location, 0, mp_chroma_names),
OPT_CHOICE_C("stereo-in", stereo_in, 0, mp_stereo3d_names), OPT_CHOICE_C("stereo-in", stereo_in, 0, mp_stereo3d_names),
OPT_INTRANGE("rotate", rotate, 0, -1, 359), OPT_INTRANGE("rotate", rotate, 0, -1, 359),
OPT_INT("w", w, 0),
OPT_INT("h", h, 0),
OPT_INT("dw", dw, 0), OPT_INT("dw", dw, 0),
OPT_INT("dh", dh, 0), OPT_INT("dh", dh, 0),
OPT_DOUBLE("dar", dar, 0), OPT_DOUBLE("dar", dar, 0),