mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
avfilter/delogo: Check that logo area is inside the picture
We can only remove the logo if it is inside the picture. We need at least one pixel around the logo area for interpolation. Fixes ticket #5527 (Delogo crash with x=0 and/or y=0). Signed-off-by: Jean Delvare <jdelvare@suse.com> Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
531ff7161d
commit
aeefe018f8
@ -226,6 +226,20 @@ static av_cold int init(AVFilterContext *ctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int config_input(AVFilterLink *inlink)
|
||||
{
|
||||
DelogoContext *s = inlink->dst->priv;
|
||||
|
||||
/* Check whether the logo area fits in the frame */
|
||||
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_ERROR, "Logo area is outside of the frame.\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
|
||||
{
|
||||
DelogoContext *s = inlink->dst->priv;
|
||||
@ -284,6 +298,7 @@ static const AVFilterPad avfilter_vf_delogo_inputs[] = {
|
||||
.name = "default",
|
||||
.type = AVMEDIA_TYPE_VIDEO,
|
||||
.filter_frame = filter_frame,
|
||||
.config_props = config_input,
|
||||
},
|
||||
{ NULL }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user