mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
vf_pad: center image on padded area if negative x/y
or if x/y go beyond padded area. This is mostly useful when paired with the aspect option. Defaults aren't changed. Idea for this was taken from mpv's soon-to-be-removed expand vf. Reviewed-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
3f8d7342c3
commit
57c3670896
@ -10430,6 +10430,9 @@ expression, and vice versa.
|
||||
|
||||
The default value of @var{x} and @var{y} is 0.
|
||||
|
||||
If @var{x} or @var{y} evaluate to a negative number, they'll be changed
|
||||
so the input image is centered on the padded area.
|
||||
|
||||
@item color
|
||||
Specify the color of the padded area. For the syntax of this option,
|
||||
check the "Color" section in the ffmpeg-utils manual.
|
||||
|
@ -173,8 +173,13 @@ static int config_input(AVFilterLink *inlink)
|
||||
goto eval_fail;
|
||||
s->x = var_values[VAR_X] = res;
|
||||
|
||||
if (s->x < 0 || s->x + inlink->w > s->w)
|
||||
s->x = var_values[VAR_X] = (s->w - inlink->w) / 2;
|
||||
if (s->y < 0 || s->y + inlink->h > s->h)
|
||||
s->y = var_values[VAR_Y] = (s->h - inlink->h) / 2;
|
||||
|
||||
/* sanity check params */
|
||||
if (s->w < 0 || s->h < 0 || s->x < 0 || s->y < 0) {
|
||||
if (s->w < 0 || s->h < 0) {
|
||||
av_log(ctx, AV_LOG_ERROR, "Negative values are not acceptable.\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
@ -192,10 +197,7 @@ static int config_input(AVFilterLink *inlink)
|
||||
inlink->w, inlink->h, s->w, s->h, s->x, s->y,
|
||||
s->rgba_color[0], s->rgba_color[1], s->rgba_color[2], s->rgba_color[3]);
|
||||
|
||||
if (s->x < 0 || s->y < 0 ||
|
||||
s->w <= 0 || s->h <= 0 ||
|
||||
(unsigned)s->x + (unsigned)inlink->w > s->w ||
|
||||
(unsigned)s->y + (unsigned)inlink->h > s->h) {
|
||||
if (s->w <= 0 || s->h <= 0) {
|
||||
av_log(ctx, AV_LOG_ERROR,
|
||||
"Input area %d:%d:%d:%d not within the padded area 0:0:%d:%d or zero-sized\n",
|
||||
s->x, s->y, s->x + inlink->w, s->y + inlink->h, s->w, s->h);
|
||||
|
Loading…
Reference in New Issue
Block a user