avfilter/vf_delogo: add auto set the area inside of the frame

when the area outside of the frame, then use expr should
give user warning message and auto set to the area inside of the frame.

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
This commit is contained in:
Steven Liu 2019-09-04 23:53:05 +08:00
parent 9f0b9ae8bd
commit aea82dfe22
1 changed files with 15 additions and 0 deletions

View File

@ -327,6 +327,21 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
s->w = av_expr_eval(s->w_pexpr, s->var_values, s);
s->h = av_expr_eval(s->h_pexpr, s->var_values, s);
if (s->x + (s->band - 1) <= 0 || s->x + s->w - (s->band*2 - 2) > inlink->w ||
s->y + (s->band - 1) <= 0 || s->y + s->h - (s->band*2 - 2) > inlink->h) {
av_log(s, AV_LOG_WARNING, "Logo area is outside of the frame,"
" auto set the area inside of the frame\n");
}
if (s->x + (s->band - 1) <= 0)
s->x = 1 + s->band;
if (s->y + (s->band - 1) <= 0)
s->y = 1 + s->band;
if (s->x + s->w - (s->band*2 - 2) > inlink->w)
s->w = inlink->w - s->x - (s->band*2 - 2);
if (s->y + s->h - (s->band*2 - 2) > inlink->h)
s->h = inlink->h - s->y - (s->band*2 - 2);
ret = config_input(inlink);
if (ret < 0) {
av_frame_free(&in);